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());