每当我更改同一JPanel中其他JLabel的文本时,如何停止JLabel在JPanel内部更改的位置?

时间:2017-06-06 18:51:09

标签: java swing

我在JPanel中有多个JLabel。每当我更改一个文本时,它会导致JPanel内的其他JLabel移动。如何锁定它们?

1 个答案:

答案 0 :(得分:-1)

这种方法实际上取决于标签的定位方式以及您使用的LayoutManager。

默认情况下,JLabel将主要根据标签文本和字体大小计算其大小。如果要更改文本,则JLabel大小也会更改,从而使布局管理器重新定位其他标签。

这是一个使用FlowLayout和硬设置JLabel首选大小的示例,以便在文本更改时不会更改。其他布局管理员可能会选择忽略首选大小:

    JFrame frame = new JFrame();
    frame.getContentPane().setLayout( new FlowLayout() );

    JLabel l = new JLabel("text1");
    l.setPreferredSize( new Dimension( 50, (int)l.getPreferredSize().getHeight() ) );
    frame.getContentPane().add(l);

    frame.getContentPane().add( new JLabel("text2") );
    frame.getContentPane().add( new JLabel("text3") );

如果您更改l的文字,则不会移动其他2个标签。