这是我第一次创建 Gui,我对如何创建交互感到困惑。
我试图在组合框处于单个状态时实现单选择模式,而在将组合框放置在多个状态时实现多个选择模式。我将它们放在多行注释上。
有什么想法吗?
//Interactions
//When “Single” is selected then the JList changes so only one item can be selected.
//When “Multiple” is selected, the JList changes so multiple items can be selected
//When a country, or multiple countries, is selected the JLabel changes to reflect the new selections
public class GuiTest {
public static String[] Countries = {"Africa", "Haiti", "USA", "Poland", "Russia", "Canada", "Mexico", "Cuba"};
public static String[] Selection = {"Single", "Multiple"};
JPanel p = new JPanel();
JButton b = new JButton("Testing");
JComboBox jc = new JComboBox(Selection);
JList jl = new JList(Countries);
private static void constructGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame();
frame.setTitle("Countries Selection");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// add a JLabel that says Welcome
JLabel label = new JLabel("Selected Items:");
frame.add(label);
frame.pack();
JComboBox jc = new JComboBox(Selection);
frame.add(jc);
frame.pack();
frame.setVisible(true);
JList jl = new JList(Countries);
frame.add(jl);
frame.pack();
JComponent panel = new JPanel();
panel.setLayout(new FlowLayout());
panel.add(new JLabel("Choose Selection Mode:"));
panel.add(jc);
frame.add(panel, BorderLayout.NORTH);
frame.add(jl, BorderLayout.WEST);
frame.add(label, BorderLayout.SOUTH);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
constructGUI();
}
});
}
}
最佳答案
您应该开始将模式添加到组合框:
comboBoxCategoria.addItem("Single",0);
comboBoxCategoria.addItem("Multiple",1);
然后添加一个ActionListener到你的ComboBox来修改列表选择模式
jc.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if(jc.getSelectedItem().equals("Single")){
jl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
}else{//must equals
jl.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
}
}
});
最后在列表上添加一个 MouseListener 以检测列表选择的更改并更改 JLabel 以反射(reflect)新的选择
jl.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
label.setText(list.getSelectedValuesList().toString());
}
});
编辑:您还应该添加一个 KeyListener 来更新标签,因为可以通过箭头键更改选择
jl.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
label.setText(list.getSelectedValuesList().toString());
}
});
关于java - 图形界面交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54746948/