2011-09-19 29 views
3

是否可以在JTabbedPane中使用单个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); } 
+0

你为什么不尝试看看 – Mansuro

+0

已经尝试过,使用的是多个标签。使用1个面板添加()只会导致1个选项卡 – Akash

+3

*“使用单个JPanel的JTabbedPane中的多个选项卡”*面板很便宜。为什么不尽可能多地使用? –

回答

4

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

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

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

+1

相关示例[here](http://stackoverflow.com/questions/7054466/changing-the-shape-of-a-jtabbedpane-tab/7056093 #7056093),[here](http://stackoverflow.com/questions/2349005/jtabbedpane-swing-update-error/2349106#2349106)和[here](http://stackoverflow.com/questions/3483485/java -jprogressbar-或等效功能于一个-JTabbedPane的标签所有权/ 3484251#3484251)。 – trashgod

2

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

但注意:

有两个Tabs不能含有相同成分的模式,与模式我是指例如一个Tab包含JPanel + JTextField + JButton很长一段时间的Bug,但随后第二JPanel必须包含另一个Numbers or Type of JComponents

可惜的,没什么特别的BugsDatabase不入店在这一刻

+0

你在说[this] (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4286825)错误? – Mansuro

+0

这个错误仍然存​​在吗?另请参阅此相关的[示例](http://stackoverflow.com/questions/7054466/changing-the-shape-of-a-jtabbedpane-tab/7056093#7056093)。 – trashgod

+0

@trashgod你得到***,好笑话,hehehe,但如果我没有记错的话,那里有更多的JComponents,这是彩票Bug,N次正常工作,并且有一次... – mKorbel

5

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

从取

2

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

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

有点哈克,但它工作正常。

0

你错了。 只需设置类似的)在功能上的initComponents第一个选项卡(在面板:

p.add("1", MainPanel); 

然后使用:

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

使用此metode你将有2个选项卡相同的组件。

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

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

下面将让你与不同的标题添加相同的组件到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; 
     } 
    }; 
相关问题