2017-02-10 23 views
-1

Я пытаюсь создать calculator в java. Я новичок в Layout Managers. Я создал объект JFrame с GridBagLayout. Я создал 2 JPanel, один для чисел, а другой для операций. И JPanel используют GridLayout.JPanel занимает дополнительный регион

Так они расположены в 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); 

Но это, как результат выглядит ...

Result

Я не понимаю, почему существует большой разрыв между моей number панелью и number display. Почему возникает проблема? Как это можно решить?

+1

1) Чтобы лучше помочь, отправьте сообщение [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). 2) См. Также этот [пример калькулятора] (http://stackoverflow.com/a/7441804/418556). Он использует 'ScriptEngine' для оценки выражения в текстовом поле. 3) См. Также ['GridBagConstraints.fill'] (http://docs.oracle.com/javase/8/docs/api/java/awt/GridBagConstraints.html#fill). –

ответ

-1

Все ваше окно также является GridBagLayout. Таким образом, у вас есть 2х2 сетка с первой колонкой фиксированного размера 15

numdisp=new JTextField(15) 

Так Layout Manager также фиксирует сетку номера также к ширине numdisp. Если вы удалите этот фиксированный размер, он должен настроить размер сетки чисел.

+0

Если я удалю количество столбцов, как мне настроить ширину JTextField? –

+0

Вы всегда можете изменить этот размер, чтобы он соответствовал размеру панели чисел. Вы должны знать, что изменение ширины и/или высоты каждой ячейки в макете сетки также изменит размер соседних ячеек. Возможно, попробуйте использовать другую модель макета вместо GridBagLayout, если вам нужны разные размеры панелей. Реорганизация компонентов (перемещение их на разные панели) также может сделать трюк. – Lemonov

+0

это не устраняет пробел, который сохраняется между 'numdisp' и сеткой чисел –