我希望在第一个组合框中选择的城市不会出现在第二个组合框中



如果我选择一个城市FROM:JComboBox,那么它不应该出现在TO:组合框中。我如何编写这个动作侦听器的ActionListener?

截图

代码:

public class CityFromTo {
public static void main(String[] args) {

String[] cFrom = {"Choose", "Istanbul", "New York", "London", "Milano", "Tokyo", "Paris", "Moscow", "Elâzığ"};
String[] cTo = {"Choose", "Istanbul", "New York", "London", "Milano", "Tokyo", "Paris", "Moscow", "Elâzığ"};

JLabel from = new JLabel("FROM : ");
JLabel to = new JLabel("   TO : ");
JComboBox comboFrom = new JComboBox(cFrom);
JComboBox comboTo = new JComboBox(cTo);

JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());
frame.add(from);
frame.add(comboFrom);
frame.add(to);
frame.add(comboTo);

frame.setSize(400, 350);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

我重新编写了您的代码以摆脱静态。你只需要一个城市列表从和到JComboBoxes

您使用ActionListener来侦听来自JComboBox的更改,并从JComboBox中删除城市。我们通过移除所有城市并添加它们来移除城市,每次一个。这允许用户改变他对城市的看法。

下面是完整的可运行代码。

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class CityFromTo implements Runnable {

public static void main(String[] args) {
SwingUtilities.invokeLater(new CityFromTo());
}

private JComboBox<String> comboFrom;
private JComboBox<String> comboTo;

private String[] cities = {"Choose", "Istanbul", "New York", "London", 
"Milano", "Tokyo", "Paris", "Moscow", "Elâzığ"};
@Override
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.add(createMainPanel(), BorderLayout.CENTER);

frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

private JPanel createMainPanel() {
JPanel panel = new JPanel(new FlowLayout());
panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
panel.setPreferredSize(new Dimension(400, 350));

JLabel from = new JLabel("FROM : ");
panel.add(from);

comboFrom = new JComboBox<>(cities);
comboFrom.addActionListener(new FromListener());
panel.add(comboFrom);

JLabel to = new JLabel("   TO : ");
panel.add(to);

comboTo = new JComboBox<>(cities);
panel.add(comboTo);

return panel;
}

public class FromListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent event) {
String city = (String) comboFrom.getSelectedItem();
comboTo.removeAllItems();
for (String s : cities) {
if (!s.equals(city)) {
comboTo.addItem(s);
}
}
}

}
}

相关内容

最新更新