【发布时间】:2017-04-28 00:35:48
【问题描述】:
我有一个小部件,旨在编译有关每个“盘子”的不同信息,并且每条信息都存储在 JLabel 中。我已将所有 JLabel 放入 JPanel(每个盘子一个 JPanel),然后将 JPanel 放入 JFrame,因为这似乎是互联网上让 JPanel 真正出现的最佳方式的共识。当我在另一个类中构造小部件时,我创建了一个小部件数组(每个板一个小部件),所以目标是让这个小部件数组(实际上只是一个 JFrame,其中包含一个 JPanel,其中包含多个 JLabel)出现.我不确定我哪里出错了,因为我正在使用 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);
}
}
}
小部件构造函数(来自小部件类):
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) 为了尽快获得更好的帮助,请发帖 minimal reproducible example 或 Short, Self Contained, Correct Example。 2) 考虑改为在
JList或JTable中显示小部件,然后将其放入面板中。对于数据组,这通常是一种更好的方法。
标签: java swing jframe jpanel jlabel