我正在尝试实现一个 JPanel,它根据可用大小显示更多或更少的信息。
基本上,这个想法是有一个这样的默认内容:
当空间减少时,这可以缩小到:
我的代码是这样的:
import net.miginfocom.swing.MigLayout;
import javax.swing.*;
class PanelDemo extends JPanel {
private final JLabel title = new JLabel();
private final JLabel counter1 = new JLabel("00");
private final JLabel counter1Label = new JLabel();
private final JLabel counter2 = new JLabel("00");
private final JLabel counter2Label = new JLabel();
/**
* Instantiates a new obs app cadre message bloc panel.
*/
public PanelDemo() {
this.setOpaque(false);
initGUI();
}
private final void initGUI() {
// 1°)
final MigLayout migLayout = new MigLayout(
"fillx, hidemode 2, debug",
"[growprio 0][]" //define 4 columns
);
setLayout(migLayout);
// 2°)
//
add(title, "spanx");
add(counter1, "newline");
add(counter1Label);
add(counter2);
add(counter2Label);
}
public static void main(String[] args) {
final JFrame jFrame = new JFrame("test 4");
jFrame.getContentPane().setLayout(new MigLayout("fillx, debug"));
final PanelDemo item1 = new PanelDemo();
item1.title.setText("Element 1");
item1.counter1Label.setText("First lbl");
item1.counter2Label.setText("Second lbl");
jFrame.getContentPane().add(item1, "growx, gpx 110");
final PanelDemo item2 = new PanelDemo();
item2.title.setText("Element 2");
item2.counter1Label.setText("First lbl");
item2.counter2Label.setText("Second lbl");
jFrame.getContentPane().add(item2, "growx, gpx 100");
jFrame.pack();
jFrame.setVisible(true);
} }
我尝试添加一个 ComponentListener 并覆盖 componentResized() 以查找何时可以显示/隐藏我的辅助标签,但我没有成功。
有谁知道如何实现这种与 MigLayout 增长优先级相匹配的行为?
Update1:我在想...如果我将最小宽度设置为 counter1+label1,将最大尺寸设置为 counter2+label2,然后监听调整大小操作并将首选尺寸更改为最小值或最大值。这种机制会起作用吗?