Неполадки с компонентами на 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++; } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д