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



我最近尝试触摸GUI编程,实际上这个概念很简单。但是我遇到了一个小错误。我的jpanel上添加的jlabel没有显示。我称为validation and Repaild,但两者都没有显示。

代码正在使用秋千和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);

我应该如何更新我的标签

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

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

阅读有关如何编写componentListener的示例代码以使您启动的部分。

请注意,jpanel的建议相同。不要覆盖油漆()只是为了设置面板的背景。创建面板后只需调用setbackground()方法。

如果使用jlabel的油漆方法创建文本,它不会使用该文本来大小本身,并且标签的大小将保持0 x0。setText(...)设置文本的方法。无论如何,您几乎永远都不想覆盖秋千组件的油漆方法,只有偶尔才会覆盖paintcomponent方法。

相关内容

  • 没有找到相关文章

最新更新