gpt4 book ai didi

java - 如何从 JPanel 组件(例如动态创建的下拉列表、文本字段)获取值

转载 作者:行者123 更新时间:2023-12-01 16:52:16 27 4
gpt4 key购买 nike

我有一个 JPanel,它由 JFrame 内的一个下拉列表和一个文本字段组成。我的 JFrame 中有一个按钮,当用户单击该按钮时,应用程序会添加具有相同组件的新 JPanel,即下拉菜单和文本字段。因此,为此我创建了一个函数,使用 ActionListener 单击按钮时会调用该函数。

从 GUI 端一切正常,但问题是当用户完成添加 JPanel 并在这些下拉列表和文本字段中输入值时,它将单击“提交”按钮。单击“提交”按钮后,我应该能够从所有下拉列表和文本字段中获取值。这是一个挑战,因为我使用相同的函数来创建 JPanel,我无法调用它的名称来获取值,因为这会给我最后一个 JPanel值。

有什么建议我应该如何去做吗?我添加了 JFrame 的屏幕截图和创建 JPanel 的函数。任何帮助表示赞赏。谢谢。

 public static void AddPanel(final Container pane) {

panel1 = new JPanel();
String text = "<html><b>Property" + nooftimes + " :</b></html>";
JLabel label = new JLabel(text);
label.setPreferredSize(new Dimension(80, 30));
panel1.add(label);

panel1.add(new JLabel("Please enter the property"));
DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();
model.addElement("value1");
model.addElement("value2");
model.addElement("value3");
model.addElement("value4");
model.addElement("value5");


final JComboBox<String> comboBox1 = new JComboBox<String>(model);
AutoCompleteDecorator.decorate(comboBox1);
comboBox1.setPreferredSize(new Dimension(120, 22));
panel1.add(comboBox1);

final JTextField txtfield1 = new JTextField(
"Please enter your value here");
txtfield1.setPreferredSize(new Dimension(200, 22));
panel1.add(txtfield1);

txtfield1.addFocusListener(new FocusListener() {
public void focusGained(FocusEvent e) {
txtfield1.setText("");
}

public void focusLost(FocusEvent e) {
// nothing
}
});
container.add(panel1);
nooftimes++;

frame.revalidate();
frame.validate();
frame.repaint();
}

截图: **frame_screenshot** }

最佳答案

您可以返回 JPanel并将其存储在List<JPanel>中。当您单击提交按钮时,您可以迭代 JPanel s 及其 Component s。

public class Application {

private static List<JPanel> panels = new ArrayList<>();
private static Container someContainer = new Container();

public static void main(String[] args) {
panels.add(addPanel(someContainer));
panels.add(addPanel(someContainer));
panels.add(addPanel(someContainer));

submit();
}

public static JPanel addPanel(final Container pane) {
JPanel panel1 = new JPanel();
// shortened code
final JComboBox<String> comboBox1 = new JComboBox<String>();
panel1.add(comboBox1);

final JTextField txtfield1 = new JTextField("Please enter your value here");
txtfield1.setText(String.valueOf(Math.random()));
panel1.add(txtfield1);
return panel1;
}

private static void submit() {
for (JPanel panel : panels) {
Component[] components = panel.getComponents();
for (Component comp : components) {
// Cast comp to JComboBox / JTextField to get the values
if (comp instanceof JTextField) {
JTextField textField = (JTextField) comp;
System.out.println(textField.getText());
}
}
}
}
}

关于java - 如何从 JPanel 组件(例如动态创建的下拉列表、文本字段)获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37827536/

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