Ich habe das Programm jetzt etwas abgewandelt. Jetzt wird das letzte immer zuerst geschlosse und anschließend das neue aufgerufen, Die Werte werden gesondert angezeigt.
Jedoch habe ich jetzt ein anderes Problem. Manche Fenster bleiben trotz des Befehls dispose geöffnet und es öffnet sich nach einer Auswahl das neue Fenster darüber. Soweit ich das bisher gesehen habe, stehen die dispose Befehle überall dort bevor etwas neues beginnt. Kann mir hier jemand sagen wo der Fehler ist und was ich ändern muss?
Hie der gesamte Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
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.JPanel;
import javax.swing.JTextField;
public class VerschiedeneListenerAlsMenu extends JFrame
{
private static final long serialVersionUID = 1L;
JMenuBar mb=new JMenuBar();
JMenu menue;
JLabel anz;
JMenuItem neuesFenster,rechner,geschwindigkeit,sprung,groesser,kleiner,ursprung,neuePos,anderePos,
altePos,neuSchrift,alteSchrift,paint,werte;
JPanel lage;
JButton anfang;
ToolbarListener tl=new ToolbarListener();
public VerschiedeneListenerAlsMenu(String titel)
{
}
public VerschiedeneListenerAlsMenu()
{
setSize(600, 600);
setLayout(new BorderLayout());
add(mb=new JMenuBar(),BorderLayout.NORTH);
mb.add(menue=new JMenu("Start"));
menue.add(neuesFenster=new JMenuItem("neues Fenster"));
neuesFenster.addActionListener(tl);
neuesFenster.setActionCommand("neues Fenster");
menue.add(rechner=new JMenuItem("Rechner"));
rechner.setActionCommand("Rechner");
rechner.addActionListener(tl);
menue.add(geschwindigkeit=new JMenuItem("Geschwindigkeitswandler"));
geschwindigkeit.setActionCommand("Geschwindigkeitswandler");
geschwindigkeit.addActionListener(tl);
menue.add(sprung=new JMenuItem("Skisprung"));
sprung.setActionCommand("Skisprung");
sprung.addActionListener(tl);
menue.add(groesser=new JMenuItem("Groesser"));
groesser.setActionCommand("Groesser");
groesser.addActionListener(tl);
menue.add(kleiner=new JMenuItem("Kleiner"));
kleiner.setActionCommand("Kleiner");
kleiner.addActionListener(tl);
menue.add(ursprung=new JMenuItem("Ursprungsgroesse"));
ursprung.setActionCommand("Ursprungsgroesse");
ursprung.addActionListener(tl);
menue.add(neuePos=new JMenuItem("neue Position"));
neuePos.setActionCommand("neue Position");
neuePos.addActionListener(tl);
menue.add(anderePos=new JMenuItem("andere Position"));
anderePos.setActionCommand("andere Position");
anderePos.addActionListener(tl);
menue.add(altePos=new JMenuItem("alte Position"));
altePos.setActionCommand("alte Position");
altePos.addActionListener(tl);
menue.add(neuSchrift=new JMenuItem("neue Schrift"));
neuSchrift.addActionListener(tl);
menue.add(alteSchrift=new JMenuItem("alte Schrift"));
alteSchrift.addActionListener(tl);
menue.add(paint=new JMenuItem("Zeichnen"));
paint.setActionCommand("Zeichnen");
paint.addActionListener(tl);
menue.add(werte=new JMenuItem("Werte"));
werte.setActionCommand("Werte");
werte.addActionListener(tl);
add(anfang=new JButton("zum Anfang"),BorderLayout.SOUTH);
anfang.addActionListener(tl);
anfang.setActionCommand("Anfang");
Dimension d=Toolkit.getDefaultToolkit().getScreenSize().getSize();
int b;
setLocation(500,b=(int)d.getSize().getHeight()-600);
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
//Wird aufgerufen wenn die Starteinstellungen geladen werden sollen
public void letzteEinstellung()
{
Rechner re=new Rechner("");
VerschiedeneListenerAlsMenu vlam2=new VerschiedeneListenerAlsMenu();
vlam2.add(lage=new JPanel(),BorderLayout.CENTER);
lage.add(re);
vlam2.setVisible(true);
}
public void rechner(JButton plus, JButton minus, JButton mal, JButton geteilt, JButton q, JButton w, JButton p, JButton loeschen, JLabel op1, JLabel op2, JLabel erg, JLabel anz2, JTextField eing1, JTextField eing2)
{
dispose();
Rechner re=new Rechner("");
ToolbarListener tl=new ToolbarListener();
RechnerListener rl=new RechnerListener();
re.setSize(750, 200);
re.setLayout(new BorderLayout());
re.setLayout(new GridLayout(3, 4));
re.setLocationRelativeTo(null);
re.remove(anfang);
re.add(mb);
re.add(eing1=new JTextField(10));
re.add(eing2=new JTextField(10));
plus.addActionListener(tl);
minus.addActionListener(tl);
mal.addActionListener(tl);
geteilt.addActionListener(tl);
re.add(geteilt);
q.setToolTipText("Berechnet die Quersumme beider Operanden bis zu der Eingabe von 99");
q.addActionListener(tl);
w.setToolTipText("Berechnet die Wurzel der Addition beider Operanden");
w.addActionListener(tl);
p.setToolTipText("Berechnet die Potenz des ersten Operators mit der Angabe des zweiten Operators");
p.addActionListener(tl);
loeschen.addActionListener(tl);
re.setVisible(true);
re.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
class RechnerListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent ae)
{
double zahl1=Double.parseDouble(rechner.getText()),zahl2=Double.parseDouble(rechner.getText());
if(ae.getActionCommand().equals("+"))
{
double ergebnis=zahl1+zahl2;
anz.setText(""+ergebnis);
}
else if(ae.getActionCommand().equals("-"))
{
double ergebnis=zahl1-zahl2;
anz.setText(""+ergebnis);
}
else if(ae.getActionCommand().equals("*"))
{
double ergebnis=zahl1*zahl2;
anz.setText(""+ergebnis);
}
else if(ae.getActionCommand().equals("/"))
{
double ergebnis=zahl1/zahl2;
anz.setText(""+ergebnis);
}
else if(ae.getActionCommand().equals("Q"))
{
double Quersumme=(((zahl1)/10)+((zahl1)%10))+(((zahl2)/10)+((zahl2)%10));
anz.setText(""+Quersumme);
}
else if(ae.getActionCommand().equals("W"))
{
double W=Math.sqrt(Math.round(zahl1)+Math.round(zahl2));
anz.setText(""+W);
}
else if(ae.getActionCommand().equals("P"))
{
anz.setText(""+Math.pow(zahl1, zahl2));
}
}
}
class ToolbarListener implements ActionListener
{
Dimension d=Toolkit.getDefaultToolkit().getScreenSize().getSize();
@Override
public void actionPerformed(ActionEvent ae)
{
//Wenn im Menü dieser Eintrag ausgewählt wird, soll folgendes passieren
if(ae.getActionCommand().equals("neues Fenster"))
{
JLabel anzeige;
VerschiedeneListenerAlsMenu vlam=new VerschiedeneListenerAlsMenu("neues Fenster");
int a=0,b=0;
vlam.setSize(200, 200);
vlam.setLocation(a=(int)d.getSize().getWidth()/2,b=(int)d.getSize().getHeight()/2);
vlam.add(anzeige=new JLabel("neues Fenster"));
vlam.setVisible(true);
vlam.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
else if(ae.getActionCommand().equals("Rechner"))
{
JButton plus,minus,mal,geteilt,q,w,p,loeschen;JLabel op1,op2,erg,anz;JTextField eing1,eing2;
rechner(plus=null,minus=null,mal=null,geteilt=null,q=null,w=null,p=null,loeschen=null,op1=null,op2=null,erg=null,anz=null,eing1=null,eing2=null);
}
else if(ae.getActionCommand().equals("Geschwindigkeitswandler"))
{
dispose();
Geschwindigkeit_grafisch geschw=new Geschwindigkeit_grafisch("");
geschw.add(mb);
geschw.setLocationRelativeTo(null);
geschw.setVisible(true);
geschw.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
else if(ae.getActionCommand().equals("Skisprung"))
{
dispose();
Skisprung ski=new Skisprung();
ski.add(mb);
ski.setVisible(true);
ski.setLocationRelativeTo(null);
ski.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
else if(ae.getActionCommand().equals("Groesser"))
{
dispose();
int a,b;
setSize(a=(int)d.getSize().getWidth(),b=(int)d.getSize().getHeight());
setLocation(0,0);
setLayout(new BorderLayout());
add(mb,BorderLayout.NORTH);
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
else if(ae.getActionCommand().equals("Kleiner"))
{
dispose();
int a,b;
setSize(a=(int)d.getSize().getWidth()/4,b=(int)d.getSize().getHeight()/4);
setLocation(a=(int)d.getSize().getWidth()/2,b=(int)d.getSize().getHeight()/2);
setLayout(new BorderLayout());
add(mb,BorderLayout.NORTH);
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
else if(ae.getActionCommand().equals("Ursprungsgroesse"))
{
dispose();
setSize(600,600);
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
else if(ae.getActionCommand().equals("neue Position"))
{
dispose();
setLocation(0, 0);
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
else if(ae.getActionCommand().equals("andere Position"))
{
dispose();
int a,b;
setLocation(a=(int)d.getSize().getWidth()-200,b=(int)d.getSize().getHeight()-500);
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
else if(ae.getActionCommand().equals("alte Position"))
{
dispose();
int b;
setLocation(500,b=(int)d.getSize().getHeight()-600);
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
else if(ae.getActionCommand().equals("Anfang"))
{
dispose();
letzteEinstellung();
}
}
}
public static void main(String args[])
{
new VerschiedeneListenerAlsMenu();
}
}
die referenced Libraries habe ich natürlich nicht gepostet…
Für einen Tipp wäre ich euch dankbar.
Lg