Среда, 25 Декабря 2024, 22:52

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Добавление в панель кнопки из другой панели
HNKNTOCДата: Четверг, 30 Июля 2015, 21:33 | Сообщение # 1
был не раз
Сейчас нет на сайте
Дело вот в чём. Есть два окна FrameBox - Отображает кнопки. FrameAddBut - Добавляет новую кнопку.

Так первым делом запускается FrameBox.
В FrameBox есть панель panelBut (В эту панель мы какраз таки и добавляем кнопки).
Дальше по нажатию запускается окно FrameAddBut.
Нажимаем на кнопку AddBut ииии тут вопрос как быть дальше как обратится к FrameBox не создавая экземпляр класса??

Статический метод я пробовал.
Проблема в том что метод revalidate(); не статический.

Код

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
   
   
public class FrameBox extends JFrame {
     private int i;
     private JPanel panelBut = new JPanel();
     public void goGUI(){
         JButton button = new JButton("Открыть FrameAddBut");
   
         button.addActionListener(new ClicAdd());
   
         panelBut.add(button);
         panelBut.setLayout(new BoxLayout(panelBut, BoxLayout.Y_AXIS));
   
         add(panelBut);
   
         setSize(600, 400);
         setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
         setResizable(false);
         setLocationRelativeTo(null);
         setVisible(true);
     }
   
     public static void main(String args[]) {
         FrameBox testAddElement = new FrameBox();
         testAddElement.goGUI();
     }
     public void AddBut(){
         panelBut.add(new JButton("Button " + i));
         i++;
         revalidate();
     }
   
     class ClicAdd implements ActionListener{
         @Override
         public void actionPerformed(ActionEvent e) {
             System.out.println("add");
             FrameAddBut panelTest = new FrameAddBut();
             panelTest.GUI();
         }
     }
}


Код

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
   
   
public class FrameAddBut extends JFrame {
     public void GUI(){
   
         JButton button = new JButton("Add But");
         button.addActionListener(new ClicAdd());
         add(button);
   
         pack();
         setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
         setResizable(false);
         setLocationRelativeTo(null);
         setVisible(true);
     }
   
     class ClicAdd implements ActionListener {
         @Override
         public void actionPerformed(ActionEvent e) {
             FrameBox panelBox = new FrameBox();
             panelBox.AddBut();
             dispose();
         }
     }
}
YellowAfterlifeДата: Пятница, 31 Июля 2015, 00:11 | Сообщение # 2
Сейчас нет на сайте
Такую проблему обычно решают сохранением ссылки на "владельца" внутри нужных классов с последующей передачей его в конструктор. То есть:
Код

class Some {
public FrameBox owner;
     public Some(FrameBox owner) {
         this.owner = owner;
         // ...
     }
     public doSomething() {
         // ...
         owner.revalidate();
     }
}


HNKNTOCДата: Пятница, 31 Июля 2015, 16:17 | Сообщение # 3
был не раз
Сейчас нет на сайте
YellowAfterlife, Большое спасибо за помощь!!
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг