JComponent - poprawne wywoływanie

0

Witam

Troszkę trudne mam pytanie do opisania mianowicie pisze jakiś np komponent i mam jakieś zdarzenie np po najechaniu myszka zmieniam status zmiennej i w tym czasie timer zewnętrzny poza komponentem odpytuje czy sa jakieś zmiany jeśli tak to zostaje wykonywana jakaś operacja np. przewijania i w ten sposob będąc na tym obszarze (obszar komponentu sie przewija) gdy opuszcza obszar to zmieniam status zmiennej i gdy odpytuje timer zewnętrzny to juz nic sie nie dzieje uzyskuje w ten sposób jakąś płynność. ale mam cały czas wrażenie ze źle to robie. jak powinienem podejść do problemu?

0

Weź określ swój problem bardziej po ludzku, napisz cel tego zachowania i podaj kod.

0
package temp;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JApplet;
import javax.swing.JComponent;
import javax.swing.JFrame;


public class aplecik extends JApplet {
    public static JFrame okno;
    public static Timer timer5;
    public static temp.mojkomponent obiektA;

    public void initComponents(){
       okno = new JFrame();
       obiektA = new temp.mojkomponent();
    }
    public void start(){
       initComponents();
       add(obiektA);
       timer5 = new Timer(); wywolaj timer5_task = new wywolaj(); timer5.schedule (timer5_task, 0, 10);
    }
}

class wywolaj extends TimerTask{
    @Override  public void run() {
        aplecik.obiektA.zmienPozycje();
    }
}

class mojkomponent extends JComponent {
  public mojkomponent (){
    setSize(200,200);
    this.addMouseMotionListener(new MouseAdapter() {
       public void mouseMoved(MouseEvent e){    pozycja(e.getX());    }
    });
  }
  int kierunekRuchu=0; // -1 w lewo   1 w prawo
  int pozycjaKwadratu=40;
  
  public void pozycja(int pX){
    System.out.println("pozycja");
    if (pX<20) {
        kierunekRuchu=-1;
    } else if (pX>180) {
        kierunekRuchu=1;
    } else {
        kierunekRuchu=0;
    }
  }

  public void zmienPozycje(){
    System.out.println("zmienPozycje"+kierunekRuchu);
     if (kierunekRuchu==1) {pozycjaKwadratu++;}
     if (kierunekRuchu==-1) {pozycjaKwadratu--;}
    repaint();
  }

  @Override public void paintComponent(Graphics g) {
    g.setColor(Color.white);
    g.fillRect(0, 0, 200, 200);
    g.setColor(Color.green);
    g.fillRect(pozycjaKwadratu, 30, 20, 20);
  }
}

jak rozwiązać ten problem w prostrzy sposób bez tworzenia klasy "wywolaj"

1 użytkowników online, w tym zalogowanych: 0, gości: 1