【问题标题】:JPanel occupies extra regionJPanel 占用额外区域
【发布时间】:2017-02-10 12:52:07
【问题描述】:

我正在尝试在java 中创建一个calculator。我是Layout Managers 的新手。我用GridBagLayout 创建了一个JFrame 对象。我创建了 2 个JPanel,一个用于数字,另一个用于操作。 JPanel 都使用 GridLayout

这就是它们在JFrame中的排列方式。

window=new JFrame("Calculator");

window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setLayout(new GridBagLayout());

//Creating window
GridBagConstraints gbc=new GridBagConstraints();
btns=new JPanel();                 //JPanel for numbers
operations=new JPanel();           //JPanel for operations
numdisp=new JTextField(15);        //JTextFIeld which displays the number
gbc.gridx=1;
gbc.gridy=1;
window.add(numdisp,gbc);

addbtn();                         //method which defines all the variables

gbc.gridx=1;
gbc.gridy=2;
window.add(btns,gbc);
gbc.gridx=2;
gbc.gridy=2;
window.add(operations,gbc);
btns.setLayout(new GridLayout(4,3,0,0));         //Layout for both JPanel's    
operations.setLayout(new GridLayout(7,1,1,1));

window.pack();
window.setVisible(true);

但这就是结果的样子……

我不明白为什么我的number 面板和number display 之间的差距很大。为什么会出现问题?怎么解决?

【问题讨论】:

标签: java swing layout-manager gridbaglayout gridlayoutmanager


【解决方案1】:

您的整个窗口也是 GridBagLayout。所以你有 2x2 网格,第一列固定大小为 15

numdisp=new JTextField(15)

因此布局管理器还将数字网格也固定为 numdisp 的宽度。 如果您删除此固定大小,它应该会调整为数字网格的大小。

【讨论】:

  • 如果去掉列数,如何调整JTextField的宽度?
  • 您可以随时更改此尺寸以适合数字面板的尺寸。您必须知道,更改网格布局中每个单元格的宽度和/或高度也会改变相邻单元格的大小。如果您需要不同大小的面板,可以尝试使用不同的布局模型而不是 GridBagLayout。组件的重组(将它们移动到不同的面板)也可以解决问题。
  • 这并不能解决numdisp 和数字网格之间的差距
  • “这并不能解决差距” 你为什么不先解决“没有 MCVE”的问题。我现在可以把这个排序了。另外,您是否按照我的建议查看了 fill 约束?
猜你喜欢
  • 1970-01-01
  • 2016-11-27
  • 2020-11-17
  • 2012-03-26
  • 2012-10-20
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多