有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何扩展JTabbedPane以始终具有“添加选项卡”选项卡?

我试图创建一个JTabbedPane,这样最终的“tab”实际上是一个按钮,它将打开一个对话框,向选项卡式窗格添加内容。我试着查找JTabbedPane的源代码,但找不到选项卡对象(单击时更改当前可见组件的可单击“按钮”行)的实际位置。页面对象有一个私有列表(因此子类无论如何都无法访问它们),但它们只包含关于选项卡的信息,而不是选项卡对象本身。我的目标是能够在选项卡列表之后添加一个按钮(水平)

我还尝试使用JTabbedPane。setTabComponentAt()将最后一个选项卡的字符串更改为组件为null的JButton,但这仍然会添加选项卡组件。如果轻轻单击选项卡中按钮的右/左,将显示一个空白选项卡,因为组件周围总是有填充。也许有办法摆脱这个?但我想在某些外观和感觉中,有如下选项卡:/--\而不是此:|--|您仍然可以单击选项卡,但不能单击按钮

有人知道我如何在不编写自己版本的JTabbedPane的情况下获得我想要的东西吗

谢谢


共 (1) 个答案

  1. # 1 楼答案

    My goal is to be able to add a button that comes after the tab list (horizontally).

    正确的解决方案是编写自定义UI,但这可能会很复杂,我不确定要更改什么代码

    作为一个简单的技巧,您可以使用带有OverlyLayout的面板在选项卡式窗格的顶部/右侧显示按钮:

    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();
                }
            });
        }
    }
    

    除非选项卡窗格的宽度变得太小,并且按钮与选项卡重叠,否则效果非常好