在java中向Graphics添加textfield

nul*_*ull 8 java graphics render jtextfield bufferstrategy

有谁知道如何添加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);
Run Code Online (Sandbox Code Playgroud)

但是,尽管它显示,我无法编辑它.即使是Input.setBounds(800,250, 350,20)没有奏效.上面写的这个方法是在游戏循环中调用的.谁能帮我?

Mad*_*mer 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());
Run Code Online (Sandbox Code Playgroud)

然后你需要画它.该字段不会自动重新绘制,这与未附加到本地对等的字段有关...

Input.printAll(gCC);
Run Code Online (Sandbox Code Playgroud)

如果需要life组件,则必须将组件添加到容器中.使用缓冲策略时可能会出现问题......

Swing组件已经是双缓冲的.