2010-08-17 4 views
0

Я делаю калькулятор с помощью java, для которого должно быть указано положение текстового поля. все, что я знаю, заключается в том, чтобы указать позицию с использованием макета границы, но которую здесь нельзя использовать, поскольку нужно указывать положение других кнопок .. так любезно помогите мнеКак указать координату x и y текстового поля в java?

+0

Свинг, AWT, SWT? –

+0

@ jon- я знаю о swing, и все, кроме меня, не смогли найти определение команды, используя команду javap также ... – tushar

+2

Jon спрашивал, какой из трех вы используете. – Pops

ответ

1

Если вы установили менеджер макета null, вы можете позвонить метод JTextField.setBounds(int x, int y, int width, int height), определяющий размер и положение на холсте.

Если ваш менеджер макетов null, вам нужно будет указать все позиции компонентов в абсолютных координатах. См. Также Component java doc.

Альтернативой является использование более удобного диспетчера компоновки, такого как MiG Layout Manager, или даже сочетание других менеджеров компоновки и JPanel.

EDIT: Вы можете использовать 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); 
+0

Я поддерживаю этот ответ, и я также предлагаю GroupLayout. Это казалось бы идеальным для приложения калькулятора. –

+0

Или простой GridLayout (4,4), вложенный внутри BorderLayout. – Jes

+0

См. Отредактированный код – Jes

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)))); 
} 
1

ИТАК в Swing, вы, как правило, не макет вещи их х, у координаты. Вместо этого вы используете диспетчер компоновки и используете API, предоставляемый LayoutManager, чтобы помещать вещи на экран. LayoutManager работает на более высоком уровне и предоставляет такие функции, как гибкие интерфейсы и реагирует на изменения в размерах для вас. Различные менеджеры компоновки разворачивают вещи по-разному в зависимости от модели макета. BoxLayout против BorderLayout против SpringLayout и т. Д.

Лично, как разработчик Swing в течение длительного времени, я считаю, что лучшим менеджером макетов является TableLayout. Это просто и понятно. Он работает на сетке (подобно GridBagLayout без всех головных болей и gotchas). Он намного проще в использовании и создает очень маленький код.

Это займет всего 15 минут, и вы можете разложить самые сложные пользовательские интерфейсы за считанные минуты.

https://tablelayout.dev.java.net/

Смежные вопросы