gpt4 book ai didi

java - 无法添加动态 jtextfields 并保存它们的值

转载 作者:行者123 更新时间:2023-11-29 05:06:26 25 4
gpt4 key购买 nike

在之前的问题中,我问过与此类似的问题。但是在我以前的项目中我使用了 GUI 构建器,所以现在我想添加 JTextFieldPanel动态没有生成器。我不知道为什么,但出于某种原因我无法执行此代码:

public class Reference {
JFrame frame = new JFrame();
JPanel MainPanel = new JPanel();
MainPanel main = new MainPanel();
JPanel SubPanel = new JPanel();
JButton addButton = new JButton();
JButton saveButton = new JButton();
private List<JTextField> listTf = new ArrayList<JTextField>();
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new Reference();
}

public Reference() {
frame.add(main);
frame.setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(addButton, BorderLayout.EAST);
frame.add(saveButton, BorderLayout.WEST);
frame.pack();
frame.setSize(500, 300);
frame.setVisible(true);
main.setLayout(new BorderLayout());
main.setBackground(Color.green);
main.add(SubPanel);
SubPanel.setBackground(Color.yellow);

addButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt) {
main.add(new SubPanel());
main.revalidate();
}
});

saveButton.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent evt) {
for (int i = 0; i < main.getComponentCount();) {
SubPanel panel = (SubPanel)main.getComponent(i);
JTextField firstName = panel.getFirstName();
String text = firstName.getText();
System.out.println( text );
}}
});

}

private class SubPanel extends JPanel {

JTextField firstName = new JTextField(15);

public SubPanel() {

this.setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));
this.add(firstName);
listTf.add(firstName);
}
public JTextField getFirstName()
{
return firstName;
}
}


public class MainPanel extends JPanel
{
List<SubPanel> subPanels = new ArrayList<SubPanel>();

public MainPanel()
{
}

public void addSubPanel()
{
SubPanel panel = new SubPanel();
add(panel);
subPanels.add(panel);
}

public SubPanel getSubPanel(int index)
{
return subPanels.get(index);
}
}
}

并通过 saveButton试图获得 JTextField 的值(value), 但没有成功。在输出中我只能看到 JFrame与 2 Buttons ,但是ActionListeneraddButtonsaveButton不活跃。我不明白哪里错了。

如有任何帮助,我们将不胜感激。

最佳答案

在Swing中,你做一些事情的顺序非常重要,例如......

frame.add(main);
frame.setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(addButton, BorderLayout.EAST);
frame.add(saveButton, BorderLayout.WEST);
frame.pack();
frame.setSize(500, 300);
frame.setVisible(true);
  1. 您将 main 添加到您的 frame
  2. 您设置框架布局(!?)
  3. 你添加你的按钮
  4. 你打包框架
  5. 您设置它的大小(!?)
  6. 你让它可见

这里的问题是第 2 步。相反,如果我们简单地删除步骤 #2(步骤 #4 和 #5 也不是很好),您会发现您的窗口现在包含 main...

frame.add(main);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(addButton, BorderLayout.EAST);
frame.add(saveButton, BorderLayout.WEST);
frame.pack();
frame.setVisible(true);

这...

for (int i = 0; i < main.getComponentCount();) {
SubPanel panel = (SubPanel) main.getComponent(i);

三个原因的坏主意;

  1. 你的循环永远不会前进(i 永远是 0)
  2. 你在盲目地转换 main 的内容,而实际上并不知道上面有什么
  3. MainPanel 已经有 ListSubPanel...

您需要确保通过 addSubPanel 方法添加 SubPanel(这可能会返回 SubPanel 的实例) 并提供一种您可以访问此 List 的方法,可能是通过某种 getter。虽然,我更感兴趣的是它们的值(即文本字段文本)而不是 SubPanel 本身;)

关于java - 无法添加动态 jtextfields 并保存它们的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30229189/

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