Panel wird nicht richtig neu gezeichnet

Status
Nicht offen für weitere Antworten.

Lionhead

Mitglied
Hallo habe eine Klasse MainFrame und 2 Klassen die von JPanel erben. Auf jedem Panel ist ein Button mit dem ich das aktuelle Panel entfernen kann und das andere hinzufügen kann. Funktioniert auch ohne Probleme, nur wenn das Panel gewechselt habe, wird nichts angezeigt. Erst wenn ich mit der Maus über die Komponenten fahre werden sie angezeigt und hier nur Buttons oder ComboBoxes Das JLabel wird garnicht angezeigt.

So sieht meine Methode aus mit der ich die Panels wechsle

Code:
    public static void changePanelOnGUI() {
    	
    	MainPanel mp = new MainPanel();
    	SetupPanel sp = new SetupPanel();
    	
    	if(windowswitcher == false)
    	{
    		
    		frame.getContentPane().remove(sp);
    		frame.getContentPane().add(mp);
    		
    		frame.setSize(400, 200);
    		frame.setVisible(true);  
            frame.validate();
            frame.repaint();                        
    	}
    	
    	else if (windowswitcher == true)
    	{
    		
    		frame.getContentPane().remove(mp);
    		frame.getContentPane().add(sp);
    		
    		frame.setSize(600, 200);
    		frame.setVisible(true);  
            frame.validate();
            frame.repaint();
    	}
    	

    }
 

Wildcard

Top Contributor
Zeichnest du irgendetwas selbst? Wenn ja, wie?
Hast du ein paint, paintComponent oder update Methode überschrieben?
 

Lionhead

Mitglied
Nein Zeichne nix selbst

MainFrame

Code:
import javax.swing.*;




public class MainFrame{
	
	
	private static final long serialVersionUID = 1L;
	
	private static boolean windowswitcher = false;
	
	private static JFrame frame = new JFrame();
    

    für erstes ma aufrufen
    public void createAndShowFrameGUI() {    	
        
        
    	MainPanel mp = new MainPanel();    	
    	    	
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("BootOutAll");           

 
        
        frame.getContentPane().add(mp);     
        
        
        
        frame.setSize(400, 200);
        frame.pack();
        frame.setLocationRelativeTo(null); //center it
        frame.setResizable(false);
        frame.setVisible(true);   	
    }

   // für änderungen und wechsel
    public static void changePanelOnGUI() {
    	
    	MainPanel mp = new MainPanel();
    	SetupPanel sp = new SetupPanel();
    	
    	if(windowswitcher == false)
    	{
    		
    		frame.getContentPane().remove(sp);
    		frame.getContentPane().add(mp);
    		
    		frame.setSize(400, 200);
    		frame.pack();
    		frame.setLocationRelativeTo(null); //center it
    		frame.setResizable(false);
    		frame.setVisible(true);  
            frame.validate();            
            frame.repaint();                        
    	}
    	
    	else if (windowswitcher == true)
    	{
    		
    		frame.getContentPane().remove(mp);
    		frame.getContentPane().add(sp);
    		
    		frame.setSize(600, 200);
    		frame.pack();
    		frame.setLocationRelativeTo(null); //center it
    		frame.setResizable(false);
    		frame.setVisible(true);  
            frame.validate();
            frame.repaint();
    	}
    	

    }
    
  
	public boolean isWindowswitcher() {
		return windowswitcher;
	}

	public static void setWindowswitcher(boolean windowswitch) {
		windowswitcher = windowswitch;
	}
    
}


1. Panel ist genauso aufgebaut nur andere Komponenten: Class Setup Frame

Code:
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;


public class SetupPanel extends JPanel implements ItemListener {
	

	private static final long serialVersionUID = 5352427104900708556L;	

	// element
    private static JLabel setupheadline = new JLabel("BootOutAll by Xenexes");    
    private static JButton closesave = new JButton("Save");
    private static JButton test = new JButton("test");
	
//	*************************************************************************************************************
//	******************** constructor ****************************************************************************
//	*************************************************************************************************************

	public SetupPanel() {
		
		// element-configuration
    	//setupheadline.setOpaque(true);        	
    	setupheadline.setPreferredSize(new Dimension(600,80));
    	setupheadline.setBackground(new Color( 0x9b7e5f ));
    	setupheadline.setFont( new Font( "Georgia", Font.BOLD + Font.ITALIC, 33 ) );
    	setupheadline.setForeground(new Color( 0x686058));
		
    	//Listener
    	test.addActionListener(new ActionListener() 
        {        	      	
      	  public void actionPerformed(ActionEvent evt) 
      	  {
      		testActionPerformed(evt);
            }
      });      
    	
    	
    	
		closesave.addActionListener(new ActionListener() 
        {        	      	
        	  public void actionPerformed(ActionEvent evt) 
        	  {
        		  closesaveActionPerformed(evt);
              }
        });      
 		
        
        setLayout(new GridLayout(0,1));
        // add component container
        
        //add(grafikpanel, BorderLayout.NORTH);
        add(test);
        // zum testen ausgeblendet
        //add(createMainPanel());
        
	}
	
//	*************************************************************************************************************
//	******************** component container ********************************************************************
//	*************************************************************************************************************

	public static JComponent createMainPanel() {	
		
		// create container
		Box box1 = Box.createHorizontalBox();
		Box box2 = Box.createHorizontalBox();		
		Box box3 = Box.createVerticalBox();
		
		Component spacer2 = Box.createHorizontalGlue();
		Component spacer = Box.createHorizontalStrut(0);
		
		
		// Add everything to a container.		
        box1.add(closesave);
        box1.add(spacer);
        box1.add(spacer2);
        //box1.add(closesave); 
		box2.add(setupheadline);
		box3.add(box2);
		box3.add(box1);
        
		box1.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
        box2.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
        box3.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
        
		return box3;
	    }


//	*************************************************************************************************************
//	******************** events *********************************************************************************
//	*************************************************************************************************************


	  
	private void closesaveActionPerformed(final ActionEvent evt) 
	{
		MainFrame.setWindowswitcher(false);
		MainFrame.changePanelOnGUI();
	}
	
	private void testActionPerformed(final ActionEvent evt) 
	{
		MainFrame.setWindowswitcher(false);
		MainFrame.changePanelOnGUI();
	}

public void itemStateChanged(ItemEvent arg0) {
	// TODO Auto-generated method stub
	
}
}
 

André Uhres

Top Contributor
Code:
package gui;
/*
 * MainFrame.java
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MainFrame extends JFrame{
    private static final long serialVersionUID = 1L;
    private boolean windowswitcher = false;
    private MainPanel mp;
    private SetupPanel sp;
    public MainFrame(){
        createAndShowFrameGUI();
        windowswitcher = true;
        changePanelOnGUI();
    }
//    für erstes ma aufrufen
    public void createAndShowFrameGUI() {
        mp = new MainPanel(this);
        sp = new SetupPanel(this);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("BootOutAll");
        getContentPane().add(mp);
        setSize(400, 200);
        setLocationRelativeTo(null); //center it
        setVisible(true);
    }
    // für änderungen und wechsel
    public void changePanelOnGUI() {
        if(!windowswitcher) {
            getContentPane().remove(sp);
            getContentPane().add(mp);
            validate();
            repaint();
        }else{
            getContentPane().remove(mp);
            getContentPane().add(sp);
            validate();
            repaint();
        }
    }
    public boolean isWindowswitcher() {
        return windowswitcher;
    }
    public void setWindowswitcher(boolean windowswitch) {
        windowswitcher = windowswitch;
    }
    public static void main(final String[] args){new MainFrame();}
}
class SetupPanel extends JPanel implements ItemListener {
    private static final long serialVersionUID = 5352427104900708556L;
    // element
    private JLabel setupheadline = new JLabel("BootOutAll by Xenexes");
    private JButton closesave = new JButton("Save");
    private JButton test = new JButton("Test (MainPanel)");
    private MainFrame parent;
//   *************************************************************************************************************
//   ******************** constructor ****************************************************************************
//   *************************************************************************************************************
    public SetupPanel(MainFrame parent) {
        this.parent = parent;
        // element-configuration
        //setupheadline.setOpaque(true);
        setupheadline.setPreferredSize(new Dimension(600,80));
        setupheadline.setBackground(new Color( 0x9b7e5f ));
        setupheadline.setFont( new Font( "Georgia", Font.BOLD + Font.ITALIC, 33 ) );
        setupheadline.setForeground(new Color( 0x686058));
        //Listener
        test.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                testActionPerformed(evt);
            }
        });
        closesave.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                closesaveActionPerformed(evt);
            }
        });
        setLayout(new GridLayout(0,1));
        // add component container
        //add(grafikpanel, BorderLayout.NORTH);
        add(test);
        // zum testen ausgeblendet
        add(createMainPanel());
    }
//   *************************************************************************************************************
//   ******************** component container ********************************************************************
//   *************************************************************************************************************
    public JComponent createMainPanel() {
        // create container
        Box box1 = Box.createHorizontalBox();
        Box box2 = Box.createHorizontalBox();
        Box box3 = Box.createVerticalBox();
        Component spacer2 = Box.createHorizontalGlue();
        Component spacer = Box.createHorizontalStrut(0);
        // Add everything to a container.
        box1.add(closesave);
        box1.add(spacer);
        box1.add(spacer2);
        //box1.add(closesave);
        box2.add(setupheadline);
        box3.add(box2);
        box3.add(box1);
        box1.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
        box2.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
        box3.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
        return box3;
    }
//   *************************************************************************************************************
//   ******************** events *********************************************************************************
//   *************************************************************************************************************
    private void closesaveActionPerformed(final ActionEvent evt) {
        parent.setWindowswitcher(false);
        parent.changePanelOnGUI();
    }
    private void testActionPerformed(final ActionEvent evt) {
        parent.setWindowswitcher(false);
        parent.changePanelOnGUI();
    }
    public void itemStateChanged(ItemEvent arg0) {
        // TODO Auto-generated method stub
    }
}
class MainPanel extends JPanel{
    private JButton bt;
    private MainFrame parent;
    public MainPanel(MainFrame parent){
        this.parent = parent;
        bt = new JButton("Test (SetupPanel)");
        add(bt, BorderLayout.NORTH);
        bt.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                doBtAction();
            }
        });
    }
    private void doBtAction(){
        parent.setWindowswitcher(true);
        parent.changePanelOnGUI();
    }
}
 

Lionhead

Mitglied
Danke für die Hilfe. Hab es jetzt ma so geändert und getestet. Jetzt ist es schon gleich zu beginn so das man erst über die Komponenten fahren muss damit diese sichtbar werden. Bei meinem code ist der Fehler erst nach dem ersten Panelwechsel aufgetreten.

Ich verstehe es nicht die Komponenten sind da, werden aber nicht gezeigt erst wenn man mit der maus drauf fährt. Nach einem repaint müsste doch alles wieder neu angelegt werden oder?



//Edit

Es hat sich erledigt funktioniert nun. mit removeAll() entferne ich erstma alles und füge es dann wieder hinzu das gezielte entfernen eines panels hat irgendwie nicht funktioniert.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
M AWT Panel wird nicht angezeigt AWT, Swing, JavaFX & SWT 7
D Panel wird nicht angezeigt und Fragen zum CardLayout AWT, Swing, JavaFX & SWT 6
bluerob Panel im BorderLayout South wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
H Scroll Panel wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 6
padrino Panel wird nicht gezeichnet AWT, Swing, JavaFX & SWT 5
M CardLayout: Panel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
T JTabbedPane wird im Panel nicht angezeigt ? AWT, Swing, JavaFX & SWT 2
S Nur graues Panel wird angezeigt AWT, Swing, JavaFX & SWT 3
A Card Panel wird nur einmal eingeblendet AWT, Swing, JavaFX & SWT 3
K Linie wird falsch auf Panel gezeichnet AWT, Swing, JavaFX & SWT 11
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
CptK Ordentlicher Code & Panel ab bestimmter Komponentenzahl scrollbar machen AWT, Swing, JavaFX & SWT 12
B JTextField in Panel positionieren AWT, Swing, JavaFX & SWT 1
R Swing Panel nur bei Maus sichtbar AWT, Swing, JavaFX & SWT 2
B mit Maus verschiebbares Panel AWT, Swing, JavaFX & SWT 2
S Labels in Panel erstellen AWT, Swing, JavaFX & SWT 1
H Aus Array Container Panel an Tabbedpane zuweisen AWT, Swing, JavaFX & SWT 29
O Kann kei neues Panel zum zeichnen aufrufen... AWT, Swing, JavaFX & SWT 4
J Overlay Panel statt neues Fenster AWT, Swing, JavaFX & SWT 6
CptK Swing DropdownMenu über Panel-Grenzen hinaus anzeigen AWT, Swing, JavaFX & SWT 1
J Aufklappbares Panel in Toolbar AWT, Swing, JavaFX & SWT 6
L ActionListener zu Button in Panel hinzufügen AWT, Swing, JavaFX & SWT 10
S Swing Panel übernimmt komponenten von anderem AWT, Swing, JavaFX & SWT 7
J Panel auf Frame positionieren AWT, Swing, JavaFX & SWT 9
J JFrame Panel hinzufügen AWT, Swing, JavaFX & SWT 10
B AWT Panel größe im BorderLayout einstellen AWT, Swing, JavaFX & SWT 1
K Swing Entfernen von Panel funktioniert nicht AWT, Swing, JavaFX & SWT 5
L JavaFX Animation für Panel wechsel AWT, Swing, JavaFX & SWT 3
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
L JavaFX Klickverhalten bei einem Panel AWT, Swing, JavaFX & SWT 1
A Swing Panel mit ScrollBar AWT, Swing, JavaFX & SWT 7
K Panel verdeckt MenuItem AWT, Swing, JavaFX & SWT 5
H zwei gleich große Panels getrennt durch ein weiteres Panel AWT, Swing, JavaFX & SWT 10
N Swing Label auf Panel legen.. AWT, Swing, JavaFX & SWT 2
J Panel auf Frame löschen und neues Panel Hinzufügen AWT, Swing, JavaFX & SWT 4
T Swing Graphics auf Panel AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
U Java FX Zusätzliches Label per Knopfdruck während der Laufzeit auf Panel einfügen. AWT, Swing, JavaFX & SWT 2
P AWT Panel überschreibt vorheriges... AWT, Swing, JavaFX & SWT 2
Thallius Swing Warum kann man Texte im Panel nicht markieren? AWT, Swing, JavaFX & SWT 1
S NetBeans, Panel in Frame einfügen AWT, Swing, JavaFX & SWT 3
P Fenstergröße ändern, Panel soll gleich bleiben AWT, Swing, JavaFX & SWT 2
M JavaFX Slide Panel AWT, Swing, JavaFX & SWT 2
P Swing Panel nicht sichtbar AWT, Swing, JavaFX & SWT 1
M Swing JtextField Panel in ander Panel aufrufen AWT, Swing, JavaFX & SWT 0
M Panel in geerbter JFrame Klasse adden AWT, Swing, JavaFX & SWT 4
S ScrollPane in Textarea und auf Panel AWT, Swing, JavaFX & SWT 4
D Swing Bei Button Click neues Panel laden AWT, Swing, JavaFX & SWT 3
S Swing JMenu löscht auf panel gezeichnetes AWT, Swing, JavaFX & SWT 3
X Java Panel zeitweise repainten AWT, Swing, JavaFX & SWT 8
X Panel Probleme (Tetris) AWT, Swing, JavaFX & SWT 8
W Swing Nicht-Editierbares Textfeld in Panel in ScrollPane AWT, Swing, JavaFX & SWT 9
B zweidimensionales Buttonarray auf Panel AWT, Swing, JavaFX & SWT 11
F JAVA-EDITOR: Panel in Frame aufnehmen AWT, Swing, JavaFX & SWT 3
F textarea lässt panel verschwinden AWT, Swing, JavaFX & SWT 4
T LayoutManager GridLayout panel.setSize funktioniert nicht AWT, Swing, JavaFX & SWT 1
A Panel lässt sich nicht bewegen AWT, Swing, JavaFX & SWT 2
E Panel mit Leben füllen AWT, Swing, JavaFX & SWT 2
K Swing Maus in Panel einsperren AWT, Swing, JavaFX & SWT 8
D Panel in Panel zentriert nicht richtig AWT, Swing, JavaFX & SWT 3
P Swing Panel-austausch über einen MenuListener AWT, Swing, JavaFX & SWT 2
1 Swing Bestimme ob ein Subelement eines panel den Fokus verloren hat AWT, Swing, JavaFX & SWT 2
P Swing Button über gesamtes Panel AWT, Swing, JavaFX & SWT 2
O LayoutManager Panel in Panel "maximieren" AWT, Swing, JavaFX & SWT 2
C AWT Horizontale Linie in einem Panel AWT, Swing, JavaFX & SWT 12
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
B Export eines Panel mit ScrollBar AWT, Swing, JavaFX & SWT 4
S Größe von Panel verändern welches auf anderem Panel sitzt AWT, Swing, JavaFX & SWT 10
M Swing Panel klassenübergreifend ändern AWT, Swing, JavaFX & SWT 6
M Swing JFrame in einem Panel zeichnen AWT, Swing, JavaFX & SWT 3
A 2D-Grafik Panel inhalt löschen AWT, Swing, JavaFX & SWT 5
S Elemente im Panel in richtige Ausgangsstellung bringen AWT, Swing, JavaFX & SWT 10
X Swing Panel Extra Klasse & Aufruf über Button AWT, Swing, JavaFX & SWT 18
Kenan89 2D-Grafik paintComponent quetsch alles in Panel AWT, Swing, JavaFX & SWT 26
C Bild auf Panel vergrößern und verschieben AWT, Swing, JavaFX & SWT 4
C ImageIcon eines Labels auf einem Panel in neuem Fenster anzeigen AWT, Swing, JavaFX & SWT 2
H LayoutManager Panel verschieben sich AWT, Swing, JavaFX & SWT 5
O Swing JTree um Label (oder Panel) erweitern AWT, Swing, JavaFX & SWT 9
S Vaadin: Panel AWT, Swing, JavaFX & SWT 10
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
C Etwas durchsichtig machen über einem Panel AWT, Swing, JavaFX & SWT 7
K Panel zu Laufzeit ändern AWT, Swing, JavaFX & SWT 6
T eigene Klasse für Panel AWT, Swing, JavaFX & SWT 9
D Panel aus externer Klasse holen AWT, Swing, JavaFX & SWT 2
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
T Listener in anderen Panel deaktivieren AWT, Swing, JavaFX & SWT 3
H Verschiedene JPanels aus eigenen Klassen in JFrame einfügen, nur ein Panel sichtbar AWT, Swing, JavaFX & SWT 4
GUI-Programmer Informations-Panel an Label AWT, Swing, JavaFX & SWT 2
U Elemente im Panel zentrieren mit GridLayout AWT, Swing, JavaFX & SWT 3
J JPanel mit anderem Panel aus anderer Klasse setzen AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Panel-Zeichnung erscheint nicht AWT, Swing, JavaFX & SWT 7
S Panel rapaint AWT, Swing, JavaFX & SWT 18
T AffineTransform wirkt sich nur auf dem ersten Panel aus AWT, Swing, JavaFX & SWT 3
K Swing: Panel in Panel erzeugen AWT, Swing, JavaFX & SWT 11
M Panel in SWT einfügen AWT, Swing, JavaFX & SWT 12
T auf Panel zeichnen AWT, Swing, JavaFX & SWT 4
A FormLayout Panel-Breite AWT, Swing, JavaFX & SWT 7
Dit_ "Expandable" Panel ? AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben