如何让我的JPanels / JFrame实际出现?

时间:2017-04-28 00:35:48

标签: java swing jframe jpanel jlabel

我有一个小部件,用于编译关于每个" plate"的不同信息,每条信息都存储在JLabel中。我已将所有JLabel放入JPanel(每个版块一个JPanel),然后将JPanel放入JFrame,因为这似乎是互联网上的共识,以便让JPanel真正显示出来起来。当我在另一个类中构造小部件时,我创建了一个小部件数组(每个小板一个小部件),因此目标是让这个小部件数组(实际上只是一个包含一个Jaabel的JFrame的JFrame)出现。我不确定我哪里出错了,因为我使用了setVisible()并且我使用了add(Component)方法。任何输入都非常感谢!!

public class BeltView extends JPanel implements BeltObserver {

    private Belt belt;
    private BeltViewWidget[] _widgets;

    public BeltView(Belt b) {
        this.belt = b;
        belt.registerBeltObserver(this);
        setLayout(new GridLayout(belt.getSize(), 1));
        _widgets = new BeltViewWidget[belt.getSize()];
        for (int i = 0; i < belt.getSize(); i++) {
            if (belt != null && belt.getPlateAtPosition(i) != null) {
                BeltViewWidget widget = new BeltViewWidget(belt, i);
                _widgets[i] = widget;
            }
        }
        for (int j = 0; j < _widgets.length; j++) {
            if (_widgets[j] != null) {
                add(_widgets[j]);
                _widgets[j].setVisible(true);
            }
        }
    }

Widget构造函数(来自widget类):

public BeltViewWidget(Belt belt, int position) {
    JPanel _widget_panel = new JPanel();
    JFrame _frame = new JFrame();
    _belt = belt;
    _position = position;
    Plate p = _belt.getPlateAtPosition(_position);
    _widget_panel.setVisible(true);
    _widget_panel.setLayout(new GridLayout());
    refresh();
}

1 个答案:

答案 0 :(得分:0)

您可以这样做:

public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame();
frame.setTitle("My First Swing Application");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel("Welcome");
frame.add(label);
frame.pack();
frame.setVisible(true);

}

我不认为您将_frame设置为true。