【发布时间】:2020-01-20 21:50:42
【问题描述】:
我已经制作了 2 个类,第一个是制作 JTextFields,第二个是把这些 JTextFields 注入到 JPanel 中。我正在尝试将 .setText 设置为每个 JTextField 但很简单
for (Field f: fields) {
f.setValue("my text");
}
不起作用 - 它仅将文本设置为一个 JPanel 中的 JTextFields。由于每个 JTextField 都有唯一的 fieldID,您能告诉我如何为它们设置文本(setValue)吗?这些值需要在循环之外设置,使用 ActionListener。
public class Field {
JTextField field = new JTextField();
static int fieldID = 0;
private String text;
public Field() {
fieldID++;
}
public String getValue() {
return field.getText();
}
public void setValue(String text) {
field.setText(text);
}
}
public class Frame extends JFrame {
public Frame() {
Field[] fields = new Field[9];
JPanel[] corePane = new JPanel[9];
JPanel frontPane = new JPanel();
frontPane.setLayout(new GridLayout(3, 3));
for (int i = 0; i < corePane.length; i++) {
corePane[i] = new JPanel();
for (int j = 0; j < 9; j++) {
fields[j] = new Field();
corePane[i].add(fields[j].field);
}
corePane[i].setLayout(new GridLayout(3, 3));
frontPane.add(corePane[i]);
}
setLayout(new BorderLayout());
setSize(300, 300);
getContentPane().add(frontPane, BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String args[]) {
SwingUtilities.invokeLater(Frame::new);
}
}
【问题讨论】:
-
所以,您的
fields可能需要是一个二维数组,例如Field[][] fields = new Field[9][9];。这样,您可以访问给定面板(第一维)的字段(第二维),即fields[pane][field]。显然,在您的for-loop中,您需要正确初始化字段的数组,例如fields[I] = new Field[9]; -
似乎文本字段应该被一个
JTable替换(但是关于它们的目的没有足够的细节让我确定)。一般提示: 1) 为了尽快获得更好的帮助,edit 添加minimal reproducible example 或Short, Self Contained, Correct Example。 2)public class Frame extends JFrame {这里没有很好的案例来扩展JFrame。只需使用一个实例。
标签: java swing loops constructor