2013-05-20 14 views
8

Qualcuno sa come aggiungere JTextField in Nome grafica bufferstrategy.getDrawGraphics? provato a dolore che in grafica, qualcosa di simile:Aggiunta di campi di testo a Graphics in java

private JTextField Input = new JTextField(); 
BufferStrategy bs = getBufferStrategy(); 

if (bs == null) { 
    createBufferStrategy(3); 
    return; 
} 

final Graphics gCommands = bs.getDrawGraphics(); 
Graphics gCC = bs.getDrawGraphics(); 
Input.requestFocus(); 
Input.paint(gCC); 
Input.setBounds(800,250, 350,20); 
Input.setBorder(BorderFactory.createLineBorder(Color.BLACK, 0)); 
Input.setEditable(true); 
Input.setBackground(getBackground()); 
Input.setForeground(getForeground()); 
Input.addKeyListener(key); 

Ma, nonostante sapessero che appare, non ho potuto modificarlo. Anche il Input.setBounds(800,250, 350,20) non ha funzionato. Questo metodo che è scritto sopra, viene chiamato all'interno di un gameloop. Qualcuno può aiutarmi?

+0

Cosa non ha funzionato? Hai ricevuto un errore di runtime? È stato visualizzato? – Frecklefoot

+0

Viene visualizzato, anche se 'JTextField' non è modificabile – null

+0

La classe è una tela? JFrame? – Tips48

risposta

11

Dipingere un componente su un Graphics non lo rende un componente "live". I componenti devono essere aggiunti a un contenitore valido collegato a un peer nativo prima che diventino attivi.

Al momento, l'unica cosa che si sta facendo è produrre un "timbro di gomma"/immagine del componente sulla superficie del contesto grafico.

Ci sono alcuni accorgimenti, poiché il processo di verniciatura si aspetta che il componente sia collegato a un peer nativo valido.

In primo luogo, è necessario preparare il campo ...

Input.setBounds(800,250, 350,20); 
Input.setBorder(BorderFactory.createLineBorder(Color.BLACK, 0)); 
Input.setEditable(true); 
Input.setBackground(getBackground()); 
Input.setForeground(getForeground()); 

allora avete bisogno di dipingerlo. Il campo non ridisegnare automaticamente, ancora una volta, questo ha a che fare con il campo non è stato collegato a un peer nativo ...

Input.printAll(gCC); 

Se si desidera un componente di vita, si sta andando ad avere per aggiungere il componente a Il container. Questo può essere problematico quando si utilizza una strategia buffer ...

I componenti di rotazione sono già con doppio buffer.