是否可以在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;
}
};