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

时间:2011-09-19 14:22:04

标签: java swing jpanel

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

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

ActionListener添加JTabbedPane以通知程序标签更改(将cur_tab更改为标签号)

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

6 个答案:

答案 0 :(得分:5)

  

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

取自here

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:2)

如果您要创建返回JPanel的类,那么可以

但请注意:

有很长时间的Bug,两个Tabs不能包含相同的组件模式,模式我的意思是例如一个Tab包含JPanel + JTextField + JButton,但是第二个JPanel必须包含另一个Numbers or Type of JComponents

不幸(没什么特别的)BugsDatabase在这一刻是不可访问的

答案 3 :(得分:2)

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

我是通过为每个标签创建空面板,以及包含我(单个)复杂组件的第三个面板完成的。在JTabbedPane的StateChange事件中,我从前两个面板中删除了第三个面板,并将其添加到新选择的任何一个面板中。

有点hacky,但它运作正常。

答案 4 :(得分:0)

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

 p.add("1", MainPanel);

然后使用:

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

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

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

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

答案 5 :(得分:0)

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

UIKit