Неполадки с компонентами на JFrame - Java
Формулировка задачи:
Доброго времени суток!
Только начал разбираться с библиотекой Swing. Решил сделать пробный проект - калькулятор. Есть несколько вопросов. Буду очень признателен всем не равнодушным, кто сможет помочь и подсказатьЗаранее спасибо за любые подсказки
1) Как сделать так, чтобы компоненты при добавленииJFrame.add(Companent c)
добавлялись не в одну строку по середине, а, допустим, делали переход на новую строку (т.е. начинали добавляться ниже)? Или можно только строго указывать координаты? (используюGridBagLayout
) 2) Позиционирование компонента определяется методомcomponent.setBounds(x,y,width,height)
, однако при смене размера окна во время выполнения все компоненты снова строятся в одну строку по середине. Можно ли как-то это пофиксить? 3) Я создаю массив кнопок и задаю им значенияbutton.setText(String somestring)
в цикле. При дебаге все значения корректно вводятся, однако на экране имею следующую штуку: Но если сменить размер окна во время выполнения - кнопки приобретают нужные значения.Решение задачи: «Неполадки с компонентами на JFrame»
textual
Листинг программы
- import java.awt.Font;
- import java.awt.GridBagConstraints;
- import java.awt.GridBagLayout;
- import java.awt.Insets;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import javax.swing.*;
- public class ButCalc extends JFrame
- {
- private static final long serialVersionUID = 2L;
- String[] mas_add_text = {"7", "8", "9", "4", "5", "6", "1", "2", "3", "0", "."};
- String[] mas_op_text = {"/", "<-", "*", "C", "-", "±", "+", "="};
- JButton[] mas_add = new JButton[11];
- JButton[] mas_op = new JButton[8];
- JTextField text = new JTextField(10);
- ButCalc()
- {
- configure();
- GridBagConstraints constraints = new GridBagConstraints();
- constraints.fill = GridBagConstraints.BOTH;
- constraints.anchor = GridBagConstraints.WEST;
- constraints.weightx = 1;
- constraints.weighty = 1;
- constraints.gridwidth = 5;
- text.setFont(new Font("Serif",Font.BOLD,30));
- text.setEditable(false);
- this.add(text, constraints);
- Set_Input_Buttons(constraints);
- Set_Op_Buttons(constraints);
- }
- private void configure()
- {
- // Изменеие заголовка
- this.setTitle("Calculator");
- // Указание размера формы
- this.setSize(500, 500);
- //this.setSize(600, 175);
- // Операция при нажатии на "крестик"
- this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- // Позиция при открытии
- this.setLocationRelativeTo(null);
- // Видимость формы
- this.setVisible(true);
- // Изменяем Layout формы
- this.setLayout(new GridBagLayout());
- }
- private void Set_Input_Buttons(GridBagConstraints con)
- {
- int ID = 0;
- con.gridwidth = 1;
- for (int y = 0; y < 3; y++)
- {
- for (int x = 0; x < 3; x++)
- {
- con.gridx = x; // столбец
- con.gridy = y; // строка
- mas_add[ID]= new JButton();
- mas_add[ID].setText(mas_add_text[ID]);
- mas_add[ID].setMargin(new Insets(0, 0, 0, 0));
- this.add(mas_add[ID], con);
- ID++;
- }
- }
- // ноль
- con.gridwidth = 2;
- con.gridx = 0; // столбец
- con.gridy = 3; // строка
- mas_add[ID]= new JButton();
- mas_add[ID].setText(mas_add_text[ID]);
- mas_add[ID].setMargin(new Insets(0, 0, 0, 0));
- this.add(mas_add[ID], con);
- ID++;
- // точка
- con.gridwidth = 1;
- con.gridx = 2; // столбец
- con.gridy = 3; // строка
- mas_add[ID]= new JButton();
- mas_add[ID].setText(mas_add_text[ID]);
- mas_add[ID].setMargin(new Insets(0, 0, 0, 0));
- this.add(mas_add[ID], con);
- }
- private void Set_Op_Buttons(GridBagConstraints con)
- {
- int ID = 0;
- con.gridwidth = 1;
- for (int y=0; y<4; y++)
- {
- for (int x=3; x<5; x++)
- {
- con.gridx = x; // столбец
- con.gridy = y; // строка
- mas_op[ID]= new JButton();
- mas_op[ID].setText(mas_op_text[ID]);
- mas_op[ID].setMargin(new Insets(0, 0, 0, 0));
- this.add(mas_op[ID], con);
- ID++;
- }
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д