我是JAVA GUI的新手,遇到了问题.下图显示了我的问题所在的GUI部分.
我想实现这一点,当我点击“点击切换”按钮时,将交换comboBox的内容.我尝试了不同的方式来交换两个comboBox的位置或交换两个ComboBox的内容,但都没有成功.
以下是我的代码中与此问题相关的部分.
1类:
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]);
}
}
}
希望有人能帮助我.谢谢!
解决方法:
你的意思是组合框内的数据会交换吗?如果是这样,只需交换模型:
ComboBoxModel model1 = fpcb.getJComboBox().getModel();
ComboBoxModel model2 = fpcb2.getJComboBox().getModel();
fpcb.getJComboBox().setModel(model2);
fpcb2.getJComboBox().setModel(model1);