如何放置JTextField,而不让它在每次最小化Java窗口时生成更多字段?
我的代码将一个JTextField放置在一个特定的随机位置,但它也会在帧的顶部创建一个通用的JTextField,我不希望这样做。当我最小化它然后重新最大化它时,它会在第一个JTextField的旁边创建第二个JTextField,然后一次又一次地创建。它还删除在字段中键入的任何内容。请注意,当我将JTextField放置在随机位置时,我希望它在最小化窗口时保持在那里。代码:如何放置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
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方法;