就是我想在一个面板实现只有键盘输入时它才repaint,而其他操作都不repiant,不知道有没有办法?(比如鼠标点击,放大缩小面板都不repaint)
不知道大家有没有办法???
希望知道的人帮下忙....被这个问题困捞了2周时间了...一直没有实现....

解决方案 »

  1.   

    不要重写面板的paint,或paintComponent方法,自己写画图的操作我大概写了一个Panel,当你按下R键时,会在Panel上画线,其他时候都不repaint,你可以参考下,不过在按下R键前你要用鼠标点击一下该Panel让它获得焦点。import javax.swing.JPanel;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.event.KeyEvent;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.KeyListener;public class MyPanel extends JPanel implements KeyListener, MouseListener{

    public MyPanel() {
    this.addKeyListener(this);
    this.addMouseListener(this);
    this.setFocusable(true);
    }

    public void mouseEntered(MouseEvent me) {}

    public void mouseReleased(MouseEvent me) {}

    public void mouseExited(MouseEvent me) {}

    public void mousePressed(MouseEvent me) {}

    public void mouseClicked(MouseEvent me) {
    this.requestFocusInWindow();
    }

    public void mouseDragged(MouseEvent me) {}

    public void mouseMoved(MouseEvent me) {}

    public void keyPressed(KeyEvent ke) {
    if (ke.getKeyCode() == KeyEvent.VK_R) {
    paintLine();
    }
    }

    public void keyTyped(KeyEvent ke) {}

    public void keyReleased(KeyEvent ke) {}

    private void paintLine() {
    Graphics g = this.getGraphics();
    g.setColor(Color.BLACK);
    g.drawLine(5, 5, 30, 30);
    g.dispose();
    }
    }
      

  2.   

    这段源码应该会简单些吧.主要就是用了一个变量去区别是否重绘来自键盘事件.import java.awt.BorderLayout;import javax.swing.JFrame;
    import javax.swing.JTextField;
    import java.awt.*;
    import javax.swing.JLabel;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyAdapter;public class Frame1 extends JFrame {
        JTextField jTextField1 = new JTextField();
        JLabel jLabel1 = new JLabel();
        int keyevent=0;
        public Frame1() {
            try {
                jbInit();
            } catch (Exception exception) {
                exception.printStackTrace();
            }
        }    private void jbInit() throws Exception {
    setBounds(300,200,300,200);
    setVisible(true);
            getContentPane().setLayout(null);
            jTextField1.setBounds(new Rectangle(24, 20, 174, 22));
            jTextField1.addKeyListener(new Frame1_jTextField1_keyAdapter(this));
            this.getContentPane().add(jTextField1, null);
            this.getContentPane().add(jLabel1);
            jLabel1.setBounds(new Rectangle(20, 83, 179, 21));
        }    public static void main(String[] args) {
            Frame1 frame1 = new Frame1();
        }    public void jTextField1_keyPressed(KeyEvent e) {
            keyevent=1;
            repaint();
        }
        public void repaint()
        {
            if(keyevent==0)
            {
                return;
            }else{
                jLabel1.setText("能实现了吧");
            }
        }
    }
    class Frame1_jTextField1_keyAdapter extends KeyAdapter {
        private Frame1 adaptee;
        Frame1_jTextField1_keyAdapter(Frame1 adaptee) {
            this.adaptee = adaptee;
        }    public void keyPressed(KeyEvent e) {
            adaptee.jTextField1_keyPressed(e);
        }
    }