2015-12-08 5 views
0

Я являюсь учеником разработчика программного обеспечения. В настоящее время я изучаю Java, и я хочу создать базовые тикающие часы. Я сделал много кода, переделывая и просматривая его, однако, я не понимаю, как заменить вторую руку и нарисовать новую. Я пытался сделать это здесь:Как использовать графический объект в другом методе для перекрытия чертежа в Java?

t = new Timer(1000, timer); 
    t.setRepeats(true); 
    t.start(); 
} 

ActionListener timer = new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent e) { 

     x= 253; 
     y = 150; 
      x=x+12; 
      y=y+12; 
      System.out.println(x); 
      System.out.println(y); 
      ga.drawLine(250, 275, x, y); 
      repaint(); 
     } 

Я сделал это с помощью Swing, таймеры и метод paintComponent. Однако графический объект «ga» здесь не читает один и тот же компонент из компонента краски и не нарисовывает/перекрывает основные часы. Это должно быть просто, потому что все, что угодно, в конечном итоге меня сбивает с толку, поскольку я видел много часов в сети с чрезвычайно длинным кодом. Я просто хочу, чтобы рука пометилась.

Любая помощь в этом была бы принята с благодарностью!

Заранее благодарен

ответ

3

Это неправильный подход к вашей проблеме. Вы должны сообщить, что компоненты Swing беспокоятся о том, когда нужно перерисовать себя. Правильное решение состоит в том, чтобы переопределить paintComponent(Graphics) в компоненте, который вы рисуете, и нарисовать на каждом шаге полные часы. Затем в вашем таймере вы должны обновить переменную в объекте, которая показывает, где будет отображаться вторая рука, и вызвать repaint() на кадре верхнего уровня.

Так что ваш код таймера будет изменен на что-то вроде этого:

@Override 
public void actionPerformed(ActionEvent e) { 
    int x = codeToGetXPosition(); 
    int y = codeToGetYPosition(); 
    myPanel.x = x; 
    myPanel.y = y; 
    repaint(); 
} 

И ваш метод paintComponent будет выглядеть следующим образом:

@Override 
public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    //Code to draw the rest of your clock 
    g.drawLine(250, 275, x, y); 
} 

Этот метод будет вызываться всякий раз, когда компонент должен быть перерисовывать (например, при изменении размера компонента), поэтому он должен гарантировать, что полная тактовая частота всегда отображается в правильном положении.

 Смежные вопросы

  • Нет связанных вопросов^_^