2013-08-24 15 views
7

Ciao io sono un programmatore principiante
voglio sviluppare GUI di un programma Java utilizzando IDE NetbeansJava Netbeans vernice di override() in un JPanel

Utilizzando Netbeans GUI Builder,
In primo luogo, creare un nuovo JFrame Modulo
Poi, aggiungo un JPanel dalla barra degli strumenti/palette

domanda è,
Come posso ignorare la funzione paint() della nuova creazione JPanel?

voglio richiamare uno sfondo e alcune sfere all'interno del JPanel,
Ho provato ad utilizzare getGraphics() funzione per dipingere e disegnare, fa il lavoro, ma non attirerà più quando chiamo repaint()

Dovrebbe Creo una nuova classe che implementa JPanel o JComponent, con la mia funzione personalizzata paint(), invece?
(Se è così, come posso farlo con Netbeans GUI Builder?)

domanda simile:

how to use jpanel with paint (or repaint)

(ma non usa NetBeans GUI Builder)

risposta

9

Il modo usuale per fare ciò è creare la propria sottoclasse (ad esempio MyJPanel) e implementare il metodo paint().

Dopo aver implementato quella classe, passare al modulo, selezionare il pannello e quindi utilizzare "codice di creazione personalizzata" nella scheda "Codice" delle proprietà del pannello per creare un'istanza di MyJPanel invece di JPanel

Custom creation code

Questo ha il leggero svantaggio che è necessario lanciare la variabile di istanza per MyJPanel ogni volta che si desidera accedere ai metodi che sono definiti in MyJPanel ma non in JPanel. Se non hai mai bisogno di farlo, questo è il metodo più veloce.

Se si desidera accedere a metodi aggiuntivi nella classe del pannello (senza eseguire il cast della variabile di istanza ogni volta), è più semplice rimuovere lo JPanel esistente e aggiungere un "Bean" utilizzando la nuova classe.

Questo viene fatto clic sul pulsante "Scegli Bean" nella tavolozza:

Choose bean

Una volta che si fa clic su OK è possibile posizionare il pannello sul modulo e NetBeans creerà una variabile dell'istanza digitare MyJPanel (anziché JPane) ed è possibile accedere a tutti i metodi definiti in tale classe.Nota che la classe deve essere compilata prima di poterla aggiungere in questo modo!

+0

* "crea la tua sottoclasse' JPanel' (ad esempio 'MyJPanel') e implementa il metodo' paint() '." * Questo non è AWT ma Swing e quel metodo dovrebbe essere ** 'paintComponent (Graphics)' **. Inoltre, se non ci sono componenti nel pannello 'personalizzato dipinto', è più semplice disegnare su un 'BufferedImage' e visualizzarlo in un 'JLabel'. –

+0

@AndrewThompson: beh, la domanda era su come farlo. E la mia spiegazione è adatta anche quando si desidera sovrascrivere qualsiasi altro metodo in una classe Swing. Indipendentemente dal fatto che sia saggio (o utile) sovrascrivere il metodo 'paint()' non è rilevante qui - nessuna necessità di downvotare –

+0

* "nessuna necessità di downvote" * Non l'ho fatto, sperando che tu potessi migliorare la (qualità molto bassa) risposta. OTOH, discutendo su di esso .. -1 –

1

Non applicare la vernice, se ho capito bene, perché invoca paintBorder, paintChildren e paintComponent. Usa la pittura se vuoi gestire il confine e i bambini, con il componente, ma non è raccomandato. Utilizzare invece paintComponent.

7

Ciao io sono un programmatore novizio voglio sviluppare un programma Java GUI utilizzando IDE Netbeans

Hi! Dato che sei un programmatore novizio, usa Netbeans come un normale editor di testo. Per farlo, crea semplici classi Java invece di Forms e fai tu stesso la codifica. La ragione è che devi capire prima Swing, prima di dover affrontare l'approccio di Netbeans.

Devo creare una nuova classe che implementa JPanel o JComponent, con la mia funzione di vernice personalizzata() ?

Si potrebbe certamente estendere JPanel o JComponent, poiché non sono interfacce.

Se si desidera utilizzare l'editor GUI di Netbeans Mattise, creare un nuovo modulo JPanel e sovrascrivere il metodo paintComponent.

@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    // do your painting here... 
    g.setColor(Color.RED); 
    g.fillRect(6, 20, 12, 120); 
    g.setColor(Color.WHITE); 
    g.drawString("test", 50, 25); 
} 

Infine basta aggiungere il componente al costruttore del JFrame Forma:

add(new MyNewJPanel()); 
    pack(); 

Assicurarsi che ContentPane del JFrame ha un layout adeguato.