gpt4 book ai didi

java - 标签未显示在面板上(已尝试重新绘制和验证)

转载 作者:行者123 更新时间:2023-12-01 18:00:42 27 4
gpt4 key购买 nike

我最近尝试接触GUI编程,这个概念实际上很简单。但是我遇到了一个小错误。添加到我的 JPanel 上的 JLabel 未显示。我已调用“验证”和“重绘”,但两者均未显示。

代码使用 SWING 和 awt 进行事件处理。

这是我为复制问题而编写的非常快速的代码:

    package com.first;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class wraith
{
public static void main(String[] arg)
{
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
JFrame frame = new JFrame("Wraith, the game");
JPanel panel = new JPanel()
{

/**
*
*/
private static final long serialVersionUID = 1L;

@Override
public void paint(Graphics g) {
super.paint(g);
this.setBackground(new Color(0f,0f,0f,1.0f));
}

};
JLabel label = new JLabel()
{

/**
*
*/
private static final long serialVersionUID = 1L;

@Override
public void paint(Graphics arg0)
{
super.paint(arg0);
this.setForeground(Color.WHITE);
this.setText("Width: " + frame.getWidth() + " Height: " + frame.getHeight());
this.setHorizontalAlignment(LEFT);
this.setVerticalAlignment(TOP);
}

};
frame.setSize(500, 500);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel.add(label);
panel.validate();
frame.setVisible(true);
}

});
}
}

最佳答案

不要重写绘画方法来设置组件的属性。

您创建组件,然后设置其属性:

JLabel label = new JLabel("...");
label.setForeground(Color.WHITE);
label.setHorizontalAlignment(JLabel.LEFT);
label.setVerticalAlignment(JLabel.TOP);

How am I supposed to update my label

this.setText("Width: " + frame.getWidth() + " Height: " + frame.getHeight());

如果您想动态显示框架的宽度/高度,那么您应该使用监听器来通知标签发生变化。在这种情况下,您将使用 ComponentListener 并处理 componentResized(...) 方法。因此,基本上在 componentResized(...) 方法中,您使用 label.setText(...),这意味着标签需要定义为实例变量类。

阅读 Swing 教程中关于 How to Write a ComponentListener 的部分例如帮助您入门的代码。

注意,对于 JPanel 的建议相同。不要仅仅为了设置面板的背景而重写paint()。只需在创建面板后调用 setBackground() 方法即可。

关于java - 标签未显示在面板上(已尝试重新绘制和验证),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41200981/

27 4 0