如果有人点击,我该如何使用repaint()方法?

时间:2014-03-07 20:21:21

标签: java user-interface

我还在学习Java,我可以编写简单的软件,但在创建GUI时我完全是垃圾。 我想创建一个简单的GUI,在屏幕上打印出一个简单的矩形,用户在该GUI中点击的位置,矩形将移动到该位置。

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class circle extends JPanel implements MouseListener {

int x = 0;
int y = 0;


public void paint(Graphics g) {

    g.setColor(Color.BLUE);
    g.fillRect(x, y, 25, 10);

}


@Override
public void mouseClicked(MouseEvent m) {
    x = m.getX();
    y = m.getY();
    repaint();


}

我显然错过了mouseEntered / Exited / Pressed / Released,因为它还没有包含任何代码。我无法理解的是,为什么矩形不会在我点击的地方打印出来,除非我使用错误的方法,如重绘....

我的主要课程:

import javax.swing.JFrame;

public class main {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    JFrame f = new JFrame("Circle Prog");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    circle co = new circle();
    f.add(co);


    f.setSize(300, 300);
    f.setVisible(true);


}

}

2 个答案:

答案 0 :(得分:1)

MouseListener尚未在面板中注册

public class CirclePanel extends JPanel implements MouseListener {

    int x = 0;
    int y = 0;

    public CirclePanel() {
        addMouseListener(this);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLUE);
        g.fillRect(x, y, 25, 10);
    }

       ...
}     

一些注释

  • 在Swing中覆盖paintComponent代替paint进行自定义绘制,并记住调用super.paintComponent(g)。虽然paint可能有效,但它不会利用Swings优化的油漆模型

答案 1 :(得分:1)

两件事:

1)您需要添加MouseListener。也许在构造函数中:

public circle() {
    addMouseListener(this);
}

2)您需要致电super.paint(g)