使用单个JPanel的JTabbedPane中的多个选项卡



是否可以在JTabbedPane中使用单个JPanel的多个选项卡项?

,

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

同一个组件不能用于多个选项卡

from here

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

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

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

如果你要创建一个返回JPanel的类那么这是可能的

注意:

两个Tabs不能包含相同的组件模式,模式I意味着例如一个Tab包含JPanel + JTextField + JButton,但第二个JPanel必须包含另一个Numbers or Type of JComponents

很遗憾(没有什么特别的)BugsDatabase目前无法访问

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

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

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

 p.add("1", MainPanel);

然后使用:

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

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

你可以使用statechangeevent来改变这个选项卡中的动作。例如:

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

下面将允许您将具有不同标题的相同组件添加到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;
      }
    };

最新更新