2013-05-20 13 views
8

Czy ktoś wie, jak dodać JTextField do nazwy grafiki bufferstrategy.getDrawGraphics? tryed bólu go do grafiki, mniej więcej tak:Dodawanie pola tekstowego do grafiki w 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); 

Jednak, mimo iż wyświetlane, nie mogłem go edytować. Nawet Input.setBounds(800,250, 350,20) nie działa. Ta metoda, opisana powyżej, jest wywoływana wewnątrz gameloop. Czy ktoś może mi pomóc?

+0

Co poszło nie tak? Czy wystąpił błąd środowiska wykonawczego? Czy to wyświetlało? – Frecklefoot

+0

Zostało wyświetlone, chociaż "JTextField" nie było edytowalne. – null

+0

Czy klasa jest płótnem? JFrame? – Tips48

Odpowiedz

11

Malowanie elementu na Graphics nie spowoduje, że będzie on komponentem "na żywo". Komponenty muszą zostać dodane do prawidłowego kontenera, który jest dołączony do natywnego partnera, zanim staną się aktywne.

W tej chwili jedyną czynnością, którą wykonujesz, jest "pieczątka"/obraz komponentu na powierzchni kontekstu graficznego.

Jest kilka sztuczek do tego, ponieważ proces malowania oczekuje, że komponent jest dołączony do prawidłowego, macierzystego elementu równorzędnego.

Najpierw trzeba przygotować pole ...

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

Następnie trzeba go pomalować. Pole nie będzie automatycznie przemalować, znowu, to ma do czynienia z pola nie zostały dołączone do rodzimej każdym ...

Input.printAll(gCC); 

Jeśli chcesz składnik życia, będziesz musiał dodać do komponentu pojemnik. Może to być problematyczne przy korzystaniu ze strategii buforowania ...

Elementy obrotowe są już podwójnie buforowane.