JAVA:为什么在相同的垂直位置(不同的水平位置)不能有两个以上的JLabel?

时间:2019-03-03 00:38:19

标签: java user-interface jlabel

我正在创建带有三个标签的GUI。我在每个标签上使用了setBounds方法,并且前两个标签位于我在参数中传递的x和y位置。但是,第三个标签仅位于左侧。

这是我的代码:

principleLabel = new JLabel(); 
principleLabel.setText("Principle");
principleLabel.setBounds(101, 10, 100, 50);
frame.getContentPane().add(principleLabel); 

rateLabel = new JLabel(); 
rateLabel.setText("Rate (Percentage)");
rateLabel.setBounds(295, 10, 150, 50);
frame.getContentPane().add(rateLabel); 

yearsLabel = new JLabel(); 
yearsLabel.setText("Years");
yearsLabel.setBounds(555, 10, 50, 50);
frame.getContentPane().add(yearsLabel); 

我尝试按不同的顺序放置标签,但我发现它始终是最后写得奇怪的。

My GUI

我将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

有关使用绝对定位的指南,请参见here

容器的布局管理器应设置为null。 (从显示的代码中看不到是否正在执行此操作。) setbounds方法用于容器中的所有组件。 (看起来您正在这样做。) 需要调用容器的重绘方法。

如果您进行任何调整大小,或者该组件不适合容器的范围,我不清楚会发生什么。

如果要进行布局,我可能会尝试在JavaFX中走一条简单的路线,其中使用了嵌套的HBox和VBox布局的组合。自从使用Swing已经有一段时间了,但是我怀疑您可以在嵌套的JPanels中使用一堆Box布局来做到这一点。

例如,每个标签和文本控件对将是其自己的具有垂直框布局的JPanel,而这三对将嵌套在具有水平框布局的JPanel中。 (流程也可能很好。)按钮行将位于其自己的JPanel中。我想你明白了。