2013-05-20 12 views
8

をグラフィック名bufferstrategy.getDrawGraphicsに追加する方法を知っている人はいますか?それは私がそれを編集できませんでした、表示された本家の、JavaのGraphicsにテキストフィールドを追加する

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); 

しかし: は、グラフィックスに痛み、それには、このような何かをしようと試みました。 Input.setBounds(800,250, 350,20)でも動作しませんでした。上記で書かれたこのメソッドは、gameloop内で呼び出されています。誰でも助けてくれますか?

+0

何が問題になりましたか?ランタイムエラーが発生しましたか?それは表示されましたか? – Frecklefoot

+0

'JTextField'は編集できませんでしたが、表示されました – null

+0

クラスはCanvasですか? JFrame? – Tips48

答えて

11

Graphicsにコンポーネントをペイントしても、「ライブ」コンポーネントにはなりません。コンポーネントがライブになる前にネイティブピアに接続されている有効なコンテナにコンポーネントを追加する必要があります。

現時点では、グラフィックスコンテキストの表面にコンポーネントの「ラバースタンプ」/イメージを作成するだけです。

ペイントプロセスでは、コンポーネントが有効なネイティブピアに接続されていると予想されるため、いくつかのトリックがあります。

まず、あなたはフィールドを準備する必要があります...

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

その後、あなたはそれをペイントする必要があります。フィールドには、自動的にあなたの人生のコンポーネントをしたい場合は、あなたがにコンポーネントを追加する必要があるとしている

Input.printAll(gCC); 

...これはフィールドでネイティブピアに添付されていないために持って、もう一度、再描画しませんコンテナこれは、バッファストラテジを使用すると問題になる可能性があります。

スイングコンポーネントはすでにダブルバッファされています。

関連する問題