我正在使用 java 制作一个计算器,必须为其指定文本字段的位置。我所知道的是使用边框布局指定位置,但不能在这里使用,因为必须指定其他按钮的位置..所以请帮助我
3 回答
好的,所以在 Swing 中,您通常不会通过它们的 x,y 坐标来布局事物。相反,您使用布局管理器并使用 LayoutManager 提供的 API 将内容放在屏幕上。LayoutManager 在更高级别上运行,并提供灵活的 UI 等功能,并为您响应大小的变化。不同的布局管理器根据其布局模型对事物进行不同的布局。BoxLayout vs. BorderLayout vs. SpringLayout 等。
就个人而言,作为一名长期的 Swing 开发人员,我认为最好的布局管理器是 TableLayout。它简单易学。它适用于网格系统(类似于 GridBagLayout,没有所有的麻烦和陷阱)。它更容易使用并且生成非常小的代码。
只需 15 分钟即可上手,您可以在几分钟内布局最复杂的 UI。
如果将布局管理器设置为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);
我会建议 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.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)))); }