【问题标题】:Java: "Add Tab Button" for a JTabbedPaneJava:JTabbedPane 的“添加选项卡按钮”
【发布时间】:2009-12-28 19:36:42
【问题描述】:

是否可以像在 Firefox 中一样将按钮添加到选项卡式窗格中。

加号按钮是我想要的。

谢谢

【问题讨论】:

    标签: java button tabs jtabbedpane


    【解决方案1】:

    我认为您应该能够通过构建自己的JTabbedPaneUI 并使用setUIJTabbedPane 上设置它来管理它。

    您的ComponentUI 有方法来获取可访问的孩子。如果您指定JButtonJLabel,那么您可能正在做生意。

    虽然我自己没有尝试过。这是“您自担风险”:)

    【讨论】:

    • 使用自定义 UI 是可行的方法。我以前做过类似的事情。要让选项卡上的“X”关闭它,您可以覆盖选项卡本身的绘制以包含 X,并安装一个鼠标侦听器来检查用户是否使用 X 选择了该区域。
    • Sun 的“选项卡式窗格”教程包含了一个这样的功能示例:java.sun.com/docs/books/tutorial/uiswing/components/…
    【解决方案2】:

    你可以试试这个:

    public static void main (String[] args) {
        JFrame parent = new JFrame ();
    
        final JTabbedPane pane = new JTabbedPane ();
        pane.addTab ("test", null);
        FlowLayout f = new FlowLayout (FlowLayout.CENTER, 5, 0);
    
        // Make a small JPanel with the layout and make it non-opaque
        JPanel pnlTab = new JPanel (f);
        pnlTab.setOpaque (false);
        // Create a JButton for adding the tabs
        JButton addTab = new JButton ("+");
        addTab.setOpaque (false); //
        addTab.setBorder (null);
        addTab.setContentAreaFilled (false);
        addTab.setFocusPainted (false);
    
        addTab.setFocusable (false);
    
        pnlTab.add (addTab);
    
        pane.setTabComponentAt (pane.getTabCount () - 1, pnlTab);
    
        ActionListener listener = new ActionListener () {
            @Override
            public void actionPerformed (ActionEvent e) {
                String title = "Tab " + String.valueOf (pane.getTabCount () - 1);
                pane.addTab (title, new JLabel (title));
            }
        };
        addTab.setFocusable (false);
        addTab.addActionListener (listener);
        pane.setVisible (true);
    
        parent.add (pane);
        parent.setSize (new Dimension (400, 200));
        parent.setVisible (true);
    }
    

    【讨论】:

    • 我仍然看到带有按钮的 TAB,而不是按钮而不是选项卡...
    【解决方案3】:

    在类的默认构造函数中编写以下代码

        JPanel panel = new JPanel();
        tabbedPane.addTab("Welcome", null, panel, null);
        tabbedPane.addTab(" + ", null, panel1, null);
    
        tabbedPane.addChangeListener(new ChangeListener()
        {
            public void stateChanged(ChangeEvent evt)
            {
                JTabbedPane tabbedPane = (JTabbedPane)evt.getSource();
    
                if(tabbedPane.getSelectedIndex() == tabbedPane.indexOfTab(" + "))
                {
                    createTab();
                }
            }
        });
    

    并在主类开始时创建方法来声明和初始化int tab2 = 2;。它的工作。

    private void createTab()
    {
        tabbedPane.addTab("New Tab",new Panel());
        tabbedPane.addTab(" + ",null,panel1,null);
        tabbedPane.setSelectedIndex(tab2);
        tab2++;
    }
    

    【讨论】:

      【解决方案4】:

      我尝试了几种解决方案,并提供了这个:

      import java.awt.Dimension;
      
      import javax.swing.JButton;
      import javax.swing.JFrame;
      import javax.swing.JScrollPane;
      import javax.swing.JTabbedPane;
      
      public class TestTab {
      
          public static void main(String[] args) {
          JFrame parent = new JFrame();
      
          final JTabbedPane tabEntity = new JTabbedPane();
          tabEntity.addTab("Details", null, new JScrollPane());
          tabEntity.addTab("Context", null, new JScrollPane());
          tabEntity.addTab("", null, new JScrollPane());
      
          addButtonToTab(tabEntity);
      
          parent.add(tabEntity);
          parent.setSize(new Dimension(400, 200));
          parent.setVisible(true);
          }
      
          public static void addButtonToTab(final JTabbedPane tabEntity) {
          tabEntity.setTabComponentAt(tabEntity.getTabCount() - 1, new JButton(
              "+"));
          }
      }
      

      所以你有:

      【讨论】:

        猜你喜欢
        • 2011-03-29
        • 2016-10-09
        • 1970-01-01
        • 1970-01-01
        • 2011-03-28
        • 1970-01-01
        • 1970-01-01
        • 2018-06-29
        相关资源
        最近更新 更多