画圆圈到我点击的位置不起作用

时间:2014-12-20 23:32:28

标签: java

我修改了代码 当我点击鼠标时,相同的输出没有圆圈

                  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);





                       }   
                 }

1 个答案:

答案 0 :(得分:0)

一些问题:

  1. 您应该使用super.paintComponent(...)而不使用“s”。

  2. 但是,在这种情况下无关紧要,因为JFrame没有paintComponent()方法。您应始终在方法之前使用@Override,以确保实际上覆盖了该类的方法。

  3. 进行自定义绘画时:

    1. 覆盖JPanel的paintComponent()方法并将面板添加到框架中。

    2. 应在自定义面板类中定义MouseListener。

    3. 在鼠标事件上你需要调用repaint()以便组件可以重新绘制自己