gpt4 book ai didi

java - 循环遍历 JPanel 中的嵌套字段

转载 作者:行者123 更新时间:2023-12-02 09:05:42 24 4
gpt4 key购买 nike

我创建了 2 个类,第一个类是创建 JTextFields,第二个类将这些 JTextFields 注入(inject)到 JPanel 中。我正在尝试 .setText 到每个 JTextField 但很简单

    for (Field f: fields) {
f.setValue("my text");
}

不起作用 - 它仅将文本设置到一个 JPanel 内的 JTextFields。由于每个 JTextField 都有唯一的 fieldID,您能告诉我如何对它们设置 Text (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);
}
}

最佳答案

因此,您的字段可能需要是一个二维数组,例如

Field[][] fields = new Field[9][9];

这样,您就可以访问给定面板(第一维)的字段(第二维),即fields[pane][field]

显然,在 for 循环 中,您需要正确初始化字段数组,例如 fields[i] = new Field[9] ;

这可能会让你的代码看起来更像......

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][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();
fields[i] = new Field[9];
for (int j = 0; j < 9; j++) {
fields[i][j] = new Field();
corePane[i].add(fields[i][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);
}
}

现在,说一下静态

static int fieldID = 0;

意味着Field的每个实例都将具有相同的fieldID,无论您将其更改为什么。对我来说(根据你所说的),以这种方式使用 static 没有意义

还有其他替代方案,可能会提供更好、更可重用的解决方案

关于java - 循环遍历 JPanel 中的嵌套字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59831343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com