【问题标题】:Prevent JLabel from resizing at setText()防止 JLabel 在 setText() 处调整大小
【发布时间】:2014-05-13 23:30:22
【问题描述】:

我有一个带有标签和按钮的 JDialog。我正在使用 MigLayout,我不希望调整标签的大小并弄乱布局的其余部分(因为我很确定它们有足够的空间)。我知道我可以将大小设置为固定值,但我的问题是是否有更好的解决方案(可能是 MigLayout 更好的解决方案,我不想有固定大小)。

我想到了一个解决方案,但不知道该怎么做:使用所有可用空间创建包含每个组件的面板。但是 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);
    }
}

【问题讨论】:

    标签: java swing miglayout


    【解决方案1】:

    我应该等着问这个问题。再次浏览Mig Layout Whitepaper,发现sizegroup组件约束。

    解决办法如下:

    //...
    panel.add(label1, "sg label");
    panel.add(label2, "sg label");
    //...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多