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

Java 我希望在第一个组合框中选择的城市不会出现在第二个组合框中,java,actionlistener,jcombobox,selecteditem,Java,Actionlistener,Jcombobox,Selecteditem,如果我从:comboBox中选择一个城市,那么它不应该出现在TO:comboBox中。如何编写此actionListener的actionListener 我的代码在这里: 公共类城市快车{ public static void main(String[] args) { String[] cFrom = {"Choose", "Istanbul", "New York", "London", &q

如果我从:comboBox中选择一个城市,那么它不应该出现在TO:comboBox中。如何编写此actionListener的actionListener

我的代码在这里:

公共类城市快车{

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

}

}

我重新编写了您的代码,以摆脱静态。您只需要一个城市列表,就可以创建“发件人”和“收件人”
jComboxes

您可以使用
ActionListener
来侦听from
JComboBox
中的更改,并将城市从to
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);
                }
            }
        }
        
    }

}
导入java.awt.BorderLayout;
导入java.awt.Dimension;
导入java.awt.FlowLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.BorderFactory;
导入javax.swing.JComboBox;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
公共类CityFromTo实现可运行{
公共静态void main(字符串[]args){
invokeLater(new CityFromTo());
}
私人JComboBox comboFrom;
私人JComboBox comboTo;
私有字符串[]城市={“选择”、“伊斯坦布尔”、“纽约”、“伦敦”,
“米兰”、“东京”、“巴黎”、“莫斯科”、“El–zığğ”};
@凌驾
公开募捐{
JFrame=新JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createMainPanel(),BorderLayout.CENTER);
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
私有JPanel createMainPanel(){
JPanel panel=newjpanel(newflowlayout());
panel.setBorder(BorderFactory.createEmptyByOrder(5,5,5,5));
面板。设置首选尺寸(新尺寸(400350));
JLabel-from=新的JLabel(“from”);
面板。添加(从);
comboFrom=新的JComboBox(城市);
comboFrom.addActionListener(新的FromListener());
panel.add(comboFrom);
JLabel to=新JLabel(“to:”);
面板。添加(至);
comboTo=新的JComboBox(城市);
面板。添加(组合到);
返回面板;
}
公共类FromListener实现ActionListener{
@凌驾
已执行的公共无效操作(操作事件){
字符串city=(字符串)comboFrom.getSelectedItem();
comboTo.removeAllItems();
用于(字符串s:城市){
如果(!s.等于(城市)){
组合到.附加项;
}
}
}
}
}

是否可以禁用该城市,而不是将其删除?从用户界面的角度来看,它会更好。非常感谢你。。。伊斯坦布尔的问候:)