2013-05-15 2 views
-1

У меня проблема с моим компонентом на Java. Когда я устанавливаю флаг OVF в true, Rect должен быть в цвете красного (255,0,0), и если я установил флаг OVF в значение false, Rect должен быть синим цветом (0,0255). Проблема в том, что я вижу в моем графическом интерфейсе только синий прямоугольник (даже если флаг OVF установлен в true). Что я должен изменить в этом коде?JComponent change bar color

import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.awt.*; 
import javax.swing.*; 

public class Komponent2 extends JComponent implements ActionListener 
{ 
Timer tm = new Timer(10, this); 
int x =30; 
int y =0, y2 = 8; 
Counter counter3; 
Color Kolor = new Color(255,255,255); 

public void paintComponent(Graphics g) 
{ 
    counter3=new Counter(); 
    super.paintComponent(g); 
    g.setColor(Kolor); 
    g.fillRect(y,30,x,30); 
    tm.start(); 
} 

public void actionPerformed(ActionEvent e) 
{ 
if(y<0 || y>300) 
y2=-y2; 
y=y + y2; 
if (counter3.OVF==true) 
Kolor = new Color (255,0,0); 
if (counter3.OVF==false) 
Kolor = new Color (0,0,255); 
repaint(); 
} 
} 

Спасибо, что помогли мне.

+3

Ваш код нуждается в экстренном отступе. – Maroun

+2

Возможно, что-то связано с тем, как вы создаете новый счетчик3 при каждом вызове 'paintComponent'. Где вы устанавливаете OVF? – whiskeyspider

+0

OVF устанавливается в классе Counter. OVF устанавливается в true, когда MainReg установлен в 0 (он работает, потому что если OVF == true, я могу видеть в моем ярлыке класса GUI «INTERRUPT» – Martyn

ответ

1

Создайте конструктор в классе Komponent2, содержащий инициализацию счетчика и запустите Timer. Это предотвратит создание нескольких экземпляров Counter. Также переместите Timer из метода paintComponent, чтобы он не перезапускался для каждой перерисовки.

public Komponent2() { 
    counter3 = new Counter(); 
} 

public void init() { 
    tm.start(); 
} 
+0

Теперь мой прямоугольник по-прежнему белый. Похоже, что таймер не начинается. – Martyn

+0

Вы вызвали новый метод 'init', чтобы запустить его? – Reimeus

+0

Я просто добавляю строки "public void init() {tm.start();}". И я удалил tm.start(); from paintComponent – Martyn

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

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