Probleme mit JPanel's

Zitrus

Bekanntes Mitglied
Hallo,

Ich habe zwei Panels:
1. StartPanel (zum Starten des Spiels)
2. GamePanel (Worauf man das Spiel spielt)

Erstmal die Codes:

GamePanel:
Java:
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Color;
import java.net.URL;

public class Panel extends JPanel implements Runnable
{    
    URL uLuigiLaeuft;
    URL uLuigiSteht;
    URL uLuigiSpringt;
    URL uLuigiFaellt;
    
    BufferedImage luigiLaueft;
    BufferedImage luigiSteht;
    BufferedImage luigiSpringt;
    BufferedImage luigiFaellt;
    
    long delta;
    long last;
    long fps;
    
    public Panel()
    {
        setLayout(null);
        setSize(800,500);
        
        Thread th = new Thread(this);
        th.start();
        
        doInitializations();
    }
    
    @Override
    public void paintComponent(Graphics g) {        
        g.setColor(Color.RED);
        g.drawString("FPS: " + Long.toString(fps) ,20,20);
    }
    
    @Override 
    public void run() {
        while(StartPanel.frame.isVisible()) {
            calculateFPS();
            
            this.repaint();
            
            try{
                Thread.sleep(10);
            }
            catch(InterruptedException e) {
            }
        }
    }
    
    void calculateFPS() {
        delta = System.nanoTime() - last;
        last = System.nanoTime();
        fps = ((long) 1e9/delta);
    }
    
    void doInitializations() {
        last = System.nanoTime();
    }
    
    void loadImages() {
    }
}

StartPanel:
Java:
import javax.swing.JPanel; 
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.net.URL;

public class StartPanel extends JPanel implements ActionListener
{   static JFrame frame;
    JButton start;
    JLabel luigi;
    
    Panel p;

    URL uLuigiAnimated;

    ImageIcon luigiAnimated;

    public StartPanel(){
        loadImages();

        luigi = new JLabel(luigiAnimated);
        luigi.setBounds(70,50,320,240);

        start = new JButton("Start Game!");
        start.setBounds(150,350,150,50);
        start.addActionListener(this);

        setLayout(null);
        setSize(500,550);

        frame = new JFrame();
        frame.setTitle("New Super Luigi Brothers!");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(100,100);
        frame.setSize(500,550);

        add(luigi);
        add(start);

        frame.add(this);
        frame.setVisible(true);
    }

    void loadImages() {
        uLuigiAnimated = getClass().getResource("LuigiAnimated.gif");
        luigiAnimated = new ImageIcon(uLuigiAnimated);
    }

    @Override
    public void actionPerformed(ActionEvent e) {  
        frame.remove(this);
        
        p = new Panel();
        frame.setSize(p.getWidth(),p.getHeight());
        frame.add(p);
    }
}

Ich möchte beim drücken des Buttons auf dem StartPanel, jenes entfernen und stattdessen das GamePanel auf den frame legen. Jedoch wird das Panel nicht repainted (obwohl in der while-Schleife ja ausdrücklich ein repaint() enthalten ist), was dazu führt dass die FPS-Rate immer wieder überdeckt wird.
Woran liegt das? Ich verstehe nicht ganz wieso das Panel nicht repainted wird. Und wie kann man das Problem lösen?

Mit freundlichen Grüßen,
Zitrus
 

censored

Mitglied
Versuch es mal mit einem revalidate mit dem JFrame nachdem du das Panel wechselst.
Java:
frame.revalidate();
 
Zuletzt bearbeitet:

Zitrus

Bekanntes Mitglied
Funktioniert leider immernoch nicht. Die FPS-Anzeige "überschreibt" sich die ganze Zeit sodass man nichtmal mehr die Möglichkeit hat die Zahl zu entziffern.

Wenn ich aber das frame repainte:

Java:
@Override 
    public void run() {
        while(StartPanel.frame.isVisible()) {
            calculateFPS();
            
            StartPanel.frame.repaint(); // frame repainten
            
            try{
                Thread.sleep(10);
            }
            catch(InterruptedException e) {
            }
        }
    }

dann funktionierts. Ich würde gerne wissen wieso es dann klappt und wieso es mit dem repaint() des Panels nicht funktioniert.

Mfg,
Zitrus
 

censored

Mitglied
Häufig muss nach einem revalidate auch ein repaint gemacht werden, damit dieses Wirkung zeigt.
Ein revalidate aktualisiert die Container-Hierarchie. Das heisst, wenn etwas weg- oder hinzugefügt wird, ist es nötig ein revalidate zu machen.
 

Zitrus

Bekanntes Mitglied
Java:
@Override
    public void actionPerformed(ActionEvent e) {  
        frame.remove(this);

        p = new Panel();
        frame.setSize(p.getWidth(),p.getHeight());
        frame.revalidate();
        frame.repaint();
        frame.add(p);
    }

Klappt leider immer noch nicht.
 

Harry Kane

Top Contributor
Funktioniert leider immernoch nicht. Die FPS-Anzeige "überschreibt" sich die ganze Zeit sodass man nichtmal mehr die Möglichkeit hat die Zahl zu entziffern.
Sehr komisch. Basierend auf der Fehlerbeschreibung mit der sich überschreibenden fps Anzeige hätte ich vermutet, dass einfach der Aufruf von super.paintComponent(g) in der paintComponent(Graphics g) von Panel fehlt. Wenn das die Ursache ist, sollte es allerdings nichts nützen, statt des Panel den JFrame zu repainten.
Füge bitte den obigen Aufruf mal hinzu.
 

censored

Mitglied
Basierend auf der Fehlerbeschreibung mit der sich überschreibenden fps Anzeige hätte ich vermutet, dass einfach der Aufruf von super.paintComponent(g) in der paintComponent(Graphics g) von Panel fehlt.
Das stimmt, das habe ich ganz übersehen.
Zudem hätte ich das revalidate und repaint nach dem add angefügt, da ein revalidate in der Regel nach hinzufügen eines Komponenten auch sinnvoll ist.
Versuch also mal deinen Code folgendermassen zu ändern:
Java:
@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);  
    g.setColor(Color.RED);
    g.drawString("FPS: " + Long.toString(fps) ,20,20);
}
und
Java:
@Override
    public void actionPerformed(ActionEvent e) {  
        frame.remove(this);
 
        p = new Panel();
        frame.setSize(p.getWidth(),p.getHeight());
        frame.add(p);
        frame.revalidate();
        frame.repaint();
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Netbeans Designer: Probleme mit JPanel und JFrame AWT, Swing, JavaFX & SWT 2
T Probleme mit Anzeige von Elementen im JPanel AWT, Swing, JavaFX & SWT 1
L Probleme mit JPanel AWT, Swing, JavaFX & SWT 8
S JScrollpane mit JPanel und Probleme AWT, Swing, JavaFX & SWT 4
S JPanel-Probleme AWT, Swing, JavaFX & SWT 3
K JButton auf JPanel in JTable (Darstellungs-/Event-Probleme) AWT, Swing, JavaFX & SWT 16
B Probleme bei JPanel Darstellung AWT, Swing, JavaFX & SWT 6
P Probleme bei BorderLayout im JPanel AWT, Swing, JavaFX & SWT 7
M GridBagLayout Probleme bei JPanel Aufteilung AWT, Swing, JavaFX & SWT 3
C Probleme einem JPanel den Fokus zuzuweisen AWT, Swing, JavaFX & SWT 2
S Probleme mit Anordnung von Komponenten im JPanel AWT, Swing, JavaFX & SWT 3
F Probleme bei add(Component) JPanel > JFrame AWT, Swing, JavaFX & SWT 3
G Probleme mit JProgressbar auf JPanel in JFrame AWT, Swing, JavaFX & SWT 6
B JPanel in JScrollPane: Probleme mit Scrollleisten AWT, Swing, JavaFX & SWT 13
A Probleme mit JPanel und BoxLayout AWT, Swing, JavaFX & SWT 5
N Probleme mit new JScrollPane(jPanel) AWT, Swing, JavaFX & SWT 6
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
E repaint Probleme AWT, Swing, JavaFX & SWT 13
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
S GridBagLayout - Probleme mit Bilderanzeige AWT, Swing, JavaFX & SWT 3
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
J Probleme mit idividueller Tablecell AWT, Swing, JavaFX & SWT 0
D JavaFX Probleme beim nachtäglichen hinzufügen der jfx dependency AWT, Swing, JavaFX & SWT 7
J Probleme mit InputDialog AWT, Swing, JavaFX & SWT 4
D JavaFX TextArea Probleme bei langen Zeilen AWT, Swing, JavaFX & SWT 1
G JavaFX SplitPane Anwendung - Controller Probleme AWT, Swing, JavaFX & SWT 5
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
B Probleme Action Listener Taschenrechner AWT, Swing, JavaFX & SWT 27
pph080560 JavaFX Probleme mit FX AWT, Swing, JavaFX & SWT 3
M Probleme mit OpenJDK AWT, Swing, JavaFX & SWT 6
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
L JavaFX Probleme beim Installieren JavaFX11 / JavaFX12 -- Eclipse 2019-03 AWT, Swing, JavaFX & SWT 3
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
H JFreeChart - DemoDataSetFactory Probleme AWT, Swing, JavaFX & SWT 1
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
A Probleme mit gridheight (GridBagLayout) AWT, Swing, JavaFX & SWT 6
U Opaque Probleme AWT, Swing, JavaFX & SWT 3
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
F JavaFX Probleme beim automatischen Konvertieren AWT, Swing, JavaFX & SWT 4
S Probleme mit JComboboxen(?) AWT, Swing, JavaFX & SWT 18
S Swing Probleme mit MigLayout AWT, Swing, JavaFX & SWT 2
C Probleme mit createImage AWT, Swing, JavaFX & SWT 1
J Probleme mit contex Menu (javafx) AWT, Swing, JavaFX & SWT 1
J Probleme bei GameofLife AWT, Swing, JavaFX & SWT 24
S JavaFx - Button ActionEvent Probleme AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 0
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 5
J LayoutManager GridBagLayout, probleme mit Anordnung von Objekten AWT, Swing, JavaFX & SWT 6
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
D Swing Probleme mit dem Resizing AWT, Swing, JavaFX & SWT 7
G Probleme mit TextArea AWT, Swing, JavaFX & SWT 5
G JFrame Probleme AWT, Swing, JavaFX & SWT 2
K Probleme beim JPasswordField AWT, Swing, JavaFX & SWT 11
G Cardlayout Refresh Probleme AWT, Swing, JavaFX & SWT 2
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
blazingblade komischerweise probleme mit jtextfield.gettext() AWT, Swing, JavaFX & SWT 9
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
Sin137 LayoutManager GridBagLayout Probleme AWT, Swing, JavaFX & SWT 6
M Swing Probleme mit Frame.pack() AWT, Swing, JavaFX & SWT 1
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
M Swing JProgressbar und Outoputstream probleme AWT, Swing, JavaFX & SWT 2
S Swing Probleme mit transparenz der Hintergrundfarbe und JRadioButtons AWT, Swing, JavaFX & SWT 2
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit JScrollPane AWT, Swing, JavaFX & SWT 6
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
J JavaFX JavaFX Probleme bei der Anzeige von Text AWT, Swing, JavaFX & SWT 18
A Probleme mit TilledBorder("***") AWT, Swing, JavaFX & SWT 4
F Bildschirmschoner Probleme mit Preview AWT, Swing, JavaFX & SWT 8
X Panel Probleme (Tetris) AWT, Swing, JavaFX & SWT 8
N JTable probleme AWT, Swing, JavaFX & SWT 5
B Probleme bei ImageIO.read (?!) AWT, Swing, JavaFX & SWT 9
P JFrame Location-/Size-Probleme AWT, Swing, JavaFX & SWT 5
U LayoutManager Probleme mit Layouts AWT, Swing, JavaFX & SWT 5
C 3 kleine Probleme... AWT, Swing, JavaFX & SWT 13
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
A Probleme mit 2 JFrames in einem Programm AWT, Swing, JavaFX & SWT 7
K LayoutManager Probleme mit 2 Komponenten AWT, Swing, JavaFX & SWT 9
C Probleme mit Buttons und einem ActionListener AWT, Swing, JavaFX & SWT 2
M Probleme mit Verkleinern eines GUI AWT, Swing, JavaFX & SWT 7
B Swing label.setText() macht probleme AWT, Swing, JavaFX & SWT 5
B ImageIcon - Probleme mit dem Dateipfad AWT, Swing, JavaFX & SWT 5
H JTree Probleme AWT, Swing, JavaFX & SWT 9
F Probleme mit (Graphics g) II AWT, Swing, JavaFX & SWT 4
F Probleme mit (Graphics g) AWT, Swing, JavaFX & SWT 3
K 2D-Grafik .GIF macht mir Probleme AWT, Swing, JavaFX & SWT 14
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
T JTable Graphik probleme AWT, Swing, JavaFX & SWT 3
H GridBagLayout macht Probleme... AWT, Swing, JavaFX & SWT 4
vandread Swing Probleme mit jTextField im zusammenspiel mit einem Einblendeffekt (inkl. KSKB) AWT, Swing, JavaFX & SWT 6
S Swing Lauftext Performance Probleme, in größerer Anwendung AWT, Swing, JavaFX & SWT 6
B Infolabel Probleme mit Paint() ? AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben