Images abwechselnd Darstellen

Status
Nicht offen für weitere Antworten.

PollerJava

Top Contributor
Hallo, ich habe eine JFrame und in dem befindet sich ein JPanel. In das JPanel habe ich ein Image hinzugefügt.
Ich möchte jetzt auf einem Teilbereich des Images einmal das Image rotor1 und einmal rotor2 darstellen.

Kann mir da jemand helfen. Ich komme nicht mehr weiter. Unten meine drei Klassen.

lg und vielen Dank
Stefan


Code:
// diese Klasse ist meine Hauptklasse, in dieser wird das hintergrundBild auf dem JPanel dargestellt

public class MainFrame extends JFrame {    
    private Image hintergrundBild;
    private Image rotor1;
    private Image rotor2;
    private JankSchalter schalter;
    private JankSchalter taster;
    private JButton button1;
    private ImageIcon buttonAus;
    private ImageIcon buttonEin; 
    private ImageIcon tasterAus;
    private ImageIcon tasterEin;
    private JLabel label;
    private JPanel p;
    private JPanel panelHMI;
    private RotorDrehung rotor;
    
    public MainFrame() 
	{
	super("MainFrame");
	hintergrundBild = getToolkit().getImage(System.getProperty("user.dir") + "\\pics\\hintergrundBild.png");
        rotor1 = getToolkit().getImage(System.getProperty("user.dir") + "\\pics\\rotor1.png");
        rotor2 = getToolkit().getImage(System.getProperty("user.dir") + "\\pics\\rotor2.png");
        buttonAus = new ImageIcon(System.getProperty("user.dir") + "\\pics\\aus.gif");
	buttonEin = new ImageIcon(System.getProperty("user.dir") + "\\pics\\ein.gif");
        tasterAus = new ImageIcon(System.getProperty("user.dir") + "\\pics\\ausbutton.gif");
	tasterEin = new ImageIcon(System.getProperty("user.dir") + "\\pics\\einbutton.gif");
	MediaTracker mt = new MediaTracker(this);
	mt.addImage(hintergrundBild, 0);
        mt.addImage(rotor1, 0);
        mt.addImage(rotor2, 0);
        try { mt.waitForAll();}  
	catch (InterruptedException e) {}
	
	panelHMI = new JPanel();
	panelHMI.setLayout(new BorderLayout());
	panelHMI.setBackground(Color.GRAY);
	panelHMI.setBounds(10, 10, hintergrundBild.getWidth(this), hintergrundBild.getHeight(this));
	panelHMI.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
                p = new BildPanel(hintergrundBild, rotor2);  // hier wird das hintergrundbild dargestellt
	p.setBounds(10,10,200,200);
	
	schalter = new JankSchalter("EinAusSchalter", "Style1", buttonAus, 5, "Times New Roman", 12);
	schalter.setLocation(hintergrundBild.getWidth(this)-200, hintergrundBild.getHeight(this)-180);
	schalter.addActionListener(new GUIControl(schalter, buttonAus, buttonEin));
        
        taster = new JankSchalter("Taster", "Style1", tasterAus, 5, "Times New Roman", 12);
	taster.setLocation(hintergrundBild.getWidth(this)-300, hintergrundBild.getHeight(this)-180);
        taster.addMouseListener(new GUIControl(taster, tasterAus, tasterEin)); 
	
	button1 = new JButton("Test");
	button1.setLocation(10,10);
	button1.setSize(80, 20);
	button1.addActionListener(new GUIControl(schalter, buttonAus, buttonEin));
        Thread th = new Thread();
        th.start();
        
     	add(panelHMI);
	panelHMI.add(schalter);
        panelHMI.add(taster);
	panelHMI.add(button1);
 	panelHMI.add(p); // hier wird das hintergrundBild zu panelHMI hinzugefügt
        
        rotor = new RotorDrehung(p, rotor1, rotor2, panelHMI);  // hier möchte ich eben die Klasse                    
                                                                                          //RotorDrehung aufrufen, um den Thread für die   
                                                                                          //abwechselnde Darstellung von rotor1 und rotor2 zu 
                                                                                          //erreichen
        rotor.start();
	}
    
    public static void main(String args[]) 
	{
	MainFrame mainFrame = new MainFrame();
	mainFrame.setLocation(120, 20);
	mainFrame.setSize(800, 700);
	mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	mainFrame.setLayout(null);
	mainFrame.setAlwaysOnTop(true);
	mainFrame.setVisible(true);
	}  
}

//Klasse zum Anzeigen der Images
class BildPanel extends JPanel {
    private Image hintergrundBild;
    private Image rotor;
 
    public BildPanel(Image hintergrundBild, Image rotor)
	{
	this.hintergrundBild = hintergrundBild;
        this.rotor = rotor;
	}
     public BildPanel(Image rotor)
	{
        this.rotor = rotor;
	}
     public void setRotor(Image rotor)    
        {
         System.out.println("in setrotor");
        this.rotor = rotor; 
        repaint();
        }
    public void paintComponent(Graphics g) 
	{
        System.out.println("in paint");
        super.paintComponent(g);
	g.drawImage(hintergrundBild,0,0,getWidth(),getHeight(), this); 
        g.drawImage(rotor,288,388,this); 
	}
}

//Klasse zur abwechselden Darstellung zweier Images auf dem Panel panelHMI
class RotorDrehung extends Thread {
        private JPanel p;
        private JPanel panelHMI;
        private Image rotor1;
        private Image rotor2;
        private BildPanel bildPanel = new BildPanel(rotor2);
        
        public RotorDrehung(JPanel p, Image rotor1, Image rotor2, JPanel panelHMI)
            {
            this.p = p;
            this.panelHMI = panelHMI;
            this.rotor1 = rotor1;
            this.rotor2 = rotor2;
            }
    
        public void run() 
            {
            try {
                while (true)
                    {
                    Thread.sleep(3000);
                    bildPanel.setRotor(rotor1);  // hier soll eben irgendwie das Image rotor1 an die Klasse BildPanel gegeben werden und auf meinem panelHMI dargestellt werden -> das funktioniert aber nicht, vielleicht hat da jemand eine Idee,
                    bildPanel.repaint();
                    Thread.sleep(3000);
                    bildPanel.setRotor(rotor2); // hier dann rotor2
                    bildPanel.repaint();
                    }
                }
            catch (Exception th) 
                {
                System.out.println("Fehler: " + th);
                }
            }
}
 

Marco13

Top Contributor
In "RotorDrehung" hast du ein BildPanel erstellt. In diesem BildPanel wird das Bild geändert. Das BildPanel, das du dort erstellst, ist aber ein anderes BildPanel als das, das in der Hauptklasse erstellt (und angezeigt) wird.

Du musst das BildPanel, das du in der Hauptklasse erstellst, an RotorDrehung weiterreichen.

Sinngemäß (!) so:

Code:
// diese Klasse ist meine Hauptklasse, in dieser wird das hintergrundBild auf dem JPanel dargestellt

import java.awt.*;
import javax.swing.*;


public class MainFrame2 extends JFrame {
    private Image hintergrundBild;
    private Image rotor1;
    private Image rotor2;
    private JToggleButton schalter;
    private JToggleButton taster;
    private JButton button1;
    private ImageIcon buttonAus;
    private ImageIcon buttonEin;
    private ImageIcon tasterAus;
    private ImageIcon tasterEin;
    private JLabel label;
    private BildPanel p;
    private JPanel panelHMI;
    private RotorDrehung rotor;

    public MainFrame2()
   {
   super("MainFrame");
   hintergrundBild = getToolkit().getImage("back.jpg");
        rotor1 = getToolkit().getImage("bildA.jpg");
        rotor2 = getToolkit().getImage("bildB.jpg");

        buttonAus = new ImageIcon(System.getProperty("user.dir") + "\\pics\\aus.gif");
   buttonEin = new ImageIcon(System.getProperty("user.dir") + "\\pics\\ein.gif");
        tasterAus = new ImageIcon(System.getProperty("user.dir") + "\\pics\\ausbutton.gif");
   tasterEin = new ImageIcon(System.getProperty("user.dir") + "\\pics\\einbutton.gif");

   MediaTracker mt = new MediaTracker(this);
   mt.addImage(hintergrundBild, 0);
        mt.addImage(rotor1, 0);
        mt.addImage(rotor2, 0);
        try { mt.waitForAll();}
   catch (InterruptedException e) {}

   panelHMI = new JPanel();
   panelHMI.setLayout(new BorderLayout());
   panelHMI.setBackground(Color.GRAY);
   panelHMI.setBounds(10, 10, hintergrundBild.getWidth(this), hintergrundBild.getHeight(this));
   panelHMI.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
                p = new BildPanel(hintergrundBild, rotor2);  // hier wird das hintergrundbild dargestellt
   p.setBounds(10,10,200,200);

   schalter = new JToggleButton("EinAusSchalter");
   schalter.setLocation(hintergrundBild.getWidth(this)-200, hintergrundBild.getHeight(this)-180);
   //schalter.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) {} });

        taster = new JToggleButton("Taster");
   taster.setLocation(hintergrundBild.getWidth(this)-300, hintergrundBild.getHeight(this)-180);
   //     taster.addMouseListener(new GUIControl(taster, tasterAus, tasterEin));

   button1 = new JButton("Test");
   button1.setLocation(10,10);
   button1.setSize(80, 20);
   //button1.addActionListener(new GUIControl(schalter, buttonAus, buttonEin));
        Thread th = new Thread();
        th.start();

        add(panelHMI);
   panelHMI.add(schalter);
        panelHMI.add(taster);
   panelHMI.add(button1);
   panelHMI.add(p); // hier wird das hintergrundBild zu panelHMI hinzugefügt

        rotor = new RotorDrehung(p, rotor1, rotor2, panelHMI);  // hier möchte ich eben die Klasse
                                                                                          //RotorDrehung aufrufen, um den Thread für die
                                                                                          //abwechselnde Darstellung von rotor1 und rotor2 zu
                                                                                          //erreichen
        rotor.start();
   }

    public static void main(String args[])
   {
   MainFrame2 mainFrame = new MainFrame2();
   mainFrame.setLocation(120, 20);
   mainFrame.setSize(800, 700);
   mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   mainFrame.setLayout(null);
   mainFrame.setAlwaysOnTop(true);
   mainFrame.setVisible(true);
   }
}

//Klasse zum Anzeigen der Images
class BildPanel extends JPanel {
    private Image hintergrundBild;
    private Image rotor;

    public BildPanel(Image hintergrundBild, Image rotor)
   {
   this.hintergrundBild = hintergrundBild;
        this.rotor = rotor;
   }
     public BildPanel(Image rotor)
   {
        this.rotor = rotor;
   }
     public void setRotor(Image rotor)
        {
         System.out.println("in setrotor "+rotor);
        this.rotor = rotor;
        repaint();
        }
    public void paintComponent(Graphics g)
   {
        System.out.println("in paint");
        super.paintComponent(g);
        if (hintergrundBild != null)
        g.drawImage(hintergrundBild,0,0,getWidth(),getHeight(), this);

			if (rotor != null)        g.drawImage(rotor,288,388,this);
   }
}

//Klasse zur abwechselden Darstellung zweier Images auf dem Panel panelHMI
class RotorDrehung extends Thread {
        private BildPanel bildPanel;
        private JPanel panelHMI;
        private Image rotor1;
        private Image rotor2;


		public RotorDrehung(BildPanel p, Image rotor1, Image rotor2, JPanel panelHMI)
            {
            this.bildPanel = p;
            this.panelHMI = panelHMI;
            this.rotor1 = rotor1;
            this.rotor2 = rotor2;
            }

        public void run()
            {
            try {
                while (true)
                    {
                    Thread.sleep(300);
                    bildPanel.setRotor(rotor1);  // hier soll eben irgendwie das Image rotor1 an die Klasse BildPanel gegeben werden und auf meinem panelHMI dargestellt werden -> das funktioniert aber nicht, vielleicht hat da jemand eine Idee,
                    bildPanel.repaint();
                    Thread.sleep(300);
                    bildPanel.setRotor(rotor2); // hier dann rotor2
                    bildPanel.repaint();
                    }
                }
            catch (Exception th)
                {
                System.out.println("Fehler: " + th);
                }
            }
}
 

PollerJava

Top Contributor
Hallo ,

vielen Dank Marko für deine Hilfe, jetzt dreht sich der Rotor bei mir.
Nur habe ich jetzt das Problem, dass die Button verschwinden, wenn das Image rotor1 statt dem Image rotor2 dargestellt wird und umgekehrt natürlich auch. Nur wenn ich mit der Maus drüber fahre, dann sind die Buttons wieder da, aber nur so lange, bis das das Bild wieder wechselt.
Kann ich da irgendwas machen, so dass ich das so machen kann, dass die Buttons immer sichtbar sind?

Vielen cielen Dank!!

lg Stefan
 

Marco13

Top Contributor
Schnell gesagt und schnell gemacht:
super.paintComponent(g)
erst aufrufen, nachdem alle Images gezeichnet wurden...
 

PollerJava

Top Contributor
Hallo,

[Hallo Marco, ich habs erst jetzt gelesen, wo soll ich g.paintComponents() hintun? und "nachdem" alle Images gezeichnet wurden -> das ist mir auch nicht ganz klar -> ich zeichne ja immer meinen Rotor (rotor1-4)
-> vielen Dank für deine Hilfe!!!]
unten habe ich nochmal meine Code gepostet, Se funktioniert jetzt, dass rotor1 bis rotor4 abwechselnd dargestellt werden und somit wie eine Drehung aussieht.
Meine Probleme habe ich mit der darstellung der Buttons, wei oben schon geschrieben, ich hab auch probiert, wie mir oben geschrieben wurde, die JButton auf ein eigenes JPanel zu geben aber es will einfach nicht funktionieren.
Entweder es wird das hintergrundBild dargestellt oder die JButton. Das Problem, schätze ich mal, liegt in der ersten Klasse aber ich weiß nicht wie ich das Lösen kann.
Vielleicht kann mir jemand helfen, ich wäre sehr dankbar dafür

lg und vielen DANK für eure Antworten.

lg
Stefan




Code:
public class MainFrame extends JFrame  {    
    private Image hintergrundBild;
    private Image rotor1;
    private Image rotor2;
    private Image rotor3;
    private Image rotor4;
    private JankSchalter schalter;
    private JankSchalter taster;
    private JButton button1;
    private ImageIcon buttonAus;
    private ImageIcon buttonEin; 
    private ImageIcon tasterAus;
    private ImageIcon tasterEin;
    private JLabel label;
    private BildPanel p; 
    private JPanel panelHMI;
    private RotorDrehung rotor;
    
    public MainFrame() 
	{
	super("MainFrame");
	hintergrundBild = getToolkit().getImage(System.getProperty("user.dir") + "\\pics\\hintergrundBild.png");
        rotor1 = getToolkit().getImage(System.getProperty("user.dir") + "\\pics\\rotor1.png");
        rotor2 = getToolkit().getImage(System.getProperty("user.dir") + "\\pics\\rotor2.png");
        rotor3 = getToolkit().getImage(System.getProperty("user.dir") + "\\pics\\rotor3.png");
        rotor4 = getToolkit().getImage(System.getProperty("user.dir") + "\\pics\\rotor4.png");
        buttonAus = new ImageIcon(System.getProperty("user.dir") + "\\pics\\aus.gif");
	buttonEin = new ImageIcon(System.getProperty("user.dir") + "\\pics\\ein.gif");
        tasterAus = new ImageIcon(System.getProperty("user.dir") + "\\pics\\ausbutton.gif");
	tasterEin = new ImageIcon(System.getProperty("user.dir") + "\\pics\\einbutton.gif");
	MediaTracker mt = new MediaTracker(this);
	mt.addImage(hintergrundBild, 0);
        mt.addImage(rotor1, 0);
        mt.addImage(rotor2, 0);
        mt.addImage(rotor3, 0);
        try { mt.waitForAll();}  
	catch (InterruptedException e) {}
	
	panelHMI = new JPanel();
	panelHMI.setLayout(new BorderLayout());    //hier liegt wahrscheinlich das Problem
	panelHMI.setBackground(Color.GRAY);
	panelHMI.setBounds(10, 10, hintergrundBild.getWidth(this), hintergrundBild.getHeight(this));
	panelHMI.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
	
	schalter = new JankSchalter("EinAusSchalter", "Style1", buttonAus, 5, "Times New Roman", 12);
	schalter.setLocation(hintergrundBild.getWidth(this)-200, hintergrundBild.getHeight(this)-180);
	schalter.addActionListener(new GUIControl(schalter, buttonAus, buttonEin));

        taster = new JankSchalter("Taster", "Style1", tasterAus, 5, "Times New Roman", 12);
	taster.setLocation(hintergrundBild.getWidth(this)-300, hintergrundBild.getHeight(this)-180);
        taster.addMouseListener(new GUIControl(taster, tasterAus, tasterEin)); 
	
	button1 = new JButton("Test");
	button1.setLocation(10,10);
	button1.setSize(80, 20);
	button1.addActionListener(new GUIControl(schalter, buttonAus, buttonEin));
        
        p = new BildPanel(hintergrundBild, rotor2);
	p.setBounds(10,10,200,200);

  	add(panelHMI);
	panelHMI.add(schalter); //hier wird der schalter auf das Panel hinzugefügt
        panelHMI.add(taster); //hier der Taster
	panelHMI.add(button1);  // hier der Button
	panelHMI.add(p);  // hier wird das Hintergrundbild hinzugefügt
        
        rotor = new RotorDrehung(p, rotor1, rotor2, rotor3, rotor4, panelHMI);   
        rotor.start();  // hier wird der Thread gestartet um den Rotor zu drehen
	}
    
    public static void main(String args[]) 
	{
	MainFrame mainFrame = new MainFrame();
	mainFrame.setLocation(120, 20);
	mainFrame.setSize(800, 700);
	mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	mainFrame.setLayout(null);
	mainFrame.setAlwaysOnTop(true);
	mainFrame.setVisible(true);
	}  
}

class BildPanel extends JPanel { 
    private Image hintergrundBild; 
    private Image rotor; 
    private JankSchalter schalter;
    private JankSchalter taster;
    private JButton button1;
    private JPanel panelHMI;

    public BildPanel(Image hintergrundBild, Image rotor) 
        { 
        this.hintergrundBild = hintergrundBild; 
        this.rotor = rotor; 
        this.schalter = schalter;
        this.taster = taster;
        this.button1 = button1;
        this.panelHMI = panelHMI;
        } 
    public BildPanel(Image rotor) 
        { 
        this.rotor = rotor; 
        } 
    public void setRotor(Image rotor) 
        { 
        this.rotor = rotor; 
        repaint(); 
        } 
    public void paintComponent(Graphics g) 
        {  
        super.paintComponent(g); 
        if (hintergrundBild != null) 
            g.drawImage(hintergrundBild,0,0,getWidth(),getHeight(), this); 
        if (rotor != null)        
            g.drawImage(rotor,288,388,this); 
        } 
} 


class RotorDrehung extends Thread { 
      private BildPanel bildPanel; 
      private JPanel panelHMI; 
      private Image rotor1; 
      private Image rotor2; 
      private Image rotor3;
      private Image rotor4;
      
      public RotorDrehung(BildPanel p, Image rotor1, Image rotor2, Image rotor3, Image rotor4, JPanel panelHMI) 
            { 
            this.bildPanel = p; 
            this.panelHMI = panelHMI; 
            this.rotor1 = rotor1; 
            this.rotor2 = rotor2;
            this.rotor3 = rotor3;
            this.rotor4 = rotor4; 
            } 

      public void run() 
         { 
         try { 
              while (true) 
                  { 
                  Thread.sleep(70); 
                  bildPanel.setRotor(rotor1);   
                  bildPanel.repaint(); 
                  Thread.sleep(70); 
                  bildPanel.setRotor(rotor3); 
                  bildPanel.repaint(); 
                  Thread.sleep(70); 
                  bildPanel.setRotor(rotor2); 
                  bildPanel.repaint();
                  Thread.sleep(70); 
                  bildPanel.setRotor(rotor4); 
                  bildPanel.repaint();
                } 
             } 
         catch (Exception th) 
             { 
             System.out.println("Fehler: " + th); 
             } 
         } 
}
 

PollerJava

Top Contributor
Kann mir bei meinem Problem oben vielleicht noch jemand helfen, ich bekomms eichfach nicht hin.
Wäre euch sehr dankbar.

Vielen Dank und lg
 

Marco13

Top Contributor
Ach so ja sorry - da hatte Fatal Error dann doch eher recht. (Ich dachte, die Buttons liegen in dem panel, in dem auch die Bilder gezeichnet werden). Die Struktur (also WELCHES Panel WO Liegt) ist nicht ganz klar - soweit ich das sehe, verwendest du ein BorderLayout und gibts trotzdem irgendwelche Bounds an (nach einem Ändern der Fenstergröße sind diese Bounds hinfällig). Du mußt schon sicherstellen, dass nicht zwei Componentes an den gleichen Platz gezeichnet werden sollen.

Eine Mgöglichkeit wäre, statt des
panelHMI.setLayout(new BorderLayout()); //hier liegt wahrscheinlich das Problem
ein
panelHMI.setLayout(null);
zu verwenden - dann kannst du alle darin enthaltenen Komponenten frei Platzieren. Aber das macht meistens keinen Sinn - eigentlich sollte man das, was man erreichen will, durch ein "geschicktes" Layout erreichen können.
 

PollerJava

Top Contributor
Ja das hab ich schon Probiert und ich würde auch genau das null- Layout brauchen da ich wirklich alle Elemente frei plazieren muss, nur wenn ich das NullLayout verwende, dann isn die Button nur beim Starten kurz zu sehen und dann gar nicht mehr - nicht einmal, wenn ich mit der Maus über die Buttons fahre.
Wie könnte ich das noch lösen.
Hast du da noch eine Tipp für mich?

lg und vielen DANK.

lg
 

Marco13

Top Contributor
PollerJava hat gesagt.:
ich würde auch genau das null- Layout brauchen da ich wirklich alle Elemente frei plazieren muss,
Das bezweifle ich mal :wink: Aber für einige der buttons setzt du nur die Position (Location) und nicht dir Größe. Vielleicht liegt's daran? Wenn nicht, werde ich das bei Gelegenheit mal testen - dazu aber den JankButton durch einen einfachen JToggleButton ersetzen, falls das OK ist....
 

PollerJava

Top Contributor
Ja super, vielen Dank,

Ich brauch das Nulllayout da ich alle Komponenten selber positionieren will und wenn das Fenster kleiner oder größer gemacht wird (mir ist die Problematik klar), dann positionier ich die Komponenten neu.
Ich programmiere nämlich ein Panel (eben das panelHMI), welches ich dann in verschiedenen Applikationen verwenden kann.
Vielen DANK für deine Hilfe
JankButton ist eh ein Button, den ich nach meinen Vorstellungen gemacht habe.

lg
 

Marco13

Top Contributor
Naja. Wenn man nicht
bildPanel.repaint()
aufruft, sondern
panelHMI.repaint()
dann funktioniert es erstmal, aber das ist reiner Zufall. Es bewirkt nur, dass nicht nur das BildPanel neu gezeichnet wird, sondern auch der Button, der ansonsten "hinter dem neu gezeichneten BildPanel verschwindet". Welche Component man dann sieht, hängt davon ab, in welcher Reihenfolge sie hinzugefügt wurden.

Ich weiß nicht genau, was das am Ende werden soll, und was du da genau machen willst, aber wenn du es vernünftig machen willst, dann mach' es anders als jetzt!

Code:
import java.awt.*;
import javax.swing.*;

public class MainFrame3 extends JFrame  {
    private Image hintergrundBild;
    private Image rotor1;
    private Image rotor2;
    private Image rotor3;
    private Image rotor4;
    private JToggleButton schalter;
    private JToggleButton taster;
    private JButton button1;
    private ImageIcon buttonAus;
    private ImageIcon buttonEin;
    private ImageIcon tasterAus;
    private ImageIcon tasterEin;
    private JLabel label;
    private BildPanel p;
    private JPanel panelHMI;
    private RotorDrehung rotor;

    public MainFrame3()
   {
   super("MainFrame");
   hintergrundBild = getToolkit().getImage("back.jpg");
        rotor1 = getToolkit().getImage("bildA.jpg");
        rotor2 = getToolkit().getImage("bildB.jpg");
        rotor3 = getToolkit().getImage("bildA.jpg");
        rotor4 = getToolkit().getImage("bildB.jpg");


        buttonAus = new ImageIcon(System.getProperty("user.dir") + "\\pics\\aus.gif");
   buttonEin = new ImageIcon(System.getProperty("user.dir") + "\\pics\\ein.gif");
        tasterAus = new ImageIcon(System.getProperty("user.dir") + "\\pics\\ausbutton.gif");
   tasterEin = new ImageIcon(System.getProperty("user.dir") + "\\pics\\einbutton.gif");
   MediaTracker mt = new MediaTracker(this);
   mt.addImage(hintergrundBild, 0);
        mt.addImage(rotor1, 0);
        mt.addImage(rotor2, 0);
        mt.addImage(rotor3, 0);
        try { mt.waitForAll();}
   catch (InterruptedException e) {}

   panelHMI = new JPanel();
   panelHMI.setLayout(null); //new BorderLayout());    //hier liegt wahrscheinlich das Problem
   panelHMI.setBackground(Color.GRAY);
   panelHMI.setBounds(10, 10, hintergrundBild.getWidth(this), hintergrundBild.getHeight(this));
   panelHMI.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));

   schalter = new JToggleButton("EinAusSchalter");
   schalter.setLocation(hintergrundBild.getWidth(this)-200, hintergrundBild.getHeight(this)-180);
   schalter.setSize(50,20);
   //schalter.addActionListener(new GUIControl(schalter, buttonAus, buttonEin));

        taster = new JToggleButton("Taster");
   taster.setLocation(hintergrundBild.getWidth(this)-300, hintergrundBild.getHeight(this)-180);
   taster.setSize(50,20);
        //taster.addMouseListener(new GUIControl(taster, tasterAus, tasterEin));

   button1 = new JButton("Test");
   button1.setLocation(10,10);
   button1.setSize(80, 20);
   //button1.addActionListener(new GUIControl(schalter, buttonAus, buttonEin));

        p = new BildPanel(hintergrundBild, rotor2);
   p.setBounds(10,10,800,800);

     add(panelHMI);
   panelHMI.add(schalter); //hier wird der schalter auf das Panel hinzugefügt
        panelHMI.add(taster); //hier der Taster
   panelHMI.add(button1);  // hier der Button
   panelHMI.add(p);  // hier wird das Hintergrundbild hinzugefügt

        rotor = new RotorDrehung(p, rotor1, rotor2, rotor3, rotor4, panelHMI);
        rotor.start();  // hier wird der Thread gestartet um den Rotor zu drehen
   }

    public static void main(String args[])
   {
   MainFrame3 mainFrame = new MainFrame3();
   mainFrame.setLocation(120, 20);
   mainFrame.setSize(800, 700);
   mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   mainFrame.setLayout(new GridLayout(1,1));
   mainFrame.setAlwaysOnTop(true);
   mainFrame.setVisible(true);
   }
}

class BildPanel extends JPanel {
    private Image hintergrundBild;
    private Image rotor;
    private JToggleButton schalter;
    private JToggleButton taster;
    private JButton button1;
    private JPanel panelHMI;

    public BildPanel(Image hintergrundBild, Image rotor)
        {
        this.hintergrundBild = hintergrundBild;
        this.rotor = rotor;
        this.schalter = schalter;
        this.taster = taster;
        this.button1 = button1;
        this.panelHMI = panelHMI;
        }
    public BildPanel(Image rotor)
        {
        this.rotor = rotor;
        }
    public void setRotor(Image rotor)
        {
        this.rotor = rotor;
        repaint();
        }
    public void paintComponent(Graphics g)
        {
        super.paintComponent(g);
        if (hintergrundBild != null)
            g.drawImage(hintergrundBild,0,0,getWidth(),getHeight(), this);
        if (rotor != null)
            g.drawImage(rotor,288,388,this);
        }
}


class RotorDrehung extends Thread {
      private BildPanel bildPanel;
      private JPanel panelHMI;
      private Image rotor1;
      private Image rotor2;
      private Image rotor3;
      private Image rotor4;

      public RotorDrehung(BildPanel p, Image rotor1, Image rotor2, Image rotor3, Image rotor4, JPanel panelHMI)
            {
            this.bildPanel = p;
            this.panelHMI = panelHMI;
            this.rotor1 = rotor1;
            this.rotor2 = rotor2;
            this.rotor3 = rotor3;
            this.rotor4 = rotor4;
            }

      public void run()
         {
         try {
              while (true)
                  {
                  Thread.sleep(70);
                  bildPanel.setRotor(rotor1);
                  panelHMI.repaint();
                  Thread.sleep(70);
                  bildPanel.setRotor(rotor3);
                  panelHMI.repaint();
                  Thread.sleep(70);
                  bildPanel.setRotor(rotor2);
                  panelHMI.repaint();
                  Thread.sleep(70);
                  bildPanel.setRotor(rotor4);
                  panelHMI.repaint();
                }
             }
         catch (Exception th)
             {
             System.out.println("Fehler: " + th);
             }
         }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Datentypen Cache Images Heap Space Error Allgemeine Java-Themen 7
C images einbinden Allgemeine Java-Themen 7
X Images painten - Was ist schneller? Allgemeine Java-Themen 2
Kenan89 Schnelleres Einlesen von Images Allgemeine Java-Themen 6
D 2D-Grafik Funktionierende .jar datei mit Images (jpg) erzeugen Allgemeine Java-Themen 2
J iText und images Allgemeine Java-Themen 6
MQue Images für Buttons Allgemeine Java-Themen 5
E aktualisieren eines Images Allgemeine Java-Themen 6
E 2 Images auf einem JFrame Allgemeine Java-Themen 8
A Pufferung von Images Allgemeine Java-Themen 7
L Label mit Images Allgemeine Java-Themen 20
F Dateigröße eines entfernen Images ermitteln Allgemeine Java-Themen 3
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
Neoline Methoden Zwei Arrays abwechselnd zusammenführen Allgemeine Java-Themen 15
N 2 Arrays abwechselnd verbinden Allgemeine Java-Themen 13
Iron Monkey Spalte der Tabelle abwechselnd färben Allgemeine Java-Themen 8
M run()-Code zweier Threads strikt abwechselnd ausführen Allgemeine Java-Themen 7
berserkerdq2 Weiß jemand wie ich im Scenebuilder das Fenster so darstellen kann, dass beim Vollbildmodus die Objekte so angezeigt werden? Allgemeine Java-Themen 1
M Wie könnte man den Codeschnipsel rekursiv darstellen? Allgemeine Java-Themen 1
S Neues Objekt darstellen Allgemeine Java-Themen 4
J Code Page characters darstellen Allgemeine Java-Themen 12
C Symbol für Gaußsche Summenformel in Kommentarzeile darstellen Allgemeine Java-Themen 3
E Swing Array mit Bildern in GUI darstellen Allgemeine Java-Themen 2
A Kalender darstellen Allgemeine Java-Themen 1
D JPanel in Mail darstellen Allgemeine Java-Themen 30
T 4x4 Tabelle als Bitboard darstellen Allgemeine Java-Themen 5
KilledByCheese 2D-Grafik 2D-Array als Gitter darstellen Allgemeine Java-Themen 2
D AWT Tiff-Datei darstellen bzw in darstellbares Format umwandeln Allgemeine Java-Themen 2
L Best Practice Log Dateien analysieren und eventuell passende Daten am Chart darstellen Allgemeine Java-Themen 1
S Text in mehreren Sprachen korrekt darstellen? Wie waehle ich die Fonts aus..? Allgemeine Java-Themen 0
K AWT Aus einer Datei die Koordinaten Angaben herauslesen und dreidimensional darstellen Allgemeine Java-Themen 2
M DYGraphen darstellen... fehlende Einstellungen Allgemeine Java-Themen 1
L Zwei Files miteinander vergleichen und Grafisch darstellen Allgemeine Java-Themen 1
M Temperaturverlauf in Farbe darstellen Allgemeine Java-Themen 8
J [JPA] Overlaps mit JPQL darstellen Allgemeine Java-Themen 2
R Hierarchie mit HashMap darstellen Allgemeine Java-Themen 19
K Java Operatoren mit Strings darstellen Allgemeine Java-Themen 8
Crashbreaker RCP-View Image öffnen und darstellen Allgemeine Java-Themen 7
A Excel Tabelle in JFrame darstellen Allgemeine Java-Themen 6
K Beziehung darstellen Allgemeine Java-Themen 4
B ASCII als 8-bit Binärstring darstellen Allgemeine Java-Themen 5
J Hex Werte in Bitmap Raster darstellen Allgemeine Java-Themen 16
0 2D-Grafik Wertegruppen darstellen Allgemeine Java-Themen 2
B Excel Datei in einem Java Programm mit GUI darstellen Allgemeine Java-Themen 9
C BigInteger in Exponentialschreibweise darstellen Allgemeine Java-Themen 2
S Java-Klassen Abhaengigkeiten grafisch darstellen? Allgemeine Java-Themen 4
R sHotEqn --> LaTeX-Code darstellen Allgemeine Java-Themen 8
E Wie Hexzahl als String darstellen? Allgemeine Java-Themen 4
S suche library die diagramme darstellen kann Allgemeine Java-Themen 2
G Kommazahlen mit Komma in Textfeld darstellen Allgemeine Java-Themen 11
A Text durchgestrichen in einer Tabelle darstellen Allgemeine Java-Themen 2
U PGM darstellen Allgemeine Java-Themen 5
P Chart, Kennlinien darstellen Allgemeine Java-Themen 3
G Diagramm darstellen mit Javascript Allgemeine Java-Themen 41
E Image auf einem JLabel darstellen Allgemeine Java-Themen 3
G diagramm um Zustände darstellen zu können Allgemeine Java-Themen 5
Y Zeichen verschiedenfarbig in einer JTextPane darstellen Allgemeine Java-Themen 17
E Spezielle Buchstaben darstellen? Allgemeine Java-Themen 7
R Bild downloaden und darstellen lassen Allgemeine Java-Themen 5
D Mathematische Funktion grafisch in Java darstellen Allgemeine Java-Themen 2
L Spielerei: Frame rekursiv darstellen Allgemeine Java-Themen 3
G Mathematische Zeichen darstellen Allgemeine Java-Themen 6
thE_29 Wie hex Zahlen darstellen Allgemeine Java-Themen 3
K Vektoren darstellen. Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben