【问题标题】:Multiple tabs in JTabbedPane using a single JPanel?JTabbedPane 中的多个选项卡使用单个 JPanel?
【发布时间】:2011-11-20 07:23:11
【问题描述】:

是否可以对JTabbedPane 中的多个标签项使用单个JPanel

EG:

JTabbedPanel tabs=new JTabbePanel();

JPanel panel=new JPanel();
JButton but=new JButton("TEXT");
but.addActionlistener(this);
panel.add(but)

tabs.add("First",panel);
tabs.add("Second",panel);

JTabbedPane 中添加ActionListener 以通知程序选项卡更改(将 cur_tab 更改为选项卡编号)

public void actionPerformed(..)
{ System.out.println("Now in "+cur_tab); }

【问题讨论】:

  • 你为什么不试试看
  • 已经尝试过了,使用带有 1 个面板的多个 tabs.add() 只会产生 1 个选项卡
  • “使用单个 JPanel 的 JTabbedPane 中的多个选项卡” 面板很便宜。为什么不根据需要使用多少?
  • 有一个复杂的布局和不同的选项卡,只需要小改动(例如:更改文本框文本)
  • JTabbedPane 和 CardLayout 很像,CardLayout 的用法很简单……,

标签: java swing jpanel


【解决方案1】:

以下将允许您将具有不同标题的相同组件添加到 JTabbedPane:

JTabbedPane tabbedPane = new JTabbedPane()
    {
      boolean adding = false;
      @Override
      public void removeTabAt(int index)
      {
        if(!adding)
        {
          super.removeTabAt(index);
        }
      }

      @Override
      public void insertTab(String title, Icon icon, Component component, String tip, int index)
      {
        adding = true;
        super.insertTab(title, icon, component, tip, index);
        adding = false;
      }
    };

【讨论】:

    【解决方案2】:

    你错了。 只需在函数 initComponents() 的第一个选项卡上设置一个面板,如下所示:

     p.add("1", MainPanel);
    

    然后使用:

    p.add("2", p.getTabComponentAt(0));
    

    使用此方法,您将在 2 个选项卡上拥有相同的组件。

    您可以使用 StateChanged 事件来更改此选项卡中的操作。 例如:

    JTabbedPane p = (JTabbedPane)Tabbar;
    int idx = p.getSelectedIndex();
       if(idx==0){
         Do something...
        }
       if(idx==1){
         Do something different...
        }
    

    【讨论】:

      【解决方案3】:

      我有一个面板,上面有内存密集型组件,我只想创建一个实例,但使用有吸引力的 JTabbedPane 更改它的行为。

      我通过为每个选项卡创建空面板和包含我的(单个)复杂组件的第三个面板来做到这一点。在 JTabbedPane 的 StateChange 事件中,我从前两个面板中的任何一个中删除第三个面板,并将其添加到新选择的任何一个中。

      有点hacky,但它工作正常。

      【讨论】:

        【解决方案4】:

        听起来您需要JPanel 的子类。只需创建一个处理复杂布局的抽象类,并让子类创建所需的必要 GUI 元素。

        如果您只是插入单个文本框、按钮等,您甚至可能不需要每个选项卡的子类。只需创建基类的多个实例并添加您需要的组件。

        新面板和其他 GUI 项目相对便宜。 Swing GUI 中的性能问题更可能来自事件处理或触发太多事件,而不是它有多复杂或有多少组件。让事情更容易维护和理解,然后担心性能。

        【讨论】:

        【解决方案5】:

        同一个组件不能用于多个标签

        取自here

        【讨论】:

          【解决方案6】:

          如果您要创建返回 JPanel 的类,那么是的,这是可能的

          但请注意:

          长期以来存在两个 Tabs 不能包含相同组件架构的错误,我的意思是架构例如一个 Tab 包含 JPanel + JTextField + JButton,但第二个 JPanel 必须包含另一个 Numbers or Type of JComponents

          不幸的是(没什么特别的)BugsDatabase 目前无法访问

          【讨论】:

          • 你说的是this 错误?
          • 这个bug还存在吗?另请参阅此相关example
          • @trashgod 你得到了 ***,开个玩笑,呵呵,但如果我没记错的话,那里需要更多的 JComponents,这是 Lottery Bug,N 次可以正常工作,并且一次 ...
          • @Mansuro - 看起来固定。这里的描述听起来很奇怪(即使应用了 mKorbel-weirdness 因子
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多