zmienne skladowe

0

witam

dopiero zaczynam zabawe z java wiec prosze o wyrozumialosc :).

Mam ramke i tam menu. wybieram Plik-> Dialog i pojawia sie okno dialogowe. to czego nie rozumiem to sposob zapisu zmiennej obiektu klasy ktora rozszerza klase JDialog. ponizej najpier wkleje kod

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class menu2
{
    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                Okno ramka=new Okno();
                ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                ramka.setVisible(true);
            }
        });
    }
}

class Okno extends JFrame
{
    public Okno()
    {

    setTitle("asd");
    setSize(SZEROKOSC, WYSOKOSC);

    JMenuBar menuBar=new JMenuBar();
    JMenu plikMenu=new JMenu("Plik");

    JMenuItem dialogItem=new JMenuItem("Dialog");

    dialogItem.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent event)
        {
            if (dialog==null)
            dialog=new NowyDialog(Okno.this);
            dialog.setVisible(true);
        }
    });

    JMenuItem exitItem=new JMenuItem("Exit");
    exitItem.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent event)
        {
            System.exit(0);
        }
    });

    plikMenu.add(dialogItem);
    plikMenu.add(exitItem);
    menuBar.add(plikMenu);

    setJMenuBar(menuBar);

    }

private static final int SZEROKOSC=300;
private static final int WYSOKOSC=200;
private NowyDialog dialog;
}

class NowyDialog extends JDialog
{
    public NowyDialog(JFrame owner)
    {
        super(owner, "Okno dialogowe", true);
        add(new JLabel("przykladowy tekst"), BorderLayout.CENTER);
        JButton ok=new JButton("ok");
        ok.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
            setVisible(false);
            }   
        });

        JPanel panel=new JPanel();
        panel.add(ok);
        add(panel, BorderLayout.SOUTH);
        setSize(200,100);
    }
}

chodzi mi o sposob zapisu w anonimowej klasie wewnetrznej dla dialogItem

musi byc tak:

dialog=new NowyDialog(Okno.this);

i potem zmienna skladowa
private NowyDialog dialog;

a nie moge tak:
NowyDialog dialog=new NowyDialog(Okno.this); bo pojawia sie blad not a statement

0

Wklej dokladnie tresc bledu, poniewaz

NowyDialog dialog=new NowyDialog(Okno.this);

jest jak najbardziej poprawne (oczywiscie jesli ta deklaracja jest wewnatrz klasy Okno)

0

1) not a statement NowyDialog dialog=new NowyDialog(Okno.this);

2) ';' expected NowyDialog dialog=new NowyDialog(Okno.this);

btw dzieki za szybka odp

0

Wklej moze caly kod, ktory powoduje blad, poniewaz u mnie dziala to bez problemu. Wyglada jakbys niekoniecznie tutaj robil blad.

0
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class menu2
{
    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                Okno ramka=new Okno();
                ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                ramka.setVisible(true);
            }
        });
    }
}

class Okno extends JFrame
{
    public Okno()
    {

    setTitle("asd");
    setSize(SZEROKOSC, WYSOKOSC);

    JMenuBar menuBar=new JMenuBar();
    JMenu plikMenu=new JMenu("Plik");

    JMenuItem dialogItem=new JMenuItem("Dialog");

    dialogItem.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent event)
        {
            if (dialog==null)
            NowyDialog dialog=new NowyDialog(Okno.this);
            dialog.setVisible(true);
        }
    });

    JMenuItem exitItem=new JMenuItem("Exit");
    exitItem.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent event)
        {
            System.exit(0);
        }
    });

    plikMenu.add(dialogItem);
    plikMenu.add(exitItem);
    menuBar.add(plikMenu);

    setJMenuBar(menuBar);

    }

private static final int SZEROKOSC=300;
private static final int WYSOKOSC=200;

}

class NowyDialog extends JDialog
{
    public NowyDialog(JFrame owner)
    {
        super(owner, "Okno dialogowe", true);
        add(new JLabel("przykladowy tekst"), BorderLayout.CENTER);
        JButton ok=new JButton("ok");
        ok.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
            setVisible(false);
            }   
        });

        JPanel panel=new JPanel();
        panel.add(ok);
        add(panel, BorderLayout.SOUTH);
        setSize(200,100);
    }
}
0
                        if (dialog==null)
                        NowyDialog dialog=new NowyDialog(Okno.this);
                        dialog.setVisible(true);

Blad jest tutaj.
sprawdzasz czy wartosc zmiennej dialog która nie została zadeklarowana jest rozna od null. Po co w ogole to sprawdzenie. Usun tego ifa.

0

ehhh no tak, idiota ze mnie ze tego nie zauwazylem... dzieki wielkie !!

a ten if jest po to ze jak np. uruchomie okno za pierwszym razem i potem je przesune i nacisne ok jest ukrywane i jak znowu je uruchomie pojawia sie w poprzednim miejscu a nie w domyslnym

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