【发布时间】:2015-11-19 11:29:07
【问题描述】:
我正在使用 Swing 用 Java 编写一个简单的计算器,但在使用 GridBagLayout 时遇到了问题。
以下是我对组件进行切片的方式:
如您所见,cos sin tan % log sqrt sqr 和 pi 按钮不应远离其他按钮。
此外,当我在启动程序时减小窗口大小时会发生这种情况:
按钮以我希望它们显示的方式显示,但 JTable 显示得很奇怪。
以下是有关主窗口的一些信息:
首选尺寸:600*600 Jtable : 没有设置大小信息
并且每个组件的权重属性在 GridBagConstraints 对象中设置为 0(我认为它可能来自这个
编辑:一些代码!这是我用来初始化按钮的枚举,所以你可以看到 GridBagConstraints。
//new GridBagConstraints(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty,
//int anchor, int fill, Insets insets, int ipadx, int ipady);
ZERO("0", 96, new GridBagConstraints(5,5,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
ONE("1", 97, new GridBagConstraints(4,4,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
TWO("2", 98, new GridBagConstraints(5,4,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
THREE("3", 99, new GridBagConstraints(6,4,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
FOUR("4", 100, new GridBagConstraints(4,3,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
FIVE("5", 101, new GridBagConstraints(5,3,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
SIX("6", 102, new GridBagConstraints(6,3,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
SEVEN("7", 103, new GridBagConstraints(4,2,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
EIGHT("8", 104, new GridBagConstraints(5,2,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
NINE("9", 105, new GridBagConstraints(6,2,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
DOT(".", 110, new GridBagConstraints(6,5,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
PLUS("+", 107, new GridBagConstraints(7,2,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
MINUS("-", 109, new GridBagConstraints(7,3,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
DIVIDE("/", 111, new GridBagConstraints(7,5,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
MULTIPLY("*", 106, new GridBagConstraints(7,4,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
MODULO("%", 0, new GridBagConstraints(7,6,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
EQUAL("=", 10, new GridBagConstraints(4,5,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
CLEAR("C", 67, new GridBagConstraints(7,1,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
BACKSPACE("Bck", 8, new GridBagConstraints(7,0,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
CLEARHISTORY("Clear history", 72, new GridBagConstraints(0,7,4,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
COSINUS("cos", 72, new GridBagConstraints(4,6,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
SINUS("sin", 72, new GridBagConstraints(5,6,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
TANGENT("tan", 72, new GridBagConstraints(6,6,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
SQUAREROOT("sqrt", 72, new GridBagConstraints(5,7,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
SQUARE("sqr", 72, new GridBagConstraints(6,7,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
LOGARITHM("log", 72, new GridBagConstraints(4,7,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)), //
PLUSMINUS("±", 72, new GridBagConstraints(7,7,1,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0));
这是我初始化视图的代码:
CALCULATIONSHISTORYLABEL(new GridBagConstraints(0,0,4,1,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)),
CALCULATIONSHISTORYTABLE(new GridBagConstraints(0,1,4,6,0,0,GridBagConstraints.CENTER,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)),
CURRENTCALCULATIONLABEL(new GridBagConstraints(4,0,3,1,0,0,GridBagConstraints.LINE_END,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0)),
CURRENTRESULTLABEL(new GridBagConstraints(4,1,3,1,0,0,GridBagConstraints.LINE_END,
GridBagConstraints.NONE,new Insets(5,5,5,5),0,0));
/*...*/
public View() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("simpleCount");
setPreferredSize(new Dimension(800, 800));
setLayout(new GridBagLayout());
calculationsHistoryView = new JTable();
GridBagConstraints c = new GridBagConstraints();
add(new JLabel("Calculations History"), ComponentPlacement.CALCULATIONSHISTORYLABEL.gbc);
add(new JScrollPane(calculationsHistoryView), ComponentPlacement.CALCULATIONSHISTORYTABLE.gbc);
add(currentCalculationView, ComponentPlacement.CURRENTCALCULATIONLABEL.gbc);
add(currentResultView, ComponentPlacement.CURRENTRESULTLABEL.gbc);
for (int i = 0; i < Button.values().length; i++) {
add(buttonsView.getButtons()[i], Button.values()[i].gbc);
}
pack();
setVisible(true);
requestFocus();
}
谁能帮帮我?
提前感谢您的回答。
【问题讨论】:
-
如需尽快获得更好的帮助,请发帖minimal reproducible example 或Short, Self Contained, Correct Example。
-
您是否将所有组件的高度和宽度设置为零?假设您正在尝试将所有内容均匀分布。
标签: java swing jscrollpane layout-manager gridbaglayout