我想實現顯示取決於可用大小或多或少的信息一個JPanel。如何實現一個顯示/隱藏內容取決於其寬度的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:我在想......如果我最小寬度設置爲計數器1 + LABEL1,最大尺寸計數器2 +標籤2,然後聽來調整操作和更改首選大小要麼最小或其最大值。這種機制會起作用嗎?
行爲是不完全的一個期待。我應該更清楚。當可用於第二標籤(第二計數器+第二說明)的空間不再可用,我希望整個組件通過移除/調用setVisible(假)的次級標記和具有其優選的尺寸減小,以反映新的佈局,以改變其狀態。稍後,當父容器有更多可用空間時,我的面板應該返回到其初始完整狀態。我的想法是否使敏感? – Pigelvy 2013-03-27 07:36:43