垂直对齐的组件在运行时移动到一起

时间:2015-10-29 09:38:44

标签: java swing jframe vertical-alignment

我有两个组件(textfieldjList)。当它们垂直对齐时,它们会在运行时一起移动。

enter image description here enter image description here

在图片中,文本字段左侧有一个lblIcon,下面的initcomponents方法代码正常工作。

lblIcon.setIcon(new ImageIcon(new ImageIcon("icons/yeniNotBtn.png").getImage().getScaledInstance(25, 25, Image.SCALE_DEFAULT)));

当它工作时textfield向右浮动一点,jList向右移动。 我认为有一些关于布局但我无法弄清楚。听听关于布局的一般建议会很好。我是新手。提前致谢。

2 个答案:

答案 0 :(得分:2)

生成布局有点像黑色艺术和伏都教,这通常需要对可用布局管理器的合理了解。

一个布局管理器无法解决所有问题(所有时间)并且您倾向于使用一系列布局管理器,每个管理器都专注于UI的特定部分来解决特定问题。

例如,您可以通过将JLabelJTextField置于使用JPanel的{​​{1}}中来解决您的布局,然后将其与{{FlowLayout一起放置1}}使用JList的另一个JPanel

您采取的方法将取决于更大的图景,并且需要更多信息,然后在您的问题中提供。

我能提出的最重要的建议是:

  • 尝试一些不同的东西,使用不同的布局
  • 将UI分解为逻辑工作单元并设计这些部件的布局,并根据需要将它们放置在自己的容器中。对我来说,这也突出了工作单元,并帮助我生成我的类层次结构,而不是最后一个单片类,负责管理十几个或更多组件的状态
  • 避免依赖表单编辑器,他们不会教您真正构建复杂UI所需的技巧和想法。不要误会我的意思,我在日常工作中使用它们,但是我花了10多年的时间手工编写我的UI,所以我不害怕制作一个半打左右的“表格”来生成一个单独的“统一的“界面。 BorderLayout也是一个彻头彻尾的痛苦,我已经看到它分崩离析的次数多了,我想回忆一下,我倾向于避免使用其他解决方案。
  • 使用表单编辑器试验不同的布局管理器或布局管理器及其属性的组合,当您尝试解决特定问题时,它们会提供快速,可视的反馈,但直到您对通过以下方式编码布局感到满意为止我不会依赖他们

下面的示例使用GroupLayout,它是一个更灵活但也是更复杂的布局管理器之一,但它允许您做一些非常棒的事情。

Layout

GridBagLayout

查看Laying Out Components Within a ContainerHow to Use GridBagLayoutHow to Use BorderLayoutHow to Use FlowLayout了解更多详情

答案 1 :(得分:0)

使用任何摆动组件时,请设置布局。

如果你这样做,frame.setLayout(null)那么请用setBounds(x,y,width,height)方法绑定你的组件。

它将绑定您的组件,就像您放入容器一样。