[英]How to place a JTextField without it generating more fields every time I minimize the window in Java?
我的代码在特定的随机位置放置了一个JTextField
,但它还在Frame的顶部创建了一个通用的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()
方法。 您正在内部paintComponent()
方法中创建new JTextField
,因此,只要您最大化窗口,就会创建一个新的JTextField
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.