Es wird im falschen Fenster gezeichnet

melmager

Erfahrenes Mitglied
Ich schon wider :)
ich versuchre grade bewegte Grafik hinzubekommen.
sieht auch toll aus :) aber er zeichnet überall aber nicht dort wo er soll - wo ist mein Denkfehler ?

also ich habe ein Tabbed Pane (jTabbedPane1)
in dem sind 5 J-Panel die die Basis für jeden "Reiter" bilden (jPanelMetro und andre)
in einem J-Panel ist dann noch ein J-Panel wo ich drin malen will. (siehe Bild - jPanelMetroOut) der weisse Bereich.

Er malt aber in jedem Fenster - und da sieht das ergebniss auch so aus wie ich es eigendlich gern hätte aber genau da wo er soll kommt so gut wie nix.

Code:
class ClockListener implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
           // zeit abgelaufen
            Metronom myjmetro = (Metronom)jPanelMetroOut;
            myjmetro.tickin();
        }
    }
da ist erstmal der Listener vom Timer der dafür sorgt das regelmässig was neues gezeichnet wird..

Code:
public class Metronom extends JPanel  {

    private int taktnr = 0, tickcnt = 0;
    
     @Override
    protected void paintComponent( Graphics g ) {
         // Graphics2D g2 = (Graphics2D) g;
         super.paintComponent( g );  
     }

    void tickin() {
        Graphics ti = this.getGraphics();
        ti.setColor(Color.WHITE);
        ti.fillRect(10 + tickcnt * 20, 20, 20, 10);
        tickcnt++;
        if (tickcnt > 7) {
            // zeiche Takt
            taktnr++;
            tickcnt=0;
        }
        ti.setColor(Color.ORANGE);
        ti.fillRect(10 + tickcnt * 20, 20, 20, 10);
        if (taktnr > 3) {
            // zeile löschen
            taktnr = 0;
        }
        this.repaint();
    }
dat ist die Classe die zeichnet
Code:
jPanelMetroOut = new Metronom();

scheinbar holt er sich das Graphicsobjekt vom Tabbet aber warum ? weil er in jedem Tabbed zeichnet
 

Anhänge

  • Bildschirmfoto7.png
    Bildschirmfoto7.png
    8,3 KB · Aufrufe: 4
  • Bildschirmfoto8.png
    Bildschirmfoto8.png
    6,2 KB · Aufrufe: 6
Zuletzt bearbeitet:

Fabio Hellmann

Erfahrenes Mitglied
Hi,
du kannst doch alles was du in deiner tickin-Methode stehen hast, in die paintComponent(Graphics)-Methode verschieben. Dann brauchst du statt myjemtro.tickin() nur myjemtro.repaint() aufrufen.

Gruß

Fabio
 

melmager

Erfahrenes Mitglied
jo wenn ich das im paintComponet mache geht es.

eigendlich schade das es nur so geht - ich hoffe der PC ist dann schnell genug nachher für die gesamte anwendung.
Wenn ich jedesmal das ganze panel neu zeichen muss wenn was dazu kommt hoffe ich doch das es dann im andren Fenster wo ich jede menge Grafik mache noch tempomässig reicht ...
 

Fabio Hellmann

Erfahrenes Mitglied
Du könntest alternativ nur den Bereich neuzeichnen lassen, den du geändert hast. Ich weiß allerdings nicht, ob das von der Performance wirklich eine imense Steigerung wäre.
 

Neue Beiträge