2017-06-06 53 views
-2

我在JPanel中有多个JLabel。无论何时我在一个文本中更改文本,都会导致JPanel中的其他JLabel移动。如何将它们锁定到位?如何在每次更改同一JPanel中的其他JLabel文本时停止JLabel在JPanel内部的更改?

+2

欢迎来到Stack Overflow,因为你的问题不清楚,[mcve]可能会澄清你的意思。但是我发现你没有参加[巡回演出],所以仔细阅读并学习[问],然后通过编辑你的问题发布MCVE的代码。这会减少混淆和更多更好的答案,如果您不遵循上述建议,您的问题可能会被关闭和/或删除,并且您在本网站中被禁止询问新问题 – Frakcool

+1

除了MCVE建议的@ Frakcool以最小尺寸提供ASCII图形或简单的*图形*图形布局,并且可调整大小,具有更多的宽度和高度。 –

回答

-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个标签。

+0

请参阅[我是否应避免使用Java Swing中的set(Preferred | Maximum | Minimum)Size方法?](http://stackoverflow.com/q/7229226/418556)(是) –

+0

对不起,但我不同意这条规则。特别是在这个例子中,用户希望JLabel不要改变它的首选大小。在实践中,没有人会遵循100%的规则。 – tsolakp