【发布时间】:2015-12-05 21:19:08
【问题描述】:
我是 JAVA GUI 新手,遇到了一个问题。下图显示了我的问题所在的 GUI 部分。
我想实现当我点击“点击切换”按钮时,comboBox的内容会被交换。我尝试了不同的方法来交换两个组合框的位置或交换两个组合框的内容,但都没有成功。
以下是我的代码中与此问题相关的部分。
第一类:
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]);
}
}
}
希望有人能帮我解决这个问题。谢谢!
【问题讨论】:
-
“内容将交换”是什么意思?您的意思是组合框中保存的数据将交换吗?如果是这样,只需交换模型即可。
-
@ Hovercraft Full Of Eels 是的,我希望交换组合框中的数据。我对模型不是很熟悉。你能告诉我更多关于如何交换模型的细节吗?
标签: java swing user-interface combobox jcombobox