Java 图形抽绳未显示在JPanel中

Java 图形抽绳未显示在JPanel中,java,swing,jpanel,Java,Swing,Jpanel,我正在尝试制作一个Java程序,允许您使用拖放代码面板编写简单的游戏。在我的代码面板中使用JTextField会产生一个小问题,在更新大小之前会有很长的延迟,因此我求助于使用JPanel创建自己的JTextField 代码如下: package editor; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.KeyEvent; import jav

我正在尝试制作一个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);
显示边框,但不显示文本

下面是代码面板的图片:

我使用的是石墨玻璃材质的外观和感觉。

来自:

getKeyChar方法始终返回有效的Unicode字符或未定义的字符。字符输入由按键类型事件报告:按键按下和按键释放事件不一定与字符输入关联。因此,保证getKeyChar方法的结果仅对键类型的事件有意义

对于按键按下和按键释放事件,getKeyCode方法返回事件的keyCode。对于键类型的事件,getKeyCode方法始终返回
VK\u UNDEFINED

getKeyChar
仅对键入的事件有效。对于按键按下和按键释放事件,其返回值未定义


尽管如此,文本字段要比这个复杂得多。您没有处理光标渲染、退格、箭头键、选择或可访问性。最好使用真正的JTextField并正确解决布局问题。

(1-)不要创建自定义组件。解决您的布局问题。@Aterix这与您所问的问题不同。你最好删除这个问题,然后问一个新问题,这将演示你的拖放解决方案和布局问题