Problem z metodami dla JButton

0

Witam.
Mam następujący problem. Tworzę okno z buttonem ok który po naciśnięciu ma je zamykać. Próbowałem już tworzenia instancji i innych rozwiązań z google, ale chyba robię coś źle gdyż nie udaj mi się osiągnąć tego co chcę. Podaje surowy kod bez prób zmian podejmowanych przeze mnie bo i tak były one nieskuteczne. W tym stanie otrzymuje komunikat "non static method cannot be referenced from a static context " w przypadku setVisible(false) i dispose(). Proszę o pomoc. Oto kod:

class OknoPOM1 extends JDialog {

public OknoPOM1(){
    setTitle("O Programie");
    setSize(300,300);
    setResizable(false);
    PanelPOM1 ppom1 = new PanelPOM1();
    Container powierzchnia = getContentPane();
    powierzchnia.add(ppom1);
    
    }}

class PanelPOM1 extends JPanel {

    JTextArea info;

public PanelPOM1() {
        setLayout(new FlowLayout(FlowLayout.CENTER));

        info = new JTextArea(15,25);
        info.setEditable(false);
        add(info);

        JButton ok = new JButton("OK");
        add(ok);

   ok.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent event) {
               
               OknoPOM1.setVisible(false);
               OknoPOM1.dispose();
               
            } 

    });}} 

Niby wszystko jest tak jak w wielu przeglądanych przypadkach na google i niby powinno działać, ale tak nie jest :| Co robić?

1

komunikat błędu mówi, że te metody nie są metodami statycznymi, a próbujesz je wywołać tak jakby były (czyli próbujesz je wywołać na klasie OknoPOM1, a nie na jakimś obiekcie tej klasy)

w konstruktorze PanelPOM1 przekaż referencję do tworzącego je obiektu klasy OknoPOM1, zapisz ją w jakimś atrybucie i wywołuj te metody z tego atrybutu
albo
zrób z OknoPOM1 singleton (Singleton)

0

Zrobiłem coś takiego:


class PanelPOM1 extends JPanel {

    JTextArea info;
      


public PanelPOM1() {
    final OknoPOM1 d = null;    
    setLayout(new FlowLayout(FlowLayout.CENTER));

        info = new JTextArea(15,25);
        info.setEditable(false);
        add(info);

        JButton ok = new JButton("OK");
        add(ok);
        
        
   ok.addActionListener(new ActionListener() {

            public final void actionPerformed(ActionEvent event) {
               
               d.setVisible(false);
               d.dispose();
               
            }

    });}}
 

Błędu który był poprzednio już nie pokazuje, jednak po naciśnięciu buttona nie następuje pożądane działanie. Co zrobiłem źle?

0

Chcę aby naciśnięcie buttona zamykało OknoPOM1 - czyli Dialog

moje_okno_jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

Jest utworzone

OknoPOM1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
 

Chodzi mi o to żeby po naciśnięciu Buttona OK nastąpiło zamknięci Dialoga OknoPOM1

0
class PanelPOM1 extends JPanel {

    JTextArea info;
      


public PanelPOM1() {
        
    setLayout(new FlowLayout(FlowLayout.CENTER));

        info = new JTextArea(15,25);
        info.setEditable(false);
        add(info);

        JButton ok = new JButton("OK");
        add(ok);
        
        
   ok.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent event) {
              OknoPOM1.this.setVisible(false);
                     
            }

    });}}
 

Pokazuje błąd: not an enclosing class OknoPOM1

0

Dalej bez zmian

0
class PanelPOM1 extends JPanel {
 
    JTextArea info;
 
 
 
public PanelPOM1() {
    final OknoPOM1 d = null;    
    setLayout(new FlowLayout(FlowLayout.CENTER));
 
        info = new JTextArea(15,25);
        info.setEditable(false);
        add(info);
 
        JButton ok = new JButton("OK");
        add(ok);
 
 
   ok.addActionListener(new ActionListener() {
 
            public final void actionPerformed(ActionEvent event) {
 
               d.setVisible(false);
               d.dispose();
 
            }
 
    });}}

Ten kod działa? Przecież próbujesz zamykasz nieskonstruowane okno.

class PanelPOM1 extends JPanel {
 
    JTextArea info;
 
 
 
public PanelPOM1() {
    final PanelPOM1 d = this;    
    setLayout(new FlowLayout(FlowLayout.CENTER));
 
        info = new JTextArea(15,25);
        info.setEditable(false);
        add(info);
 
        JButton ok = new JButton("OK");
        add(ok);
 
 
   ok.addActionListener(new ActionListener() {
 
            public final void actionPerformed(ActionEvent event) {
 
               d.setVisible(false);
            }
 
    });}}
0

Ten kod powoduje zniknięcie zawartości okna - znika button i textfield, okno zostaje. Cały czas próbuje z różnymi sposobami ale dalej nic nie przynosi efektu

0

Jest wywoływany z menu w oknie glownym. Kod :

 POM1.addActionListener ( new ActionListener() {
            
        public void actionPerformed( ActionEvent pom1 ) 
        {
        OknoPOM1 oknopom1 = new OknoPOM1();
        oknopom1.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        oknopom1.setVisible(true);
        }});
 
2
class OknoPOM1 extends JDialog 
{
 
    public OknoPOM1()
    {
        setTitle("O Programie");
        setSize(300,300);
        setResizable(false);
        PanelPOM1 ppom1 = new PanelPOM1(this);
        Container powierzchnia = getContentPane();
        powierzchnia.add(ppom1);
 
    }
}
 
class PanelPOM1 extends JPanel 
{
    JTextArea info;
 
    public PanelPOM1(final OknoPOM1 okno) 
    {
        setLayout(new FlowLayout(FlowLayout.CENTER));
 
        info = new JTextArea(15,25);
        info.setEditable(false);
        add(info);
 
        JButton ok = new JButton("OK");
        add(ok);
 
        ok.addActionListener(new ActionListener() 
        {
 
            public void actionPerformed(ActionEvent event) 
            {
                okno.setVisible(false);
            } 
 
        });
    }
} 
0

Działa :) Dziękuję za pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1