如何在java中指定textfield的x和y坐标?

时间:2010-08-17 12:54:10

标签: java layout calculator

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

3 个答案:

答案 0 :(得分:1)

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

如果布局管理器为null,则必须以绝对坐标指定所有组件位置。另请参阅Component java doc

另一种方法是使用更加用户友好的布局管理器,例如MiG Layout Manager,甚至是其他布局管理器和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);

答案 1 :(得分:1)

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

就个人而言,作为很长一段时间的Swing开发人员,我认为最好的布局管理器是TableLayout。学习起来既简单又直接。它适用于网格系统(类似于GridBagLayout,没有任何令人头疼的问题)。它更容易使用并产生非常小的代码。

只需15分钟即可完成,您可以在几分钟内布局大多数复杂的用户界面。

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

答案 2 :(得分:0)

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

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

这是构造函数:

public CalculatorPanel() {
  GroupLayout layout = new GroupLayout(this);
  layout.setAutoCreateGaps(true);
  layout.setAutoCreateContainerGaps(true);
  this.setLayout(layout);

  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.setHorizontalGroup(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))));
}