java - 图形界面交互

标签 java swing user-interface

这是我第一次创建 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/

相关文章:

java - Spring:将@Qualifer 附加到 Java 配置的 bean

java - Spring Boot schema.sql - 重启时删除数据库模式

java - 在 Swing 中制作 F1 快捷键

java - 当 ClassLoader 加载 libawt_lwawt.dylib 时 Swing 应用程序挂起

java - Android 中的基本可点击项目

java - 为什么此代码总是产生输出 '?'

java - 为什么字符串打印不正确?

Java GUI 变量问题

c++ - 使用纯 WinApi 的带有子项的自定义 "container"控件

java - 如何在拖放过程中在 Main-JTable 上绘制 Row Header-JTable 的 Dropline?