【发布时间】:2016-09-08 03:17:49
【问题描述】:
我正在使用JComponents 构建用户界面。
UI 应该以这种方式工作:根据设置的值(例如通过JComboBox),显示不同的JComponents。
我的想法是 @Override 每个组件的 isVisible() 方法,或者,通过 JComboBox 将它们设置为可见或不可见。实际上,这两种方法都有效,因为当我更改 JComboBox 值时,所需的组件会在 JPanel 中出现和消失。
问题在于,即使组件在面板中不可见,它仍然处于活动状态并单击它应该在的位置(如果可见),它会触发其动作。例如。我将鼠标移到另一个JComboBox 应该在的位置上;组合框不可见,但鼠标光标变为Cursor.HAND_CURSOR,如果我点击,组合框项目的弹出列表会出现,我可以选择其中一项。
这是我正在使用的代码的一个示例:
public class MyPanel extends JPanel{
public MyPanel(){
super(new GridBagLayout());
GridBagConstraints g = new GridBagConstraints(
0, // int gridx
-1, // int gridy
1, // int gridwidth
1, // int gridheight
1, // double weightx
1, // double weighty
GridBagConstraints.NORTHWEST, // int anchor
GridBagConstraints.NONE, // int fill
new Insets(0,0,0,0), // Insets insets
0, // int ipadx
0 // int ipady
);
String[] comboItems = {"ShowCombo1","ShowCheckbox","ShowTextField"};
JComboBox combo = new JComboBox(comboItems);
JComboBox combo1 = new JComboBox(){
@Override
public boolean isVisible(){
return combo.getSelectedIndex()==0;
}
};
JCheckBox checkBox= new JCheckBox(){
@Override
public boolean isVisible(){
return combo.getSelectedIndex()==1;
}
};
JTextField textField= new JTextField(){
@Override
public boolean isVisible(){
return combo.getSelectedIndex()==2;
}
};
add(combo,g);
g.gridy += 1;
add(combo1,g);
g.gridy += 1;
add(checkBox,g);
g.gridy += 1;
add(textField,g);
}
}
有没有更好的方法来管理这类用户界面?
【问题讨论】:
-
我认为你必须展示一些代码。否则很难分析。
-
@Vampire 我认为你是对的! :)
-
如果您不想触发不可见组件的操作,也许您可以同时设置不可见组件和 setEnable(false) 其子组件但是使用代码会更清楚
-
是的,有更好的方法。根据 JComboBox 选择为您想要的每个 JComponents 组合创建一个单独的 JPanel,并使用 CardLayout 管理 JPanel。
标签: java swing user-interface