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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5