我修改了代码 当我点击鼠标时,相同的输出没有圆圈
public class gui extends JFrame{
Scanner scan = new Scanner(System.in);
private final JPanel mousepanal;
private final JLabel stutespar ;
int x=0;
int y=0;
public gui() {
super("title");
mousepanal = new JPanel();
mousepanal.setBackground(Color.WHITE);
add(mousepanal,BorderLayout.CENTER);
add(edffnmlsdfkj,BorderLayout.WEST);
stutespar = new JLabel();
add(stutespar,BorderLayout.SOUTH);
Handlerclass handler = new Handlerclass();
Paintcir p = new Paintcir();
mousepanal.addMouseListener(handler);
mousepanal.addMouseMotionListener(handler);
}
///////////////////////////
private class Handlerclass extends JPanel implements MouseListener,MouseMotionListener{
@Override
public void mouseClicked(MouseEvent e) {
stutespar.setText(String.format("clicked at %d %d",e.getX(),e.getY()));
x=e.getX();
y=e.getY();
如何调用repaint()?
repaint();
}
/////////////////////////////////////////////// //////////////
@Override
public void mousePressed(MouseEvent e) {
stutespar.setText("you bress mouse");
}
@Override
public void mouseReleased(MouseEvent e) {
stutespar.setText("mouse realse");
}
@Override
public void mouseEntered(MouseEvent e) {
stutespar.setText("you entered the mouse");
// mousepanal.setBackground(Color.RED);
}
@Override
public void mouseExited(MouseEvent e) {
stutespar.setText("exsitd");
// mousepanal.setBackground(Color.WHITE);
}
@Override
public void mouseDragged(MouseEvent e) {
stutespar.setText("dragged");
}
@Override
public void mouseMoved(MouseEvent e) {
stutespar.setText("moved");
}
//////////////////////////////////////////
@Override
public void paintComponent(Graphics g) {
super.paintComponents(g);
this.setBackground(Color.yellow);
g.setColor(Color.green);
g.fillOval(x, y, 40, 40);
// g.fillOval(x+50, y+100, 40, 40);
}
}
}
这是主要的课程
public class Main extends JFrame {
public static void main(String[] args) {
gui g = new gui();
g.setDefaultCloseOperation(EXIT_ON_CLOSE);
g.setSize(500,500);
g.setVisible(true);
}
}
答案 0 :(得分:0)
一些问题:
您应该使用super.paintComponent(...)
而不使用“s”。
但是,在这种情况下无关紧要,因为JFrame没有paintComponent()方法。您应始终在方法之前使用@Override
,以确保实际上覆盖了该类的方法。
进行自定义绘画时:
覆盖JPanel的paintComponent()方法并将面板添加到框架中。
应在自定义面板类中定义MouseListener。
在鼠标事件上你需要调用repaint()以便组件可以重新绘制自己