nie działające przyciski po refreshu

0

po wybraniu przekątnej kwadratu w menu pojawiają się wszystkie potrzebne komponenty, lecz ich actionlistnery nie działają

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextField;


import static java.lang.Math.sqrt;


public class kalk extends JFrame implements ActionListener

{
	private JMenuBar menu;
	private JMenu mfigury, mpłaskie;
	
	// figury płaskie
	private JMenu mkwadrat, mprostokat, mromb, mokrag;
	private JTextField tA, tB, tC, tpromien, tprzek1, tprzek2,   tobwod, tprzekatna, twA, twpole, twobwod, twprzekatna;
	
	//elementy kwadratu
	private JLabel jAkw, jpkw, jokw, jpolekw, jpkw2, jokw2;
	private JMenuItem ipKW, ioKW, ipoleKW, iAKW;						
	private JButton boblicz1, boblicz2, boblicz3;
	
	private double A,  Apole, Aprzek, Aobw, pole, przekatna, obwod, przekpole, obwpole;
	
	
	
	public kalk()
	{
		setSize(700,800);
		setTitle("Kalkulator");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(null);
		
		
		
		
		//labele
		
		jAkw= new JLabel("A:");
		jAkw.setBounds(10, 50, 100, 20);
		
		
		jpkw= new JLabel("Przekątna:");
		jpkw.setBounds(10, 80, 100, 20);
		
		
		jpkw2= new JLabel("Przekątna:");
		jpkw2.setBounds(10, 50, 100, 20);
		
		
		jokw= new JLabel("Obwód:");
		jokw.setBounds(10, 110, 100, 20);
		
		
		jokw2= new JLabel("Obwód:");
		jokw2.setBounds(10, 80, 100, 20);
		
		
		jpolekw= new JLabel("Pole:");
		jpolekw.setBounds(10, 110, 100, 20);
		
		
		
		//add(jpkw);
		//add(jpkw2);
		
		//add(jokw2);
		
		
		
		
		// jtexty wejsciowe
		tA = new JTextField("");
		tA.setBounds(120, 50, 100, 20);
		
		
		tprzekatna = new JTextField("");
		tprzekatna.setBounds(120, 80, 100, 20);
		
		
		tobwod = new JTextField("");
		tobwod.setBounds(120, 110, 100, 20);
		
		
		
		
		
		
		//jtexty wyjsciowe
		twA = new JTextField("");
		twA.setBounds(360, 50, 100, 20);
		
		
		twprzekatna = new JTextField("");
		twprzekatna.setBounds(360, 80, 100, 20);
		
		
		twobwod = new JTextField("");
		twobwod.setBounds(360, 110, 100, 20);
		
		
		
		
		//guziki kwadratowe
		boblicz1 = new JButton("Przelicz");
		boblicz1.setBounds(240, 50, 100, 20);
		boblicz1.addActionListener(this);
		
		boblicz2 = new JButton("Pole");
		boblicz2.setBounds(240, 80, 100, 20);
		boblicz2.addActionListener(this);
		
		boblicz3 = new JButton("Pole");
		boblicz3.setBounds(240, 110, 100, 20);
		boblicz3.addActionListener(this);
		
		menu= new JMenuBar();
		
		mfigury=new JMenu("Figury");
		mpłaskie = new JMenu("Płaskie");
		
		
		
		//kwadrat
		mkwadrat=new JMenu("Kwadrat");
		ipKW= new JMenuItem("Przekątna");
		ioKW = new JMenuItem("Obwód");
		ipoleKW= new JMenuItem("Pole");
		iAKW=new JMenuItem("Bok A");
		ipKW.addActionListener(this);
		ioKW.addActionListener(this);
		ipoleKW.addActionListener(this);
		iAKW.addActionListener(this);
		mkwadrat.add(ipKW);
		mkwadrat.add(ioKW);
		mkwadrat.add(ipoleKW);
		mkwadrat.add(iAKW);
		
		mprostokat= new JMenu("Prostokąt");
		mromb=new JMenu("Romb");
		mokrag=new JMenu("Okrąg");
		
		
		mpłaskie.add(mkwadrat);
		mpłaskie.add(mprostokat);
		mpłaskie.add(mromb);
		mpłaskie.add(mokrag);
		
		
		
		
		
		
		
		mfigury.add(mpłaskie);
		menu.add(mfigury);
		
		
		
		
		
		
		
		setJMenuBar(menu);
		
		
		
	}
	
	
	
	
	
	
	
	
	
	public static void main(String[] args)
	{
		
		
		kalk okno = new kalk();
		okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		okno.setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent e) 
	{
	
		Object z = e.getSource();
		//działanie kwadratu
		if (z==ipKW)
		{
			add(jAkw);
			add(jpolekw);
			add(jokw2);
			
			add(tA);
			add(tprzekatna);
			add(tobwod);
			
			add(boblicz1);
			add(boblicz2);
			add(boblicz3);
			
			add(twA);
			add(twprzekatna);
			add(twobwod);
			
			
			revalidate();
			repaint();
			
			if (z==boblicz1|| z==tA)
			{
				
				A = Double.parseDouble(tA.getText());
				Aprzek=A*sqrt(2);
				System.out.println(Aprzek+"kjhkjn");
				twA.setText(String.valueOf(Aprzek));
				
			}
			else if (z==boblicz2)
			{
				
			}
			else if (z==boblicz3)
			{
				System.out.println("siema");
			}
			
			
		}
		else if(z==iAKW)
		{
			
		}
		else if(z==ioKW)
		{
			add(jpolekw);
		}
		else if(z==ipoleKW)
		{
			add(boblicz1);
			add(boblicz2);
			add(boblicz3);
			repaint();
			
			if (z==boblicz1)
			{
				
			}
			else if (z==boblicz2)
			{
				
			}
			else if (z==boblicz3)
			{
				
			}
			
		}
		
	}



}
 
0

A jakiego działania oczekujesz?

if (z==ipKW)
{
   ...
   repaint();
   if (z==boblicz1|| z==tA)

z ma być równocześnie równe ipKW i boblicz1?

0

hmm no tak, nie mogą być jednocześnie równe. Teraz rodzi się pytanie w jaki sposób rozróżnić źródło, jeśli każda akcja jest jako this, czyli odnosi się do jednego miejsca

1

Np. tak

if (z==ipKW)
{
   ...
   repaint();
   return;
}
if (z==boblicz1|| z==tA)
0

Dzięki wielkie za pomoc. rozwiązałeś mój problem :)

0

pozwolę sobie kontynuować jeszcze temat, w jaki sposób można czyścić okno aby za każdym razem elementy pojawiały się na nowo?

0
getContentPane().removeAll();
0

o_O problem z tym action listenerem jest zupełnie gdzie indziej. Po prostu napchałeś do jednego action listenera kupę RÓŻNYCH akcji. Napisz jak czlowiek kilka osobnych klas, po jednej dla każdej akcji. Nie będzie trzeba robić cudów na kiju ze sprawdzaniem co ktoś kliknął. Zadaj sobie jedno proste pytanie: czy gdyby buttonów było 1000 to też napisałbyś to w postaci takiej drabinki ifów?

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