Неполадки с компонентами на 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++;
}
}
}
}