Domanda

Il JMenuItems di JMenuBar scende a un JPanel aggiunto alla JFrame, ma il JPanel cancella la JMenuItems.
Ho dovuto mettere in pausa il ri-disegno del JPanel?
Sto utilizzando getGraphics() sul JPanel per disegnare un'immagine, questo metodo viene chiamato da un filo con (per esempio) 200 ms ritardo.

modifica :
Si tratta di una (molto semplice) gioco all'interno del JPanel.
(Ho aggiunto un paused campo per il JPanel e Ho modificato il metodo di vernice in modo che ridisegna l'JPanel solo se paused è false, però non so se questa "soluzione" è buono. (E 'impostato su true quando l'utente clicca sul menu e impostato false quando seleziona o cancella.)

È stato utile?

Soluzione

Si dovrebbe sempre essere ridipingere la JPanel dal thread Event Dispatch, non un thread arbitrario. Se si vuole fare questo al fine di animare il pannello (per esempio con i 200ms ritardo si parla), allora considerare l'utilizzo di javax.swing.Timer, che spara periodicamente un'ActionEvent sul filo Event Dispatch.

Esempio

  public class MyPanel extends JPanel {
    public void paintComponent(Graphics g) {
      super.paintComponent(g);
      // Add additional graphics operations here.
    }
  }

  final JPanel panel = new MyPanel();
  int delay = 200; // Milliseconds

  ActionListener taskPerformer = new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
          panel.repaint();
      }
  };

  new Timer(delay, taskPerformer).start();

Altri suggerimenti

  

sto usando getGraphics () sul JPanel   per disegnare un'immagine

Non usare mai le getGraphics () metodo del genere. Non avete controllo su quando il componente deve essere ridipinto. pittura su ordinazione dovrebbe essere fatto da override del metodo paintComponent () del pannello. Quando si utilizza il timer è sufficiente utilizzare panel.repaint () e il gestore swing ridisegno dovrebbe guardare dopo i dettagli di ciò che deve essere verniciato.

dare un'occhiata alla documentazione javax.swing.Timer

http: //java.sun .com / J2SE / 1.4.2 / docs / api / javax / swing / Timer.html

E 'il codice proprio in cima al fuoco un evento su intervallo fisso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top