繁体   English   中英

为什么我的标签和按钮没有显示在我的 JFrame 中?

[英]Why aren't my label and button showing up in my JFrame?

我似乎无法为我的生活弄清楚这一点。 对不起,如果有多余的代码,但我一直在尝试,无法弄清楚。 JFrame出现但按钮和标签没有出现。

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class ex03 {

     int w = 20;
     int h = 20;

     public ex03() {
         JFrame fra = new JFrame("");
         fra.setBounds(10, 10, 200, 200);
         fra.setLayout(null);
         fra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         fra.setVisible(true);

         JPanel pan = new JPanel();
         pan.setLayout(null);
         pan.setVisible(true);
         fra.getContentPane().add(pan);

         JLabel lab = new JLabel();
         lab.setBounds(10, 10, w, h);
         lab.setOpaque(true);
         lab.setBackground(Color.blue);
         lab.setVisible(true);

         JButton but = new JButton("Play");
         but.setBounds(10, 10, 100, 35);
         but.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
                 w++;
                 h++;
             }
         });
         but.setVisible(true);

         pan.add(lab);
         pan.add(but);
     }

     public static void main (String[] args) {
         new ex03();
     }
}

你需要调用fra.setVisible(true); 将可见元素添加到内容窗格后。

问题是在顶级容器(窗口)可见添加按钮和标签。 因此,必须重新验证组件层次结构,以使组件也可见:

pan.add(lab);
pan.add(but);
pan.revalidate();
pan.repaint();

根据Container#add(Component comp)文档:

此方法更改与布局相关的信息,因此使组件层次结构无效。 如果容器已被显示,则此后必须验证层次结构以显示添加的组件。

另一方面,更好的做法是添加所有组件打包并使窗口可见,因此组件层次结构仅验证一次。

pan.add(lab);
pan.add(but);
...
frame.add(pan);
frame.pack();
frame.setVisible(true);

其他的建议

请注意,Swing 旨在与布局管理器一起使用,因此不鼓励使用setBounds(...)setLocation(...)setXxxSize(...)等方法。 组件的位置和大小是布局经理的责任,而不是开发人员的责任,除非您有充分的理由这样做。 没有布局管理器的做(绝对定位)部分:

尽管可以不用布局管理器,但您应该尽可能使用布局管理器。 布局管理器可以更轻松地根据外观和感觉相关的组件外观、不同的字体大小、容器的大小变化以及不同的区域设置进行调整。 布局管理器也可以被其他容器以及其他程序轻松重用。

使父框架可见和更新子组件图形的组合将起作用:

fra.setVisible(true);
progressLabel.update(progressLabel.getGraphics());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM