java - 如何扩展 JTabbedPane 以始终具有 "Add Tab"选项卡?

标签 java swing jtabbedpane

我正在尝试创建一个 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/

相关文章:

java - 将日期设置为选项卡

java - JHipster 与 Liquibase 投入生产

Java - RunnableFuture 和 SortProcessor

java - 在另一个 JFrame 中调用 JFrame

java - 如何删除默认边框以及如何锚定 jtable 的列标题?

java - 设置面板的背景颜色在 JTabbedPane 外部有效,但在 JTabbedPane 内部无效

java - 为什么从变量获取值比从数组获取值更受欢迎?

java - Java Swing中如何实现空闲任务

java - 从 JFileChooser 获取 file.properties 并在 ResourceBundle 上使用它

java - JTabbedPane 如何拥有多行选项卡,而每个选项卡面板底部没有额外的间距/填充?