簡體   English   中英

桂互動

[英]Gui Interactions

這是我第一次創建Gui,並且對如何創建交互感到很困惑。

我正在嘗試在組合框位於單個上時實現單一選擇模式,而在組合框位於多個上時實現多個選擇模式。 我將它們放在多行注釋中。

有任何想法嗎?

//互動

//當選擇“ Single”時,JList更改,因此只能選擇一項。

//選擇“多個”時,JList更改,因此可以選擇多個項目

//當選擇一個或多個國家時,JLabel會更改以反映新的選擇

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();

        }
    });
}

}

您應該開始將模式添加到ComboBox:

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以反映新的選擇

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());
  }
});

就像這樣:

    jc.addActionListener((evt) -> {
        if ("Single".equals(jc.getSelectedItem())) {
            jl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            int[] sel = jl.getSelectedIndices();
            if (sel != null && sel.length > 1) {
                jl.setSelectedIndex(sel[0]);
            }
        } else {
            jl.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        }
    });
    jl.addListSelectionListener((evt) -> {
        StringBuilder buf = new StringBuilder();
        for (Object o: jl.getSelectedValuesList()) {
            if (buf.length() > 0) {
                buf.append(", ");
            }
            buf.append(o);
        }
        label.setText(buf.toString());
    });
    jc.setSelectedItem("Single");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM