如何放置JTextField,而不让它在每次最小化Java窗口时生成更多字段?

如何放置JTextField,而不让它在每次最小化Java窗口时生成更多字段?,java,swing,paint,jtextfield,Java,Swing,Paint,Jtextfield,我的代码将一个JTextField放置在一个特定的随机位置,但它也会在帧的顶部创建一个通用的JTextField,我不希望这样做。当我最小化它然后重新最大化它时,它会在第一个JTextField的旁边创建第二个JTextField,然后一次又一次地创建。它还删除在字段中键入的任何内容。请注意,当我将JTextField放置在随机位置时,我希望它在最小化窗口时保持在那里。代码: import java.awt.*; import java.awt.event.*; import javax.swi

我的代码将一个JTextField放置在一个特定的随机位置,但它也会在帧的顶部创建一个通用的JTextField,我不希望这样做。当我最小化它然后重新最大化它时,它会在第一个JTextField的旁边创建第二个JTextField,然后一次又一次地创建。它还删除在字段中键入的任何内容。请注意,当我将JTextField放置在随机位置时,我希望它在最小化窗口时保持在那里。代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import java.util.Random;

@SuppressWarnings("serial")
public class AC extends JPanel implements ActionListener {

    JTextField text = new JTextField(10);
    int x;
    int y;

    public AC() {
        Random r = new Random();
        x = r.nextInt(500);
        y = r.nextInt(500);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        JTextField text = new JTextField(10);
        text.setBounds(x, y, 150, 20);
        this.add(text);
    }

    static void createandshowGUI() {
        JFrame frame = new JFrame("AC");
        frame.getContentPane().setBackground(Color.white);
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        frame.setSize(dim.width, dim.height);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new AC());
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createandshowGUI();
            }
        });
    }

    public void actionPerformed(ActionEvent e) {
    }

}

绘制方法用于绘制,而不是创建零部件

绝不应在paintComponent方法中创建组件。每次Swing确定需要重新绘制组件时,都会调用paintComponent方法,以便创建新组件

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(dim.width, dim.height);   
因为您正在使用setExtendedState,所以不需要上面的代码。。。方法来设置框架的大小


为什么要在随机位置放置文本字段?听起来是个奇怪的设计。Swing设计用于布局管理器。有关详细信息,请阅读上的Swing教程部分。

绘制方法用于绘制,而不是用于创建组件

绝不应在paintComponent方法中创建组件。每次Swing确定需要重新绘制组件时,都会调用paintComponent方法,以便创建新组件

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(dim.width, dim.height);   
因为您正在使用setExtendedState,所以不需要上面的代码。。。方法来设置框架的大小


为什么要在随机位置放置文本字段?听起来是个奇怪的设计。Swing设计用于布局管理器。有关更多信息,请阅读Swing教程中的部分。

每当最小化和重新最大化窗口时,都会调用paintComponent方法。您正在paintComponent方法内创建新的JTextField,因此,每当重新最大化窗口时,都会创建新的JTextField。

每当最小化和重新最大化窗口时,都会调用paintComponent方法。您正在paintComponent方法中创建新的JTextField,因此,每当您重新最大化窗口时,都会创建一个新的JTextField。

请注意,paintComponent可能会被多次调用,我认为包括最小化/最大化窗口时。您可能希望将JTextField创建移动到createandshowGui方法;请注意,paintComponent可能会被调用很多次,我认为包括最小化/最大化窗口时。您可能希望将JTextField创建移动到createandshowGui方法;