Я пытаюсь реализовать 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, а затем прослушать операции изменения размера и изменить предпочтительный размер либо на его минимальный или его максимум. Сработает ли этот механизм?