你好我写了一些代码我虽然它会起作用,但它编译,它甚至没有抛出异常或任何东西。它也创建了像它打开的图标,但我点击它,它没有做任何事情请帮助知道我做错了什么。下面是该类的代码:
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();
}
}}
这是我的主要内容:
package practicagraficos8;
public class Practicagraficos8 {
public static void main(String[] args) {
ventanatexto prueba= new ventanatexto();
}
}
答案 0 :(得分:3)
如图here所示,“drawString()
期望坐标代表String
的{{3}}。”
FontMetrics fm = g.getFontMetrics();
g.drawString(texto, 0, fm.getAscent());
此外,
使用JTextComponent
获取可修改的文字。
使用baseline,而不是KeyListener
。
在封闭的pack()
上使用Window
。
“Swing程序应该覆盖paintComponent()
,而不是覆盖paint()
。” - Key Bindings。
应在Painting in AWT and Swing: The Paint Methods上仅构建和操作Swing GUI对象。
使用适当的event dispatch thread。
答案 1 :(得分:1)
我尝试过运行你的代码。如果您问为什么窗口没有显示,请尝试在JFrame上设置边界(大小和位置):
ventana.setBounds(0, 0, 200, 200);
当使用装饰的外观时,如果没有设置边界,似乎窗口不会显示。