Неполадки с компонентами на JFrame - Java

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток!

Только начал разбираться с библиотекой Swing. Решил сделать пробный проект - калькулятор. Есть несколько вопросов. Буду очень признателен всем не равнодушным, кто сможет помочь и подсказать

Заранее спасибо за любые подсказки

1) Как сделать так, чтобы компоненты при добавлении

JFrame.add(Companent c)

добавлялись не в одну строку по середине, а, допустим, делали переход на новую строку (т.е. начинали добавляться ниже)? Или можно только строго указывать координаты? (использую

GridBagLayout

) 2) Позиционирование компонента определяется методом

component.setBounds(x,y,width,height)

, однако при смене размера окна во время выполнения все компоненты снова строятся в одну строку по середине. Можно ли как-то это пофиксить? 3) Я создаю массив кнопок и задаю им значения

button.setText(String somestring)

в цикле. При дебаге все значения корректно вводятся, однако на экране имею следующую штуку: Но если сменить размер окна во время выполнения - кнопки приобретают нужные значения.

Решение задачи: «Неполадки с компонентами на JFrame»

textual
Листинг программы
  1. import java.awt.Font;
  2. import java.awt.GridBagConstraints;
  3. import java.awt.GridBagLayout;
  4. import java.awt.Insets;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7.  
  8. import javax.swing.*;
  9.  
  10. public class ButCalc extends JFrame
  11. {
  12.     private static final long serialVersionUID = 2L;
  13.    
  14.     String[] mas_add_text = {"7", "8", "9", "4", "5", "6", "1", "2", "3", "0", "."};
  15.     String[] mas_op_text = {"/", "<-", "*", "C", "-", "±", "+", "="};
  16.    
  17.     JButton[] mas_add = new JButton[11];
  18.     JButton[] mas_op = new JButton[8];
  19.    
  20.     JTextField text = new JTextField(10);
  21.    
  22.     ButCalc()
  23.     {
  24.         configure();
  25.        
  26.         GridBagConstraints constraints = new GridBagConstraints();
  27.         constraints.fill = GridBagConstraints.BOTH;
  28.         constraints.anchor = GridBagConstraints.WEST;
  29.         constraints.weightx = 1;
  30.         constraints.weighty = 1;
  31.        
  32.         constraints.gridwidth = 5;
  33.         text.setFont(new Font("Serif",Font.BOLD,30));
  34.         text.setEditable(false);
  35.         this.add(text, constraints);
  36.        
  37.         Set_Input_Buttons(constraints);
  38.         Set_Op_Buttons(constraints);
  39.     }
  40.    
  41.     private void configure()
  42.     {
  43.         // Изменеие заголовка
  44.         this.setTitle("Calculator");
  45.         // Указание размера формы
  46.         this.setSize(500, 500);
  47.         //this.setSize(600, 175);
  48.         // Операция при нажатии на "крестик"
  49.         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  50.         // Позиция при открытии
  51.         this.setLocationRelativeTo(null);
  52.         // Видимость формы
  53.         this.setVisible(true);
  54.         // Изменяем Layout формы
  55.         this.setLayout(new GridBagLayout());
  56.     }
  57.    
  58.     private void Set_Input_Buttons(GridBagConstraints con)
  59.     {
  60.         int ID = 0;
  61.         con.gridwidth = 1;
  62.        
  63.         for (int y = 0; y < 3; y++)
  64.         {
  65.             for (int x = 0; x < 3; x++)
  66.             {
  67.                 con.gridx = x; // столбец
  68.                 con.gridy = y; // строка
  69.                 mas_add[ID]= new JButton();
  70.                 mas_add[ID].setText(mas_add_text[ID]);
  71.                 mas_add[ID].setMargin(new Insets(0, 0, 0, 0));             
  72.                
  73.                 this.add(mas_add[ID], con);
  74.                 ID++;
  75.             }
  76.         }
  77.        
  78.         // ноль
  79.         con.gridwidth = 2;
  80.         con.gridx = 0; // столбец
  81.         con.gridy = 3; // строка
  82.         mas_add[ID]= new JButton();
  83.         mas_add[ID].setText(mas_add_text[ID]);
  84.         mas_add[ID].setMargin(new Insets(0, 0, 0, 0));
  85.        
  86.         this.add(mas_add[ID], con);
  87.         ID++;
  88.         // точка
  89.         con.gridwidth = 1;
  90.         con.gridx = 2; // столбец
  91.         con.gridy = 3; // строка
  92.         mas_add[ID]= new JButton();
  93.         mas_add[ID].setText(mas_add_text[ID]);
  94.         mas_add[ID].setMargin(new Insets(0, 0, 0, 0));
  95.        
  96.         this.add(mas_add[ID], con);
  97.     }
  98.    
  99.     private void Set_Op_Buttons(GridBagConstraints con)
  100.     {
  101.         int ID = 0;
  102.         con.gridwidth = 1;
  103.        
  104.         for (int y=0; y<4; y++)
  105.         {
  106.             for (int x=3; x<5; x++)
  107.             {
  108.                 con.gridx = x; // столбец
  109.                 con.gridy = y; // строка
  110.                 mas_op[ID]= new JButton();
  111.                 mas_op[ID].setText(mas_op_text[ID]);
  112.                 mas_op[ID].setMargin(new Insets(0, 0, 0, 0));
  113.                
  114.                 this.add(mas_op[ID], con);
  115.                 ID++;
  116.             }
  117.         }
  118.     }
  119. }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут