8

有谁知道如何添加JTextField到图形名称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

在 a 上绘制组件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);

如果你想要一个生命组件,你将不得不将组件添加到容器中。这在使用缓冲策略时可能会出现问题......

Swing 组件已经被双缓冲。

于 2013-05-24T02:30:27.123 回答