我是java的新手。
我有一个班级,我正在创建gui和另一个类(主类),我正在访问gui类。在gui类中,我正在创建一些组件并将它们返回。
gui class,
public class Gui {
public Component getTopPanelContent(){
Jpanel jp = new Jpanel();
JComboBox cbo1 = new JComboBox();
JComboBox cbo2 = new JComboBox();
JComboBox cbo3 = new JComboBox();
JComboBox cbo4 = new JComboBox();
JComboBox cbo5 = new JComboBox();
JButton button = new JButton();
jp.add(cbo1);
jp.add(cbo2);
jp.add(cbo3);
jp.add(cbo4);
jp.add(cbo5);
jp.add(button);
return jp;
}
}
主要班级,
public void addComponents(int id){
Gui g = new Gui();
Jpanel container = new Jpanel();
if(id == 1){
container.add(g.getTopPanelContent);
}
}
直到这个工作正常。
在主类中有一个JTextArea,每当我打开一个文件,我必须在cbo1中显示国家列表,该文件包含必须显示的国家列表,
String[] countries = editArea.getContents().split("\n");
如何将国家/地区值传递给cbo1
由于
答案 0 :(得分:3)
好吧,我通常会看到一个GUI类,它将swing组件作为类属性。您为GUI制作了类似'util'类的内容,因此您必须搜索JComboBox
我建议您选择一个功能齐全的类来代表GUI,例如:
import javax.swing.*;
public class Gui extends JPanel {
private JComboBox cbo1 = new JComboBox();
private JComboBox cbo2 = new JComboBox();
private JComboBox cbo3 = new JComboBox();
private JComboBox cbo4 = new JComboBox();
private JComboBox cbo5 = new JComboBox();
private JButton button = new JButton();
public Gui() {
add(cbo1);
add(cbo2);
add(cbo3);
add(cbo4);
add(cbo5);
add(button);
}
}
此外,添加getter和setter; - )。
如果您想按照自己的方式保存代码,可以按索引搜索组合框:
System.out.println( jp.getComponent(0) );
或者,更好的是,您可以命名您的JComboBox,然后按名称搜索它:
cbo1.setName("countryCombo");
jp.add(cbo1);
然后:
public Component findCbo1() {
for (Component comp : this.getComponents()) {
if(comp.getName() != null && comp.getName().equals("countryCombo")) {
return comp;
}
}
return null;
}
答案 1 :(得分:2)
两种方法......
将cbo1设为static
...因此您必须在类范围内的方法之外声明它...
所以它会是这样的......
for(String s: countries){
Gui.cbo1.addItem(s);
}
或使用Singleton principle
将Gui
类设为Singleton
,然后使用Composition
访问JComboBox cbo1
答案 2 :(得分:1)
您可以将组件向上移动以成为类变量并添加公共getter。这些吸气剂可以从您的主要班级访问。
Gui Class - >
public class Gui {
private JPanel jp;
private JComboBox cbo1;
private JComboBox cbo2;
private JComboBox cbo3;
private JComboBox cbo4;
private JComboBox cbo5;
private JButton button;
public Component getTopPanelContent(){
jp = new JPanel();
cbo1 = new JComboBox();
cbo2 = new JComboBox();
cbo3 = new JComboBox();
cbo4 = new JComboBox();
cbo5 = new JComboBox();
button = new JButton();
jp.add(cbo1);
jp.add(cbo2);
jp.add(cbo3);
jp.add(cbo4);
jp.add(cbo5);
jp.add(button);
return jp;
}
/**
* @return the jp
*/
public JPanel getJp() {
return jp;
}
/**
* @return the cbo1
*/
public JComboBox getCbo1() {
return cbo1;
}
/**
* @return the cbo2
*/
public JComboBox getCbo2() {
return cbo2;
}
/**
* @return the cbo3
*/
public JComboBox getCbo3() {
return cbo3;
}
/**
* @return the cbo4
*/
public JComboBox getCbo4() {
return cbo4;
}
/**
* @return the cbo5
*/
public JComboBox getCbo5() {
return cbo5;
}
/**
* @return the button
*/
public JButton getButton() {
return button;
}
}
主类 - >
public void addComponents(int id){
Gui g = new Gui();
g.getCbo1().addItem("text");
}
虽然这解决了你的问题,但它引出了一个问题,是否有一个特定的原因你要创建一个类来保存GUI组件?有更好的方法来处理组件(特别是如果你的应用程序将更大。
答案 3 :(得分:1)
你可以做的是:
public class Gui {
public Component getTopPanelContent(){
Jpanel jp = new Jpanel();
JComboBox cbo1 = new JComboBox();
...
return jp;
}
public void addItemsToCBo1(String[] items){
for(String item : items){
cbo1.addItem(item);
}
}
}
主类:
public void addComponents(int id){
Gui g = new Gui();
Jpanel container = new Jpanel();
if(id == 1){
container.add(g.getTopPanelContent);
g.addItemsToCBo1(editArea.getContents().split("\n"));
}
}