2013-05-20 55 views
8

Có ai biết cách thêm JTextField vào tên Đồ họa bufferstrategy.getDrawGraphics không? Đã cố gắng để làm cho nó đau đớn vào đồ họa, một cái gì đó như thế này:Thêm trường văn bản vào Đồ họa trong 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); 

Nhưng, mặc dù nó hiển thị, tôi không thể chỉnh sửa nó. Ngay cả Input.setBounds(800,250, 350,20) cũng không hoạt động. Phương pháp này được viết ở trên, đang được gọi bên trong một gameloop. Ai giúp tôi với?

+0

Điều gì đã xảy ra? Bạn có gặp lỗi thời gian chạy không? Nó có hiển thị không? – Frecklefoot

+0

Nó được hiển thị, mặc dù 'JTextField' không thể chỉnh sửa được – null

+0

Lớp đó có phải là Canvas không? JFrame? – Tips48

Trả lời

11

Vẽ một thành phần trên Graphics sẽ không biến thành thành phần "hoạt động". Các thành phần cần phải được thêm vào một vùng chứa hợp lệ được đính kèm với một đồng đẳng gốc trước khi chúng trở thành trực tiếp.

Hiện tại, điều duy nhất bạn đang làm là tạo ra "dấu cao su"/hình ảnh của thành phần trên bề mặt của ngữ cảnh đồ họa.

Có một số thủ thuật cho điều này, vì quá trình vẽ hy vọng rằng thành phần được gắn vào một đồng đẳng gốc, hợp lệ.

Trước tiên, bạn phải chuẩn bị lĩnh vực này ...

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

Sau đó, bạn cần phải vẽ nó. Trường sẽ không tự động sơn lại, một lần nữa, điều này đã làm với lĩnh vực không được gắn liền với một peer mẹ đẻ ...

Input.printAll(gCC); 

Nếu bạn muốn có một phần cuộc sống, bạn sẽ cần phải thêm các thành phần để thùng chứa. Điều này có thể có vấn đề khi sử dụng chiến lược đệm ...

Các thành phần Swing đã được đệm đôi.