利用可能なサイズに応じて多かれ少なかれ情報を表示する 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 に設定してから、サイズ変更操作をリッスンし、優先サイズを最小または最大に変更するとどうなるか考えていました。そのメカニズムはうまくいくだろうか?