Durch Klick auf den JButton will ich die Farbe ändern?

Status
Nicht offen für weitere Antworten.

estartu

Mitglied
Hallo,
bin neu im jogl programmieren und hätte da mal eine Frage.

Ich habe hier ein kleines swing programm mit Border-Layout.
Nach Borderlayout.West habe ich einen JButton gelegt.

In BorderLayout.Center wird mit folgendem code mein Würfel in Rot gezeichnet.


public void display(GLAutoDrawable arg0)
{
GL gl = arg0.getGL();
GLU glu = new GLU();
GLUT glut = new GLUT();
glu.gluLookAt(0, 12, 19,0, 0, 0, 0, 1, 0);
gl.glColor3f(1.0f,0.0f,0.0f); //rot
gl.glScalef (1.0f, 1.0f, 1.0f); // modeling transformation
glut.glutWireCube (3.0f);
}

Wie kriege ich es hin das wenn ich den JButton anklicke sich die Farbe des Würfels von Rot nach Blau ändert.

Einen ActionListener für den JButton gibt es natürlich und der funktioniert auch.

estartu
 

merlin2

Top Contributor
Mit einem boolean festlegen, ob rot oder blau gezeichnet werden soll. Diesen boolean fragst du in display() ab, setzt die Farbe entsprechend und beim Klick auf den Button änderst du den boolean eben. Dann musst du nur noch dafür sorgen, dass display() aufgerufen wird.
 

estartu

Mitglied
Hallo merlin2,
das werde ich so mal probieren.
Aber wie soll ich denn dafür sorgen das display aufgerufen wird?
„public void display(GLAutoDrawable arg0)”
Woher bekomme ich denn GLAutoDrawable damit ich damit dann display aufrufen kann?

estartu
 

estartu

Mitglied
Hallo,
das habe ich auch auf deren Webseite gelesen aber das funktioniert bei mir nicht.
Hier mal mein Quelltext.
Ich habe ein paar System.out.pr… eingefügt um zu sehen ob das Programm richtig ausgeführt wird und das wird es auch.

Die Zeile System.out.println(„Bin in display“); zeigt an wann display aufgerufen wird.
Das passiert bei meinem Programm nur wenn ich das Fenster klein und wieder gross mache oder es verschiebe.
Ich kriege es nicht hin das diplay aufgerufen wird wenn ich auf den Button klicke um die Farbe zu ändern.
Ich muss das Fenster dann erst verschieben damit sich die Farbe der Grafik ändert.
Was mache ich denn falsch? Ich muss doch, wenn ich irgend einen Parameter geändert habe das Neuzeichnen der Grafik veranlassen können.

estartu

Code:
class joglFrame extends JFrame
{
	BeispielszeneView view;
	
    public joglFrame()
    {
        GLCapabilities glcaps = new GLCapabilities();
        GLCanvas canvas = new GLCanvas();
        view = new BeispielszeneView();
        canvas.addGLEventListener(view);
        setSize(2000,750);
        setTitle("Buttontest"); 
        setResizable(false);
        getContentPane().add(canvas,BorderLayout.CENTER);
        addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
        
                
        JButton jb1 = new JButton("JButton");
        jb1.addActionListener(new jb1Action());
        getContentPane().add(jb1,BorderLayout.WEST);

    }

    class jb1Action implements ActionListener
	{
		public void actionPerformed(ActionEvent ae)
		{
			System.out.println("Der Button wurde geklickt. Die Farben werden gewechselt und repaint wird aufgerufen.");
			view.farbe_1 = 1.0f; 
			view.farbe_2 = 0.0f; 
			repaint();
			view.neumalen(); //Es wird nochmal repaint aufgerufen
		}
	} 
}    



class BeispielszeneView extends JFrame implements GLEventListener
{
    
    float farbe_1 = 0.0f;
    float farbe_2 = 1.0f;
    
    public void init(GLAutoDrawable arg0)
    {
    	GL gl = arg0.getGL();
        GLU glu = new GLU();
        gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        setCamera(gl, glu);
        gl.glMatrixMode(GL.GL_MODELVIEW); 
    }
    private void setCamera(GL gl, GLU glu)
    {
    	int w = 500, h = 500;
        gl.glViewport(0, 0, w, h);
        gl.glMatrixMode(GL.GL_PROJECTION);
        gl.glLoadIdentity();
        glu.gluPerspective(50.0, 1, 2.0, 40.0);
    }

    public void display(GLAutoDrawable arg0)
    {
    	System.out.println("Bin in display");
    	
    	GL gl = arg0.getGL();
        GLU glu = new GLU();
        gl.glClear(GL.GL_COLOR_BUFFER_BIT);
    	
        gl.glColor3f(farbe_1,farbe_2,0.0f);
        
    	gl.glLoadIdentity();
        glu.gluLookAt(0, 12, 19,0, 0, 0, 0, 1, 0);
        gl.glTranslated(0, 1, 0); 
        drawField(gl, glu); 
    }
    
  
    public void neumalen()
    {
    	System.out.println("bin nun in neumalen und rufe nun auch repaint auf");
    	repaint();
    }
    
    public void drawField(GL gl, GLU glu)
    {
        	gl.glBegin(GL.GL_QUADS);
            gl.glVertex3f(-6.5f, -1.5f, -6.5f);
            gl.glVertex3f(-6.5f, -1.5f, 6.5f);
            gl.glVertex3f(6.5f, -1.5f, 6.5f);
            gl.glVertex3f(6.5f, -1.5f, -6.5f);
            gl.glEnd();
    }
    
    public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3,     int arg4)
    {
    }
    public void displayChanged(GLAutoDrawable arg0, boolean arg1, boolean     arg2)
    {
    }
}

public class ButtonTest
{
    public static void main(String[] args)
    {
        final joglFrame app = new joglFrame(); 
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                app.setVisible(true);
            }
        }); 
    }
}
 

merlin2

Top Contributor
Bitte mach mal was Ausführbares aus dem Code.

Ich glaube einfach, dass repaint nicht dafür sorgt, dass display aufgerufen wird.
 

merlin2

Top Contributor
Die Klasse Animator sorgt dafür, dass display so oft wie möglich aufgerufen wird.
Ist so zwar nicht ganz passend , aber vielleicht findest du ja den Quellcode?
 

estartu

Mitglied
Hallo.
Der code ist doch ausführbar. In der public class ButtonTest gibt es eine main.
Einfach in ein eclipse Projekt einfügen und schon läuft das Programm. (main klasse im eclipse Projekt entsprechend anpassen).
Ich habe Mittlerweilen herausgefunden an was es lag.
Ein „canvas.display()" in actionPerformed() einfügen und schon wird display nach einem klick auf den JButton ausgeführt und somit die Änderungen angezeigt.

estartu
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Zahlenwert durch Methode ersetzen Spiele- und Multimedia-Programmierung 1
D Iterieren durch einen Ordner mit Audiodateien und verketten eine andere Audiodatei Spiele- und Multimedia-Programmierung 17
A Spielfelder erstellen mit Jogl Java durch ein Koordinaten Array Spiele- und Multimedia-Programmierung 1
R Durch String Platform Game erstellen Spiele- und Multimedia-Programmierung 8
lord239123 JMonkey Schatten werden durch Terrain hindurch angezeigt Spiele- und Multimedia-Programmierung 1
R Mp3 Rating (POPM) durch JAudioTagger? Spiele- und Multimedia-Programmierung 2
M Objekte verschwinden durch Explosion Spiele- und Multimedia-Programmierung 2
B j3d Kamera Rotation durch Tastendruck Spiele- und Multimedia-Programmierung 12
I Framerate-Einbrüche durch Synchronisation Spiele- und Multimedia-Programmierung 12
E [JAVA3D] Schattenstrich durch die Szene Spiele- und Multimedia-Programmierung 4
N Zufallserzeugung durch KI Spiele- und Multimedia-Programmierung 23
H Grafik verschwindet durch Größenveränderung von GridBag Spiele- und Multimedia-Programmierung 5
S Hilfe: Ich sehe durch die ganze Api's nicht mehr durch! Spiele- und Multimedia-Programmierung 15
Fu3L Extreme Prozessorauslastung durch Hintergrundbild Spiele- und Multimedia-Programmierung 5
B Animation durch Button auslösen Spiele- und Multimedia-Programmierung 2
D Polygonsize durch das umliegende Reckteck verändern inJava2D Spiele- und Multimedia-Programmierung 6
S Fehlerhafte Darstellung durch Transparenz? Spiele- und Multimedia-Programmierung 8
A durch Objekte hindurchzoomen Spiele- und Multimedia-Programmierung 2
masta // thomas Kollisionsabfrage - inspiriert durch "pixelgenaue Kolli Spiele- und Multimedia-Programmierung 13
R Enorme Leistungseinbußen durch Alphakanäle Spiele- und Multimedia-Programmierung 3
I Vier gewinnt programmieren, Klick-Reihenfolge Spiele- und Multimedia-Programmierung 2
G [LibGDX] Button Klick Probleme Spiele- und Multimedia-Programmierung 1
P JOGL Button-klick-Problem Spiele- und Multimedia-Programmierung 2
B Problem : Button-Klick bewirkt nichts Spiele- und Multimedia-Programmierung 4
L klick auf ComboBox ohne ActionListener --> CPU ausgelaste Spiele- und Multimedia-Programmierung 13
S Behavior deaktivieren/aktivieren - erster Klick geht nicht Spiele- und Multimedia-Programmierung 2
K Klick in der nähe einer Strecke Spiele- und Multimedia-Programmierung 14
T Probleme mit JButton Spiele- und Multimedia-Programmierung 5
E Java3D Objekt skalieren per JSlider/JButton Spiele- und Multimedia-Programmierung 10

Ähnliche Java Themen

Neue Themen


Oben