我试图创建一个Java程序,允许您使用拖放代码面板编写简单的游戏。在我的代码面板中使用JTextField创建了一个小故障,在更新大小之前会有很长的延迟,所以我使用JPanel创建了自己的JTextField。
以下是代码:
package editor;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
public class JCustomTextField extends JPanel {
String text;
int xMargin;
int yMargin;
int width;
int height;
public JCustomTextField(String initText, int xMargin, int yMargin, int height, int width) {
this.xMargin = xMargin;
this.yMargin = yMargin;
this.width = width;
this.height = height;
this.text = initText;
setBorder(new LineBorder(Color.DARK_GRAY, 2));
setBounds(0, 0, width, height);
addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent arg0) {
text.concat("" + arg0.getKeyChar());
repaint();
}
@Override
public void keyReleased(KeyEvent arg0) {
}
@Override
public void keyTyped(KeyEvent arg0) {
}
});
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.WHITE);
g.drawString(text, xMargin, yMargin);
}
public Dimension getMinimumSize() {
return new Dimension(width, height);
}
public Dimension getPreferredSize() {
return new Dimension(width, height);
}
public Dimension getMaximumSize() {
return new Dimension(width, height);
}
}
现在我创建一个包含JLabel和文本面板的JComponent数组,并将其添加到代码面板。
JComponent[] jumpComps = {new JLabel("Jump Height:"), new JCustomTextField("10", 2, 2, 20, 50)};
CodePanel jumpPanel = new CodePanel(0,0, jumpComps, 1);
边框显示,但不显示文字。
这是代码小组的图片:
我正在使用Substance Graphite Glass外观。
答案 0 :(得分:0)
getKeyChar方法始终返回有效的Unicode字符或CHAR_UNDEFINED。 KEY_TYPED事件报告字符输入:KEY_PRESSED和KEY_RELEASED事件不一定与字符输入相关联。因此,getKeyChar方法的结果保证仅对KEY_TYPED事件有意义。
对于按下键和释放键的事件,getKeyCode方法返回事件的keyCode。对于键类型事件,getKeyCode方法始终返回
VK_UNDEFINED
。
getKeyChar
仅对keyTyped事件有效。对于keyPressed和keyReleased事件,它的返回值是未定义的。
所有这一切,文本字段比这复杂得多。您没有处理光标渲染,退格,箭头键,选择或辅助功能。您最好使用真正的JTextField并正确解决布局问题。