Gui Взаимодействия - PullRequest
       2

Gui Взаимодействия

0 голосов
/ 18 февраля 2019

Это мой первый раз, когда я создаю графический интерфейс, и я нахожусь в тупике, как создавать взаимодействия.

Я пытаюсь реализовать режим одиночного выбора, когда комбинированный список находится на одном, и множественный, когда он размещенна нескольких.Я поместил их в многострочный комментарий.

Любые идеи?

// Взаимодействия

// Когда выбран «Одиночный», то JList изменяется, поэтому толькоможно выбрать один элемент.

// Когда выбран «Несколько», список JL меняется, поэтому можно выбрать несколько элементов

// Когда выбрана страна или несколько стран, 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();

        }
    });
}

}

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Было бы что-то вроде этого:

    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");
0 голосов
/ 18 февраля 2019

Вы должны начать добавлять режимы в 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());
  }
});

edit: вы также должны добавить KeyListener для обновления метки, так как выбор можно изменить с помощью клавиш со стрелками

jl.addKeyListener(new KeyAdapter() {
  @Override
  public void keyReleased(KeyEvent e) {
    label.setText(list.getSelectedValuesList().toString());
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...