gpt4 book ai didi

java - 无法在矩形顶部创建按钮

转载 作者:行者123 更新时间:2023-12-01 20:22:21 24 4
gpt4 key购买 nike

这是一段代码:

import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class QuitButton extends JPanel implements ActionListener
{
static JButton button = new JButton("Panic");
Color[] colors = new Color[9];

boolean pressed = false;

public QuitButton()
{
button.addActionListener(this);
colors[0] = Color.RED;
colors[1] = Color.BLUE;
colors[2] = Color.GREEN;
colors[3] = Color.YELLOW;
colors[4] = Color.BLACK;
colors[5] = Color.PINK;
colors[6] = Color.MAGENTA;
colors[7] = Color.ORANGE;
colors[8] = Color.CYAN;
}

@Override
public void actionPerformed(ActionEvent e)
{
pressed = true;
}

public static void main(String args[])
{
JFrame frame = new JFrame("Do NOT Panic!!");
QuitButton qb = new QuitButton();
frame.add(qb);
frame.add(button);
frame.setLayout(new FlowLayout());
frame.setSize(400, 400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
//frame.pack();
button.requestFocus();
qb.gameLoop();
}

public void gameLoop()
{
while (true)
{
repaint();
try
{
Thread.sleep(200);
} catch (Exception e)
{
}
}
}

public void paint(Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
if (pressed == false)
{
super.paint(g2d);
g2d.setColor(Color.GRAY);
g2d.fillRect(0, 0, 400, 400);
} else
{
super.paint(g2d);
Random r = new Random();
int min = 0;
int max = 8;
int index = r.nextInt(max - min) + min;
g2d.setColor(colors[index]);
g2d.fillRect(0, 0, 400, 400);
}
}

这个程序的目的:矩形之前应该是灰色的,但是当我单击紧急按钮时,颜色应该开始改变。
请不要与 QuitButton 类的名称混淆。
但我的矩形没有占据整个窗口。相反,我得到了一个像这样的小矩形:http://g.recordit.co/xJAMiQu6fM.gif我认为这是因为我正在使用的布局,并且我没有在任何地方指定按钮位于顶部。也许这就是他们并肩而来的原因。我是 GUI 创建新手,感谢您的帮助。

最佳答案

您似乎对如何执行此操作进行了一些猜测,这不是学习使用库的好方法。您的第一步应该是检查相关教程,其中大部分可以在这里找到:Swing Info由于这似乎是家庭作业,因此我不会为您提供代码解决方案,而是提供有关如何改进的建议:

  • 重写paintComponent,而不是paint,因为后者提供双缓冲并且风险较小(较少绘制边框和子组件问题)
  • 在你的paintComponent重写中,一定要先调用super的paintComponent方法来清除“脏”像素。
  • 在游戏循环中使用 Swing 计时器,而不是 while 循环。这将防止您的 while 循环卡住 Swing 事件线程,这个问题可能会卡住您的程序。谷歌搜索一下教程,因为它非常有帮助。
  • 在 ActionListener 的代码(这里可能是 Swing Timer 的 ActionListener)中进行随机化,而不是在绘画代码中。绘画代码不应更改对象的状态,而应仅显示对象的状态。
  • FlowLayout 将尊重组件的首选大小,并且组件的首选大小为 0,0 或接近它。改变这个。最好重写 public Dimension getPreferredSize() 并返回与您的矩形大小匹配的维度。
  • 避免使用“神奇”数字(例如矩形的大小),而应使用常量或字段。
  • 在计时器的 ActionListener 中调用 repaint(),以便 JVM 知道要绘制组件。

关于java - 无法在矩形顶部创建按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44473750/

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