是否可以对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 :(得分: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