gpt4 book ai didi

java - 单击按钮时将组件添加到窗口

转载 作者:行者123 更新时间:2023-11-30 04:20:05 25 4
gpt4 key购买 nike

以下类创建一个带有 JPanel 容器的窗口。该容器包含一个充满 JTextFieldsJPanel 和一个上面有 JButtonJPanel。看起来像这样: Picture of my window

当我单击按钮时,我希望它在左侧 JPanel 添加另一个 JTextField ,我想知道应该如何执行此操作。我应该:

  • 以某种方式更改现有的左侧 JPanel

  • 使用更大的 GridLayout 创建一个新的 JPanel,在其中添加我想要的内容(当前项目 + 一个额外的 JTextField),然后添加 JPanel 到我的窗口,以某种方式替换我当前的 JPanel

  • 做点别的事吗?

下面是我的完整代码。如果您愿意,可以复制、粘贴并运行它。如有任何帮助,我们将不胜感激!

<小时/>
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PanelUpdateTest {
public static void main(String[] args){
int row = 4;
int col = 6;

JFrame frame = new JFrame(); //the Window
JPanel container = new JPanel(); //A panel that contains all components

JPanel buttonPanel = new JPanel();
JButton button = new JButton("Add Text Field");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.out.println("Button \"Add Text Field\" was clicked.");
//here i want code to add another JTextField to the window.
}
});
buttonPanel.add(button);

container.add(createPanel(row, col));
container.add(buttonPanel);

frame.add(container);

frame.pack();
frame.setVisible(true);
}

/**
* This method returns a JPanel filled with JTextFields.
*/
public static JPanel createPanel(int row, int col){
JPanel jp = new JPanel();
jp.setLayout(new GridLayout(row, col));
for(int i = 0; i < row*col; i++){
jp.add(new JTextField(" Text "));
}
return jp;
}
}

最佳答案

好的,为了解决这个问题,我有几个建议给你。首先也是最重要的是实际显示面板的方式。如果我继续在后续行上连续添加面板,那么在不调整大小的情况下,它们在框架中并非全部可见。

因此,我建议使用 JScrollPane 来容纳 createPanel 返回的面板。您可以阅读文档here .

接下来是使用此 GridLayout 的问题。虽然定义文本字段所需的行数很好,但您不需要在 GridLayout 中指定。如果您在布局中将任一参数定义为 0,它将沿该方向连续填充。因此,我将用 new GridLayout(0,col) 替换 new GridLayout(row, col) 。这样,您的列已被填充,但您可以拥有无​​限的行。

现在,为了修改您的 JPanel 并向其中添加更多文本字段,您需要提供访问权限。因此,我建议将 JPanel jp 制作为静态变量,并在方法内部简单地实例化它。

为什么要使其静态?因为您正在处理所有静态方法并且需要提供对 ActionListener 内部的访问。如果您在实现该接口(interface)的派生 JFrame 类中完成这一切,则可以使用实例变量来完成。

你的代码看起来像这样:

public static JPanel jp = null;
public static JPanel createPanel(int row, int column)
{
jp = new JPanel();
//etc etc
}

最后实际上是添加您的JTextFields。要在 ActionListener 内部执行此操作,请首先检查以确保 jp 不为 null。然后,只需添加文本字段,然后调用 jp.revalidate();。这会强制显示更新。

希望这对您有意义!很高兴回答有关代码的任何其他问题或我这样做的任何推理!

关于java - 单击按钮时将组件添加到窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17279089/

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