2013-05-20 19 views
8

Weiß jemand, wie man JTextField in Grafikname bufferstrategy.getDrawGraphics hinzufügen? Schmerz es in Grafiken, so etwas wie dieses tryed:Hinzufügen von Textfeld zu Grafiken 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); 

Aber, obwohl es angezeigt, ich kann es nicht ändern konnte. Selbst die Input.setBounds(800,250, 350,20) hat nicht funktioniert. Diese oben beschriebene Methode wird innerhalb einer Gameloop aufgerufen. Kann mir jemand helfen?

+0

Was ist schiefgelaufen? Hast du einen Laufzeitfehler bekommen? Wurde es angezeigt? – Frecklefoot

+0

Es wurde angezeigt, obwohl das 'JTextField' nicht editierbar war – null

+0

Ist die Klasse ein Canvas? JFrame? – Tips48

Antwort

11

Das Malen einer Komponente auf einem Graphics wird es nicht zu einer "Live" -Komponente machen. Komponenten müssen zu einem gültigen Container hinzugefügt werden, der an einen nativen Peer angehängt ist, bevor sie live geschaltet werden.

Im Moment ist das einzige, was Sie tun, ein "Stempel"/Bild der Komponente auf der Oberfläche des Grafikkontextes zu produzieren.

Es gibt einige Tricks, da der Malprozess erwartet, dass die Komponente an einen gültigen, nativen Peer angeschlossen ist.

Zunächst müssen Sie das Feld bereiten ...

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

Dann müssen Sie es malen. Das Feld wird nicht automatisch neu aufgebaut, wieder, das mit dem Feld zu tun hat, nicht zu einer nativen Peer angebracht ist ...

Input.printAll(gCC); 

Wenn Sie ein Leben Komponente wollen, werden Sie haben die Komponente hinzufügen zu der Kontainer. Dies kann bei Verwendung einer Pufferstrategie problematisch sein ...

Swing-Komponenten sind bereits doppelt gepuffert.

Verwandte Themen