Java 将圆圈画到我单击的位置无效
我修改了密码 当我点击鼠标时,同样的输出没有圆圈Java 将圆圈画到我单击的位置无效,java,Java,我修改了密码 当我点击鼠标时,同样的输出没有圆圈 public class gui extends JFrame{ Scanner scan = new Scanner(System.in); private final JPanel mousepanal; private final JLabel stutespar ;
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();
@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");
}
如何调用重新绘制
repaint();
}
/////////////////////////////////////////////////////////////
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();
@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);
}
}
一些问题:
你应该使用super.paintComponent。。。没有s
但是,在这种情况下,这并不重要,因为JFrame没有paintComponent方法。您应该始终在方法之前使用@Override,以确保您实际上正在重写类的方法
进行自定义绘制时:
可以替代JPanel的paintComponent方法,并将面板添加到框架中
应该在自定义面板类中定义MouseListener
在鼠标事件中,您需要调用repait,以便组件可以重新绘制自己
你能给我一些错误吗?您希望输出的确切内容是什么?输出是我单击时创建的帧。。什么也没发生x=e.getX;y=e.getY;x和y不只是用来表示放图形g globalg.drawOvalx,y,20,20;当我在框架中单击时,它会在线程AWT-EventQueue-0java.lang.NullPointerException中给我错误异常,我将其设置为全局,并给了您一些建议。代码在过去3天内没有更改,因此没有其他需要检查的内容。如果你需要更多的帮助,那么发布一个适当的帖子,使用给出的建议。