我正在使用java制作一个计算器,必须指定textfield的位置。所有我知道的是使用边框布局指定位置,但不能在这里使用,因为必须指定其他按钮的位置..所以请帮助我
答案 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分钟即可完成,您可以在几分钟内布局大多数复杂的用户界面。
答案 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)))); }