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