我正在尝试创建一个 JTabbedPane,以便最终的“选项卡”实际上是一个按钮,它将打开一个对话框以向选项卡式 Pane 添加某些内容。我尝试查看 JTabbedPane 的源代码,但找不到选项卡对象(单击时更改当前可见组件的可单击“按钮”行)的实际位置。有一个 Page 对象的私有(private)列表(因此子类无论如何都无法访问它们),但它们仅包含有关选项卡的信息,而不是选项卡对象本身。我的目标是能够在选项卡列表之后添加一个按钮(水平)。
我还尝试使用 JTabbedPane.setTabComponentAt() 将最终选项卡的字符串更改为组件为 null 的 JButton,但这仍然添加了选项卡组件。如果您稍微单击选项卡中按钮的右侧/左侧,则会显示一个空白选项卡,因为组件周围始终有填充。也许有办法摆脱这个?但我想在一些外观和感觉中有这样的选项卡:/---\而不是这样:|---|您仍然可以单击选项卡,但不能单击按钮。
有谁知道如何在不编写自己的 JTabbedPane 版本的情况下获得我正在寻找的内容?
谢谢!
最佳答案
My goal is to be able to add a button that comes after the tab list (horizontally).
正确的解决方案是编写自定义 UI,但这可能很复杂,而且我不确定要更改哪些代码。
作为一个简单的技巧,您可以使用带有 OverlayLayout 的面板来在选项卡式 Pane 的顶部/右侧显示按钮:
import java.awt.*;
import javax.swing.*;
import javax.swing.plaf.*;
public class TabbedPaneWithComponent
{
private static void createAndShowUI()
{
JPanel panel = new JPanel();
panel.setLayout( new OverlayLayout(panel) );
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.add("1", new JTextField("one"));
tabbedPane.add("2", new JTextField("two"));
tabbedPane.setAlignmentX(1.0f);
tabbedPane.setAlignmentY(0.0f);
JCheckBox checkBox = new JCheckBox("Check Me");
checkBox.setOpaque( false );
checkBox.setAlignmentX(1.0f);
checkBox.setAlignmentY(0.0f);
panel.add( checkBox );
panel.add(tabbedPane);
JFrame frame = new JFrame("TabbedPane With Component");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( panel );
frame.setLocationByPlatform( true );
frame.setSize(400, 100);
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
效果非常好,除非选项卡式 Pane 的宽度变得太小并且按钮与选项卡重叠。
关于java - 如何扩展 JTabbedPane 以始终具有 "Add Tab"选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23329805/