我有一个带标签和按钮的JDialog。我使用MigLayout并且我不希望调整标签的大小并弄乱其余的布局(因为我非常确定它们有足够的空间)。我知道我可以将大小设置为固定值,但我的问题是这是否是一个更好的解决方案(maby是一个更好的解决方案,我不希望有固定的大小)。
我想了解解决方案,但不知道如何操作:使用所有可用空间为每个组件创建面板。但是setText()不会导致标签大小调整。他们应该保持原样。
工作示例:
public class ResizeDemo {
public static void main(String[] args) {
new ResizeDemo();
}
public ResizeDemo() {
JDialog dialog = new JDialog();
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setSize(600, 400);
dialog.setResizable(false);
dialog.setLocationRelativeTo(null);
JPanel panel = new JPanel(new MigLayout("wrap 2", "fill, grow", "fill, grow"));
JLabel label1, label2;
JButton longText1, shortText1, longText2, shortText2;
label1 = new JLabel("Initial 1");
label2 = new JLabel("Initial 2");
longText1 = new JButton("longer Text");
longText2 = new JButton("longer Text");
shortText1 = new JButton("shorter Text");
shortText2 = new JButton("shorter Text");
longText1.addActionListener(new ChangeLabelListener(label1, "This is some longer Text than initial."));
longText2.addActionListener(new ChangeLabelListener(label2, "This is some longer Text than initial."));
shortText1.addActionListener(new ChangeLabelListener(label1, "Short text"));
shortText2.addActionListener(new ChangeLabelListener(label2, "Short text"));
panel.add(label1, "");
panel.add(label2, "");
panel.add(longText1, "");
panel.add(longText2, "");
panel.add(shortText1, "");
panel.add(shortText2, "");
dialog.setContentPane(panel);
dialog.setVisible(true);
}
}
class ChangeLabelListener implements ActionListener {
private JLabel label;
private String text;
public ChangeLabelListener(JLabel label, String text) {
this.label = label;
this.text = text;
}
@Override
public void actionPerformed(ActionEvent e) {
this.label.setText(this.text);
}
}
答案 0 :(得分:1)
我应该等着问这个问题。我再次浏览Mig Layout Whitepaper并找到了sizegroup组件约束。
以下是解决方案:
//...
panel.add(label1, "sg label");
panel.add(label2, "sg label");
//...