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

标签 java swing user-interface graphics

我最近尝试接触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/

相关文章:

java - Parse(byte[]) 无法应用于 java.lang.string

java - Swing:自定义组件上的监听器执行顺序

c++ - 如何在 QListWidget 下添加这样的组按钮?

java - 读取文本文件(我已经知道)然后在 GUI 中显示它?

Java - 使用默认电子邮件提供程序发送电子邮件

java - 有异常的返回类型是好的编程吗?

java - 从模式生成接口(interface)

java - HTMLDocument 文本中位置或偏移量的含义

java - jbuttons 的波动

java - 如何让一个简单的 GUI 打开另一个 GUI 并检测它何时关闭