8

JTextFieldGraphics nameに追加する方法を知っている人はいますbufferstrategy.getDrawGraphicsか? 次のようなグラフィックにペイントしようとしました:

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)うまくいきませんでした。上記のこのメソッドは、ゲームループ内で呼び出されています。誰でも私を助けることができますか?

4

1 に答える 1

10

にコンポーネントをペイントして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);

life コンポーネントが必要な場合は、コンポーネントをコンテナに追加する必要があります。これは、バッファ戦略を使用する場合に問題になる可能性があります...

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

于 2013-05-24T02:30:27.123 に答える