【发布时间】:2015-08-19 18:43:17
【问题描述】:
请问,如何从用户在 JComboBox 中选择的内容中自动显示一些 JTextField ? 我的例子很简单。我的盒子里有一个 JComboBox 并进行了一些操作。并且根据用户从这个 JComboBox 中选择的内容,我会出现一个或多个 JTextField。
我有这个代码:
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
CalculatriceFenetre fenetre = new CalculatriceFenetre();
fenetre.setVisible(true);
}
});
}
.
public class CalculatriceFenetre extends JFrame {
private JTextField field1, field2;
private JComboBox liste;
public CalculatriceFenetre() {
super();
build();
}
private void build() {
setTitle("Calculatrice");
setSize(400, 200);
setLocationRelativeTo(null);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(buildContentPane());
}
private JPanel buildContentPane() {
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
panel.setBackground(Color.white);
field1 = new JTextField();
field1.setColumns(10);
field2 = new JTextField();
field2.setColumns(10);
field2.setVisible(false);
panel.add(field1);
panel.add(field2);
liste = new JComboBox(new OperateursModel());
liste.addActionListener(new CustomActionListener());
panel.add(liste);
return panel;
}
class CustomActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (liste.getSelectedItem().equals("op1")) {
field2.setVisible(true);
}
}
}
.
public class OperateursModel extends DefaultComboBoxModel {
private ArrayList<String> operateurs;
public OperateursModel(){
super();
operateurs = new ArrayList<String>();
operateurs.add("op1");
}
public String getSelectedOperateur(){
return (String)getSelectedItem();
}
@Override
public Object getElementAt(int index) {
return operateurs.get(index);
}
@Override
public int getSize() {
return operateurs.size();
}
@Override
public int getIndexOf(Object element) {
return operateurs.indexOf(element);
}
}
【问题讨论】:
-
你为什么不创建你需要的所有 JtextField 并在组合框选择时,将 JTextField 的可见性设置为 true/false?除非您需要满足任意数量的 JTextField,否则这种方式会更容易。
-
这就是我所做的。我设置了 JTextField 的可见性,但它不起作用
-
您是否在代码中添加了调试语句来验证 ActionEvent 是否发生?您的模型中只有一个元素(为什么仍在使用自定义模型???),我不确定您是否可以重新选择相同的项目。
-
@Mehdi 在下面看看我的解决方案。
标签: java swing jframe jtextfield