java上的KeyAdapter、awt、swing出现运行时错误。帮助发现错误

java上的KeyAdapter、awt、swing出现运行时错误。帮助发现错误,java,swing,awt,Java,Swing,Awt,你好,我写了一些代码,我以为它会工作,但它编译,它甚至没有抛出异常或任何东西。它还创建了一个图标,就像它打开的一样,但我点击了它,它什么也没做。需要帮助才能知道我做错了什么。下面是课程代码: package practicagraficos8; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ventanatexto { public JFrame ventana; pub

你好,我写了一些代码,我以为它会工作,但它编译,它甚至没有抛出异常或任何东西。它还创建了一个图标,就像它打开的一样,但我点击了它,它什么也没做。需要帮助才能知道我做错了什么。下面是课程代码:

package practicagraficos8;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ventanatexto {
   public JFrame ventana;
   public String texto;
    ventanatexto(){
    JFrame.setDefaultLookAndFeelDecorated(true);
    texto="";
    ventana= new JFrame("teclado");
    panel1 panel= new panel1();
    ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ventana.add(panel);
     ventana.setVisible(true);
    ventana.addKeyListener(new handler());

    }

    public class panel1 extends JPanel {

        @Override
    public void paint(Graphics g){
        super.paint(g);
    Dimension dim= getSize();
    g.clearRect(0, 0, dim.width, dim.height);
    g.drawString(texto, WIDTH, WIDTH);
    };


}
    class handler extends KeyAdapter{
        @Override
    public void keyPressed(KeyEvent k){
    char tecla= k.getKeyChar();
    switch(tecla){

        case 127:texto="";
    break;
        case 8: if(texto.length()>0){texto=texto.substring(0, texto.length()-1);}
            break;
        default:
            if (texto.length()<15){texto+=tecla;}

    }
    ventana.repaint();
    }

    }}

我试过运行你的代码。如果您询问窗口为何未显示,请尝试在JFrame上设置边界(大小和位置):

ventana.setBounds(0, 0, 200, 200);

如果未设置边界,则在使用装饰外观时,窗口似乎不会显示。

我已尝试运行您的代码。如果您询问窗口为何未显示,请尝试在JFrame上设置边界(大小和位置):

ventana.setBounds(0, 0, 200, 200);
如果未设置边界,则在使用装饰外观时,窗口似乎不会显示。

如图所示,“
drawString()
希望坐标表示
字符串的长度。”

另外,

  • 对可编辑文本使用
    JTextComponent

  • 使用,而不是
    KeyListener

  • 在封闭的
    窗口上使用
    pack()

  • “Swing程序应该重写
    paintComponent()
    ,而不是重写
    paint()

  • Swing GUI对象应仅在上构造和操作

  • 使用合适的方法

如图所示,“
drawString()
希望坐标表示
字符串的长度。”

另外,

  • 对可编辑文本使用
    JTextComponent

  • 使用,而不是
    KeyListener

  • 在封闭的
    窗口上使用
    pack()

  • “Swing程序应该重写
    paintComponent()
    ,而不是重写
    paint()

  • Swing GUI对象应仅在上构造和操作

  • 使用合适的方法


控制台中是否没有异常?甚至在运行时?不,根本没有例外。希望你能发现这个问题。谢谢。如果您的
JPanel
没有焦点,请在将
JFrame
设置为可见后,在
JPanel
实例上调用
requestFocusInWindow()
,查看是否有效,如果无效,请双击
JPanel
,然后重试。如果它适用于上述任何一种情况,那么当它被添加到
JFrame
时,您的JPanel就会失去焦点。相反,使用keybidings并查看KeyEvent类,整个
案例127
都不好。同样覆盖
JPanel的
paintComponent
,而不是
paint()
,正如@David所指出的那样,
KeyListener
需要焦点+1用于
KeyAdapter
(而不是
keylister
)和。控制台中没有异常?甚至在运行时?不,根本没有例外。希望你能发现这个问题。谢谢。如果您的
JPanel
没有焦点,请在将
JFrame
设置为可见后,在
JPanel
实例上调用
requestFocusInWindow()
,查看是否有效,如果无效,请双击
JPanel
,然后重试。如果它适用于上述任何一种情况,那么当它被添加到
JFrame
时,您的JPanel就会失去焦点。相反,使用keybidings并查看KeyEvent类,整个
案例127
都不好。同样覆盖
JPanel的
paintComponent
,而不是
paint()
,正如@David所指出的那样,
KeyListener
需要焦点+1用于
KeyAdapter
(而不是
keylister
)和。如果没有固有的首选大小,
setBounds()。基本问题是所提到的文本基线。如果没有固有的首选大小,
setBounds()
可能是合适的,正如其中所建议的那样。基本问题是上文提到的文本基线。
FontMetrics fm = g.getFontMetrics();
g.drawString(texto, 0, fm.getAscent());