如何在JFrame上绘制文本并在java中清除?

时间:2014-04-18 12:05:24

标签: java swing jframe jpanel keylistener

我想使用drawString方法在JFrame上绘制文本,当我按下键盘上的'h'并在键盘上按'c'时清除文本这是我的代码,它正在绘图但我不是我不知道如何清楚地工作。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class test extends JPanel implements KeyListener {

char help,clear;
    public test() {
        super();
        setFocusable(true);
        this.addKeyListener(this);
    }

    //********************************************************************
       public void paintComponent(Graphics g) {
      repaint();
         g.setColor(Color.red);
         g.drawString("press 'H' for help ",150,50);

    if(help=='h'){
         g.drawString("one",150,100);
        }//end id help

if(clear=='c'){
                 g.drawString("",150,100);
        }//end id clear
    }

 //******************keyyyyyyy******************************************

     public void keyPressed(KeyEvent e) {

    if(e.getKeyChar()=='h'){
        help='h';
    }
if(e.getKeyChar()=='c'){
        clear='c';
    }
    }
     public void keyReleased(KeyEvent e) {
    }
 public void keyTyped(KeyEvent e) {
     }
    //********************************************************************
    public static void main(String[] args) {
        test panel=new test();
         JFrame frame = new JFrame("java lover");
       frame.add(panel);
       frame.setSize(400,400);
              frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

g.drawString("",150,100);

这样就不会画任何东西,而不是“删除”上一张图。

public void paintComponent(Graphics g) {
  repaint();

这会导致无限循环。它应该是:

 public void paintComponent(Graphics g) {
  super.paintComponent(g); // paint the BACKGROUND and borders

这样做,原始字符串将被删除。

作为一般提示:对于Swing,通常使用基于AWT的较低级别KeyListener的键绑定。有关如何使用它们的详细信息,请参阅How to Use Key Bindings