0

我正在使用 java 制作一个计算器,必须为其指定文本字段的位置。我所知道的是使用边框布局指定位置,但不能在这里使用,因为必须指定其他按钮的位置..所以请帮助我

4

3 回答 3

1

好的,所以在 Swing 中,您通常不会通过它们的 x,y 坐标来布局事物。相反,您使用布局管理器并使用 LayoutManager 提供的 API 将内容放在屏幕上。LayoutManager 在更高级别上运行,并提供灵活的 UI 等功能,并为您响应大小的变化。不同的布局管理器根据其布局模型对事物进行不同的布局。BoxLayout vs. BorderLayout vs. SpringLayout 等。

就个人而言,作为一名长期的 Swing 开发人员,我认为最好的布局管理器是 TableLayout。它简单易学。它适用于网格系统(类似于 GridBagLayout,没有所有的麻烦和陷阱)。它更容易使用并且生成非常小的代码。

只需 15 分钟即可上手,您可以在几分钟内布局最复杂的 UI。

https://tablelayout.dev.java.net/

于 2010-08-17T13:42:23.527 回答
1

如果将布局管理器设置为null,则可以调用 JTextField.setBounds(int x, int y, int width, int height)指定画布上大小和位置的方法。

如果您的布局管理器是null您必须以绝对坐标指定所有组件位置。另请参阅组件 java 文档

另一种方法是使用更加用户友好的布局管理器,例如MiG 布局管理器,或者甚至是其他布局管理器和 JPanel 的组合。

编辑:您可以使用 GridLayout 和 BorderLayout:

JFrame frame = // the frame your adding to, could also be any other component
JTextField textField ? // your textfield
JPanel wrapperPanel = new JPanel(new BorderLayout());
JPanel grid = new JPanel(new GridLayout(4,4));

// Make the number grid

wrapperPanel.add(textField, BorderLayout.PAGE_START);
wrapperPanel.add(grid, BorderLayout.CENTER);
于 2010-08-17T13:05:55.660 回答
0

我会建议 GroupLayout。放在一起更复杂 - 你必须了解它是如何工作的。我相信这种布局是为使用可视化布局工具而设计的,但我发现自己几乎在我构建的每个面板中都手动使用它——尤其是具有常见表单元素的用户界面面板。对于具有这种布局的计算器应用程序来说,这似乎是完美的:

+---------------+
| 显示 |
+---+---+---+---+
| 7 | 8 | 9 | / |
+---+---+---+---+
| 4 | 5 | 6 | x |
+---+---+---+---+
| 1 | 2 | 3 | - |
+---+---+---+---+
| 0 | . | = | + |
+---+---+---+---+

这是构造函数:

公共计算器面板(){
  GroupLayout 布局 = new GroupLayout(this);
  layout.setAutoCreateGaps(true);
  layout.setAutoCreateContainerGaps(true);
  this.setLayout(布局);

  layout.setVerticalGroup(layout.createSequentialGroup()
    .addComponent(this.displayTextField)
    .addGroup(layout.createParallelGroup()
      .addComponent(this.sevenButton)
      .addComponent(this.eightButton)
      .addComponent(this.nineButton)
      .addComponent(this.divideButton))
    .addGroup(layout.createParallelGroup()
      .addComponent(this.fourButton)
      .addComponent(this.fiveButton)
      .addComponent(this.sixButton)
      .addComponent(this.multiplyButton))
    .addGroup(layout.createParallelGroup()
      .addComponent(this.oneButton)
      .addComponent(this.twoButton)
      .addComponent(this.threeButton)
      .addComponent(this.minusButton))
    .addGroup(layout.createParallelGroup()
      .addComponent(this.zeroButton)
      .addComponent(this.decimalButton)
      .addComponent(this.equalsButton)
      .addComponent(this.plusButton)));

  layout.setHorizo​​ntalGroup(layout.createParallelGroup()
    .addComponent(this.displayTextField)
    .addGroup(layout.createSequentialGroup()
      .addGroup(layout.createParallelGroup()
        .addComponent(this.sevenButton)
        .addComponent(this.fourButton)
        .addComponent(this.oneButton)
        .addComponent(this.zeroButton))
      .addGroup(layout.createParallelGroup()
        .addComponent(this.eightButton)
        .addComponent(this.fiveButton)
        .addComponent(this.twoButton)
        .addComponent(this.decimalButton))
      .addGroup(layout.createParallelGroup()
        .addComponent(this.nineButton)
        .addComponent(this.sixButton)
        .addComponent(this.threeButton)
        .addComponent(this.equalsButton))
      .addGroup(layout.createParallelGroup()
        .addComponent(this.divideButton)
        .addComponent(this.multiplyButton)
        .addComponent(this.minusButton)
        .addComponent(this.plusButton))));
}
于 2010-08-17T13:36:18.907 回答