JFrame ausblenden wenn switch aktiv ist

dastool

Erfahrenes Mitglied
Guten Morgen,
ich hab mal wieder einen kleinen Hänger.

In meinem Projekt soll ein JFrame ausgeblendet werden, wenn ein anderes Aktiviert wird.


Code:
package ticketsystem;
import java.io.IOException;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.ButtonGroup;
public class Main extends JFrame implements ActionListener{
    
    
    ButtonGroup bg = new ButtonGroup();
    JPanel panelToDo = new JPanel();
    JRadioButton rb1 = new JRadioButton("Ticket schreiben");
    JRadioButton rb2 = new JRadioButton("Status abfrage");
    JRadioButton rb3 = new JRadioButton("Operator zugriff");
    JRadioButton rb4 = new JRadioButton("Administrator zugriff");
    
    
    public Main(){
        bg.add(rb1);
        bg.add(rb2);
        bg.add(rb3);
        bg.add(rb4);
        
        rb1.setName("rb1");
        rb2.setName("rb2");
        rb3.setName("rb3");
        rb4.setName("rb4");
        
        getContentPane().setLayout(new GridLayout(4, 0));
        getContentPane().add(rb1);
        getContentPane().add(rb2);
        getContentPane().add(rb3);
        getContentPane().add(rb4);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(210, 170);
        setVisible(true);
        setResizable(false);
        
        rb1.addActionListener(this);
        rb2.addActionListener(this);
        rb3.addActionListener(this);
        rb4.addActionListener(this);
        
    }
    
    public static void main(String args[])
    throws IOException {
        
    Main frame = new Main();
       
    }
    
    public void actionPerformed(ActionEvent e) {
        switch (((JRadioButton) e.getSource()).getName().charAt(2)) {
            case '1':
                Ticket frame1 = new Ticket();
                frame1.setSize(800,700);
                frame1.setVisible(true);
                frame1.setResizable(false);    
                
                break;
            case '2':
                Statusabfrage frame2 = new Statusabfrage();
                frame2.setSize(500,150);
                frame2.setVisible(true);
                frame2.setResizable(false);
                break;
            case '3':
                Operator frame3 = new Operator();
                frame3.setSize(800,700);
                frame3.setVisible(true);
                //frame3.setResizable(false); //Frame noch nicht erstellt
                break;
            case '4':
                Administrator frame4 = new Administrator();
                frame4.setSize(800,700);
                frame4.setVisible(true);
                //frame4.setResizable(false);//Frame noch nicht erstellt
                break;
                
        }
        
        
    }
    
}

Wie man sieht hab ich diese über Radiobuttons soweit gelöst, das ein anderes fenster aktiviert werden kann.
Nur sollte es auch nur bei dem einen bleiben.
Jetzt ist es so, wenn man das kleine "Main-Fenster" schließt geht auch das andere zu, bzw. wenn man auf einen anderen Radiobutton klickt geht ein weiteres auf.
Gerade diese beide Fälle möchte ich unterbinden.
Ich hab zwar schon diverse Ideen zu einer art "Sleep-modus" gefunden, und auch schon versucht via Fallunterschiede das Fenster zu schließen, aber leider funktioniert überhaupt nichts, bzw ich bekomm Fehlermeldungen.

Den Part Main frame = new Main(); hab ich auch schon versuchsweisse aus der static voidd main herausgenommen, aber dann liess sich das Programm nicht mehr sichtbar starten.

Ich weiss im moment nicht weiter, wie ich das nun Lösen kann.
Hat einer von euch eine Idee wie ich das realisieren könnte ?
 
Zuletzt bearbeitet:
Benutze doch einfach einen JDialog statt einen JFrame und mache den Dialog modal. Damit kannst du solange dieser Dialog offen ist nichts anders in deinem Hauptframe auswählen.

Hier habe ich das für Fall 2 und 3 mal auf nen JDialog geändert:
Java:
public void actionPerformed(ActionEvent e) {
		switch (((JRadioButton) e.getSource( )).getName( ).charAt(2)) {
			case '1':
				JFrame frame1 = new JFrame("Ticket");
				frame1.setSize(800, 700);
				frame1.setVisible(true);
				frame1.setResizable(false);

				break;
			case '2':
				JDialog frame2 = new JDialog(this, "Statusabfrage", true);
				frame2.setSize(500, 150);
				frame2.setVisible(true);
				frame2.setResizable(false);
				break;
			case '3':
				JDialog frame3 = new JDialog(this, "Operator", true);
				frame3.setSize(800, 700);
				frame3.setVisible(true);
				// frame3.setResizable(false); //Frame noch nicht
				// erstellt
				break;
			case '4':
				JFrame frame4 = new JFrame("Administrator");
				frame4.setSize(800, 700);
				frame4.setVisible(true);
				// frame4.setResizable(false);//Frame noch nicht
				// erstellt
				break;

		}
	}
 
Code:
package ticketsystem;
import java.io.IOException;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.ButtonGroup;
public class Main extends JFrame implements ActionListener{
    
    JFrame openedFrame = null;
    ButtonGroup bg = new ButtonGroup();
    JPanel panelToDo = new JPanel();
    JRadioButton rb1 = new JRadioButton("Ticket schreiben");
    JRadioButton rb2 = new JRadioButton("Status abfrage");
    JRadioButton rb3 = new JRadioButton("Operator zugriff");
    JRadioButton rb4 = new JRadioButton("Administrator zugriff");
    
    
    public Main(){
        bg.add(rb1);
        bg.add(rb2);
        bg.add(rb3);
        bg.add(rb4);
        
        rb1.setName("rb1");
        rb2.setName("rb2");
        rb3.setName("rb3");
        rb4.setName("rb4");
        
        getContentPane().setLayout(new GridLayout(4, 0));
        getContentPane().add(rb1);
        getContentPane().add(rb2);
        getContentPane().add(rb3);
        getContentPane().add(rb4);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(210, 170);
        setVisible(true);
        setResizable(false);
        
        rb1.addActionListener(this);
        rb2.addActionListener(this);
        rb3.addActionListener(this);
        rb4.addActionListener(this);
        
    }
    
    public static void main(String args[])
    throws IOException {
        
    Main frame = new Main();
       
    }
    
    public void actionPerformed(ActionEvent e) {
        switch (((JRadioButton) e.getSource()).getName().charAt(2)) {
            case '1':
                Ticket frame1 = new Ticket();
                if( openedFrame != null){
                    openedFrame.setVisible(false);
                    openedFrame.dispose();
                }
                openedFrame = frame1;
                frame1.setSize(800,700);
                frame1.setVisible(true);
                frame1.setResizable(false);    
                
                break;
            case '2':
                Statusabfrage frame2 = new Statusabfrage();
                if( openedFrame != null){
                    openedFrame.setVisible(false);
                    openedFrame.dispose();
                }
                openedFrame = frame2;
                frame2.setSize(500,150);
                frame2.setVisible(true);
                frame2.setResizable(false);
                break;
            case '3':
                Operator frame3 = new Operator();
                if( openedFrame != null){
                    openedFrame.setVisible(false);
                    openedFrame.dispose();
                }
                openedFrame = frame3;
                frame3.setSize(800,700);
                frame3.setVisible(true);
                //frame3.setResizable(false); //Frame noch nicht erstellt
                break;
            case '4':
                Administrator frame4 = new Administrator();
                if( openedFrame != null){
                    openedFrame.setVisible(false);
                    openedFrame.dispose();
                }
                openedFrame = frame4;
                frame4.setSize(800,700);
                frame4.setVisible(true);
                //frame4.setResizable(false);//Frame noch nicht erstellt
                break;
                
        }
        
        
    }
    
}

Ich hoffe, ich habe dein Problem richtig verstanden.
 
Danke Vites, auf die Ide bin ich nicht gekommen :)
Zeja, deine version ist auch ned schlecht, leider müsst ich bei dir die "Fenster" nochmal neu machen, und das war mit Netbeans eh schon ne nervige arbeit ^^
Danke dennoch für die Hilfe :)

//edit
Hab mich wohl etwas zu früh gefreut ^^
Leider Funktioniert das nicht so, wie gedacht.
 
Zuletzt bearbeitet:
Zurück