作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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();
}
最佳答案
您可以返回 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/
我是一名优秀的程序员,十分优秀!