Java 试图构建一个GUI,使用户能够向其中添加更多文本字段

Java 试图构建一个GUI,使用户能够向其中添加更多文本字段,java,swing,jpanel,textfield,actionevent,Java,Swing,Jpanel,Textfield,Actionevent,我需要让用户向我的JFrame添加更多的文本字段,这样一旦包含JPanel的框架的大小超过其原始值,滚动窗格就会介入。 为了能够做到这一点,我想出了一个主意,放一个JButton,点击它就会出现一个新的文本字段(这是我最初的想法,并不一定意味着我是对的)。问题是,一旦我调用ActionListener类添加更多文本字段并最终拉伸其包含的面板,程序就会要求我制作JPanel final,而JPanel final不允许拉伸面板。换句话说,在我看来,我只是在拐弯抹角,请帮我把这一切整理好,下面是我的

我需要让用户向我的JFrame添加更多的文本字段,这样一旦包含JPanel的框架的大小超过其原始值,滚动窗格就会介入。 为了能够做到这一点,我想出了一个主意,放一个JButton,点击它就会出现一个新的文本字段(这是我最初的想法,并不一定意味着我是对的)。问题是,一旦我调用ActionListener类添加更多文本字段并最终拉伸其包含的面板,程序就会要求我制作JPanel final,而JPanel final不允许拉伸面板。换句话说,在我看来,我只是在拐弯抹角,请帮我把这一切整理好,下面是我的一段代码:

public class Button {
    public static void main(String[] args) {

        JFrame f = new JFrame();
        f.setLayout(new BorderLayout());
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final JPanel p = new JPanel(new GridLayout(0, 5));
        JScrollPane jsp = new JScrollPane(p);

        jsp.setPreferredSize(new Dimension(300,300));
        jsp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        jsp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);

        JButton but = new JButton("Add");
        f.add(but);
        but.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                int height=0;
                JTextField jtx = new JTextField();
                jtx.setSize(new Dimension(70,20));
                jtx.setPreferredSize(new Dimension(70,20));    
                p.add(jtf);
                height+=20;
                p.setSize(new Dimension(300, height));
                p.setPreferredSize(new Dimension(300, height)); 
            }
       });
       f.add(jsp, BorderLayout.CENTER);
       f.setLocation(300, 300);
       f.setVisible(true);
       f.pack();
    }
}

我将给你一个想法:你可以添加按钮,在按钮指令中,你可以添加一个创建文本字段的指令集。如果需要多次,则必须处理位置指针,该指针告诉您用户添加文本字段的最后位置,然后通过更新指针,用户可以在不同的位置看到文本,如果希望用户控制文本的位置,则他必须输入位置

javagui可能必须在许多平台上工作,在不同的屏幕分辨率上&使用不同的plaf。因此,它们不利于部件的精确放置。要为健壮的GUI组织组件,请改为使用布局管理器,或者与布局填充和边框一起使用。请注意,第一个示例演示了如何动态添加组件。很抱歉,我不太理解您的问题。每次需要在
GridLayout
中添加新行时,都需要调整面板大小吗?基本上,每次用户点击“添加”按钮时,都需要调整面板大小,这样JPanel(其容器)就会拉伸,从那里我需要制作一个JScrollingPane向下滚动到JPanel底部。问题是,由于我正在从ActionListener中调用一个新的JPanel,因此将最终属性指定给JPanel,因此我无法使其动态扩展。Andrew,感谢您的回复。从我从你的帖子中收集到的信息来看,你是在暗示我有可能将所有这些放在ActionListener方法主体之外的另一个JPanel上?请给我建议。好的,我把一切都弄明白了,这对我来说非常好!实际上,并不是容器在动态地改变其大小,相反,您只需向其父容器JPanel添加一个JScrollPane,并将保存文本字段的容器放在其构造函数中。再次感谢您的帮助。