JMenuBar scendere a un JPanel “su misura” e “cancellati”
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.)
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.