2014-01-29 1 views
0

Я хочу, чтобы это медленно создавало линию, которая красками от 10,0 до 10 600. Линия вообще не будет рисовать, единственная причина, по которой я думаю, что она не работает, - это мой формат, и размещение разных компонентов немного не так? Зачем?Медленно покрасьте линию

public class Moving extends JPanel { 
    int counter; 
    Timer time; 
    public void setUp() { 
     ActionListener action = new ActionListener() { 
      public void actionPerformed(ActionEvent event){ 
       counter++; 
       repaint(); 

      } 
     }; 
     time = new Timer(100, action); 
     time.start(); 
    } 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.setColor(Color.RED); 
     g.drawRect(10, counter, 20, 20); 
    } 


    public static void main(String[] args) { 
     Moving game = new Moving(); 
        JFrame frame = new JFrame("Frame"); 
     frame.setSize(320, 340); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
        frame.add(game); 
     game.setUp(); 
    } 
} 
+0

в Initial Thread Если вы собираетесь изменить вопрос, особенно после ответа еще добавляемого, было бы неплохо Append изменения, как это делает любые существующие вопросы некоторые, что не имеет значения .. – MadProgrammer

ответ

3

Вы не добавили Moving к раме вы создаете ...

Обновлено

Я обновил код немного, чтобы продемонстрировать точку, добавляя Moving к раме. Я также включены требования

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.Timer; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Moving extends JPanel { 

    int counter; 
    Timer time; 

    public Moving() { 
     ActionListener action = new ActionListener() { 
      public void actionPerformed(ActionEvent event) { 
       counter++; 
       repaint(); 

      } 
     }; 
     time = new Timer(100, action); 
    } 

    public void start() { 
     time.start(); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.setColor(Color.RED); 
     g.drawRect(10, counter, 20, 20); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(400, 400); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       Moving moving = new Moving(); 
       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(moving); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
       moving.start(); 
      } 
     }); 
    } 
} 
+0

И 'counter' не является' volatile' в любом случае. – chrylis

+1

@chrylis В этом контексте я не думаю, что это должно быть, его можно получить только из одного контекста потока ... – MadProgrammer

+0

Ах, их мы идем! Что означает летучесть? – ImGone98

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