如何切换位置或交换两个JComboBox的内容?

时间:2015-12-05 21:19:08

标签: java swing user-interface combobox jcombobox

我是JAVA GUI的新手,遇到了问题。下图显示了我的问题所在的GUI部分。

enter image description here

我想点击"点击切换"按钮,将交换comboBox的内容。我尝试了不同的方式来交换两个comboBox的位置或交换两个ComboBox的内容,但都没有成功。

以下是我的代码中与此问题相关的部分。

的Class1:

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JPanel;

public class FilePathComboBox implements ActionListener {
    List<String> strings;
    BufferedReader input;
    JComboBox comboBox;
    JPanel jpFilePath;
    JButton testJB;

    public FilePathComboBox(String filePathOfSyncTool) {
        strings = new ArrayList<String>();
        FileReader fr;

        try {
            fr = new FileReader(filePathOfSyncTool);
        } catch (FileNotFoundException e1) {
            fr = null;
            e1.printStackTrace();
        }

        input = new BufferedReader(fr);
        try {
            String line = null;
            while ((line = input.readLine()) != null) {
                strings.add(line);
            }
        } catch (FileNotFoundException e) {
            System.err.println("Error, file " + filePathOfSyncTool + 
            "didn't exist.");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        String[] lineArray = strings.toArray(new String[] {});

        comboBox = new JComboBox(lineArray);
        testJB = new JButton("click to add item");
        testJB.addActionListener(this);
        jpFilePath = new JPanel();
        jpFilePath.add(comboBox);
        jpFilePath.add(testJB);

    }

    public JComboBox getJComboBox(){
        return this.comboBox;
    }

    public void setJComboBox(JComboBox jcb){
        this.comboBox = jcb;
    }

    public JPanel getjpFilePath(){
        return jpFilePath;
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        String s1 = "E:\\home\\joe\\foo";
        comboBox.insertItemAt(s1, 0);
        comboBox.setSelectedIndex(0);

    }
}

等级2:

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JPanel;

public class SwitchComboBox implements ActionListener {
    JPanel switchOverall;
    JButton switchButton;
    FilePathComboBox fpcb;
    FilePathComboBox fpcb2;
    public SwitchComboBox(){
        fpcb = new FilePathComboBox("E:\\pathRecord.txt");
        fpcb2 = new FilePathComboBox("E:\\pathRecord2.txt");
        switchButton = new JButton("click to switch");
        switchOverall = new JPanel();
        switchButton.addActionListener(this);
        switchOverall.add(fpcb.getjpFilePath());
        switchOverall.add(fpcb2.getjpFilePath());
        switchOverall.add(switchButton);
    }

    public JPanel getSwitchOverall(){
        return this.switchOverall;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //Here should be the code to switch the content 
        //or position of the two comboBox
        Component[] stringArray = fpcb.getJComboBox().getComponents();
        Component[] stringArray2 = fpcb2.getJComboBox().getComponents();
        fpcb.setJComboBox(new JComboBox());
        for(int i =0; i < stringArray2.length; i++){
            fpcb.getJComboBox().add(stringArray2[i]);
        }
        fpcb2.setJComboBox(new JComboBox());
        for(int i =0; i < stringArray.length; i++){
            fpcb2.getJComboBox().add(stringArray[i]);
        }
    }
}

希望有人可以帮助我。谢谢!

1 个答案:

答案 0 :(得分:6)

你的意思是组合框内的数据会交换吗?如果是这样,只需交换模型:

ComboBoxModel model1 = fpcb.getJComboBox().getModel();
ComboBoxModel model2 = fpcb2.getJComboBox().getModel();

fpcb.getJComboBox().setModel(model2);
fpcb2.getJComboBox().setModel(model1);