gpt4 book ai didi

java - 在 paintComponent() 中创建时,JTextField 出现在 2 个位置

转载 作者:行者123 更新时间:2023-11-30 06:41:00 26 4
gpt4 key购买 nike

我正在创建一个扫雷游戏,我想做的是有一个 JTextField,用户可以在其中输入他的名字,以便将他的分数保存在一个文件中。

我的问题是,当我创建 JTextField 并将其添加到我的 Jpanel 时,它出现在 2 个位置。这是正在发生的事情的图像( https://i.imgur.com/Ao8dRo1.jpg )

这是我过度简化的代码。我认为我没有正确理解 GUI 机制的工作原理。

图形用户界面.java

public class GUI extends JFrame {
//..
//some variables here
//...

public GUI() {
this.setTitle("Minesweeper Game");
this.setSize(WIDTH, HEIGHT);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setResizable(false);
this.setLayout(null);

//This method does not involve any drawing, it only places data in some arrays that I later use in paintComponent() to draw stuff accordingly to what the data is
setMinefield();


Board board = new Board();
this.setContentPane(board);

Click click = new Click();
this.addMouseListener(click);
}

public class Board extends JPanel {
public void paintComponent (Graphics g) {
//...
//Drawing tiles, smiley, counters
//...

//And now I draw the area for the JTextField, and I also create it and add it in the Jpanel
JTextField textField = new JTextField();
textField.setFont(new Font("Tahoma", Font.PLAIN, 35));
textField.setBounds(290, 80, 135, 40); //<-- This correctly places the textField where I want. The second textField seems to appear in the exact center of the X axis of my window

add(textField); //<-- Adding the textField to the Jpanel

} //End of paintComponent()
}//End of Board class
}//End of GUI class

主.java

public class Main implements Runnable {

GUI gui = new GUI();

public static void main(String[] args) {
new Thread (new Main()).start();
}

@Override
public void run() {
while (true) {
gui.repaint();
}
}

}

最佳答案

我认为问题在于您在 Board 类中覆盖了 paintComponent 。每次需要绘制组件时都会调用此方法,因此每次都会添加一个新的文本字段。

最好在板类的构造函数中添加文本字段。

关于java - 在 paintComponent() 中创建时,JTextField 出现在 2 个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56477931/

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