Probleme mit Events

Nevhirion

Grünschnabel
Moin,
ich habe ein problem wenn ich auf den Button "ok" drück. Eigentlich sollte ein was neues im Fenster erscheinen. Nur leider bekomm ich stattdessen eine lange Fehlermeldung. Evtl. könnte mir ja irgendwer hier helfen :o,

MFG
Nevhirion

Code:
import info.clearthought.layout.TableLayout;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

class namen_ein extends Container
{
	JButton bla = new JButton("test");
	double sizes[][] = {{80,80,80},{50,50,50}};
	public namen_ein()
	{
		setLayout(new TableLayout(sizes));
		add(bla,"1,1");
		//setVisible(true);
	}
}

class mainpane extends Container
{
	double b = 10;
	double f = TableLayout.FILL;
	double p = TableLayout.PREFERRED;
	double hg = 10;
	double vg = 10;
	double sizes[][] = {{b,f,hg,p,b},{b,p,vg,p,vg,p,b}};

	JLabel l_phase = new JLabel("Phase 10");
	JLabel l_ein = new JLabel("Eingabe");
	JTextField tf_ein = new JTextField(4);

	JButton ok = new JButton("OK");
	JButton cancel = new JButton("Cancel");
	JPanel buttonpanel = new JPanel();

	public mainpane()
	{
		setLayout(new TableLayout(sizes));
		buttonpanel.add(ok);
		buttonpanel.add(cancel);
		add(l_phase,"1,1");
		add(l_ein,"1,3");
		add(tf_ein,"3,3");
		cancel.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);
			}
		});
		ok.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				setVisible(false);
				((JFrame)getParent()).setContentPane(new namen_ein());
			}
		});
		add(buttonpanel,"1,5,3,5");
	}
}



public class phase extends JFrame
{
	public static void main(String[] args)
	{
		phase wnd = new phase();
		
		wnd.setContentPane(new mainpane());
		wnd.pack();
		wnd.setVisible(true);
		wnd.setResizable(false);
	}
}
 
Hallo,

es würde helfen die Fehlermeldung(Exception) zu sehen. Wenn du den StackTrace dazu mal schicken könntest?...

Aber fürs erste:
Java:
((JFrame)getParent()).setContentPane(new namen_ein());

Hast du dir schonmal angeschaut was du da in ein JFrame castest? Wenn es nicht Instanz von einem JFrame ist, wird das auch nix.
Vielleicht machst du mal diesen hier, um einmal nach zu schauen:
Java:
System.out.println(getParent().class);
 
Zuletzt bearbeitet:
Asu, ja klar. Tut mir leid

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JLayeredPane cannot be cast to javax.swing.JFrame
at mainpane$2.actionPerformed(phase.java:58)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
 
Genau was ich geschrieben hab.*Letzter Beitrag*.
Probier das mal:
Java:
import info.clearthought.layout.TableLayout;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;


public class phase extends JFrame implements ActionListener
{
    public phase(){
        setContentPane(mainpane());
        pack();
        setResizable(false);
        setVisible(true);
    }
    public static void main(String[] args)
    {
        phase wnd = new phase();
    }


private Container namen_ein() 
{
    Container c = new Container();
    JButton bla = new JButton("test");
    double sizes[][] = {{80,80,80},{50,50,50}};
    c.setLayout(new TableLayout(sizes));
    c.add(bla,"1,1");
return c;
}

private Container mainpane()
{
    Container c = new Container();    
    double b = 10;
    double f = TableLayout.FILL;
    double p = TableLayout.PREFERRED;
    double hg = 10;
    double vg = 10;
    double sizes[][] = {{b,f,hg,p,b},{b,p,vg,p,vg,p,b}};

    JLabel l_phase = new JLabel("Phase 10");
    JLabel l_ein = new JLabel("Eingabe");
    JTextField tf_ein = new JTextField(4);

    JButton ok = new JButton("OK");
    JButton cancel = new JButton("Cancel");
    JPanel buttonpanel = new JPanel();

    c.setLayout(new TableLayout(sizes));
    buttonpanel.add(ok);
    buttonpanel.add(cancel);
    c.add(l_phase,"1,1");
    c.add(l_ein,"1,3");
    c.add(tf_ein,"3,3");
    cancel.addActionListener(this);
    ok.setActionCommand("o");.
    ok.addActionListener(this);
    c.setActionCommand("c");
    c.add(buttonpanel,"1,5,3,5");
return c;
}
public void actionPerformed(ActionEvent e){
    if(e.getActionCommand().equals("c") ){
        System.exit(0);
    }else if(e.getActionCommand().equals("o") ){
        this.setContentPane(namen_ein());
    }
}
}

Ich hab es aber ohne IDE geschrieben. Ist also nicht getestet. Kann sein, dass du da noch was verbessern musst. Aber so kommst du am ehesten an das Frame ran.
 
Zuletzt bearbeitet:
Zurück