JOGL Button-klick-Problem

Polli

Mitglied
Hallo alle zusammen,

ich habe ein kleines Problem, seit knapp zwei Tagen versuche ich mich an Jogl, bislangen mit mittelmäßigen Erfolg.
Ich habe an zwei Stellen ein Problem, evtl. könnt ihr mir ja dabei helfen, da ich gesehen habe, dass ihr schon ein Problem bezüglich Jogl gelöst habt.

Und zwar ist mein erstes Problem: Wenn ich auf den Button "Linien" klicke, soll eigentlich eine Linie vom Mittelpunkt zur rechten oberen Ecke führen, aber irgendwie klappt das nicht. Ich komme einfach nicht weiter, habt ihr eine Idee was ich da machen kann? Ich habe es schon mit repaint probiert, aber es lieferte nicht den gewünschten Erfolg.

Mein Zweites Problem ist, wenn ich das Fenster größer ziehe dann wird das Panel blau, also so dass alles was drauf ist nicht mehr sichtbar ist. Beim zweiten mal ziehen ist alles wieder da... Könnt ihr mir evtl. eine Lösung oder einen Tipp geben?

Danke für eure Hilfe :)

Hier mal mein Quellcode:

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import net.java.games.jogl.*;
import net.java.games.jogl.util.*;

public class Darstellung implements GLEventListener {
	int size_x = 800;
	int size_y = 600;
	JFrame frame;
	JMenuBar menuebar;
	JPanel toolbarPanel;
	GLCanvas panel1;
	GLCanvas panel2;
	JTabbedPane tabbedpane;
	JMenu fileMenue;
	JMenu helpMenue;
	JMenuItem neuItem;
	JMenuItem openItem;
	JMenuItem saveItem;
	JMenuItem helpItem;
	JMenuItem copyrightItem;
	GridBagLayout layout;
	JButton kreisButton;
	JButton eckButton;
	JButton linienButton;
	JButton punktButton;
	JButton ellipseButton;
	JButton kugelButton;
	JButton polygoneButton;
	JButton ellipsoidButton;
	GL gl;
	GLU glu;
	GLUT glut;

	public Darstellung() {
		Window();
	}

	public void Window() {
		frame = new JFrame("Architekten-Tool");
		frame.setSize(size_x, size_y);
		javax.swing.JPopupMenu.setDefaultLightWeightPopupEnabled(false); //MenuBar in den Vordergrund
		frame.setJMenuBar(MenueHilfe());
		compLayout();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

	public JMenuBar MenueHilfe() {
		menuebar = new JMenuBar();
		fileMenue = new JMenu("Datei");
		menuebar.add(fileMenue);
		fileMenue.add(neuItem = new JMenuItem("Neu"));
		fileMenue.add(openItem = new JMenuItem("Öffnen"));
		fileMenue.add(saveItem = new JMenuItem("Speichern"));
		helpMenue = new JMenu("Hilfe");
		menuebar.add(helpMenue);
		helpMenue.add(helpItem = new JMenuItem("Hilfe"));
		helpMenue.add(copyrightItem = new JMenuItem("Copyright"));

		return menuebar;
	}

	public JTabbedPane Tabbed() {
		panel1 = GLDrawableFactory.getFactory().createGLCanvas(
				new GLCapabilities());
		panel2 = GLDrawableFactory.getFactory().createGLCanvas(
				new GLCapabilities());
		
		panel1.addGLEventListener(this);
		tabbedpane = new JTabbedPane();
		tabbedpane.addTab("New 1", panel1);
		tabbedpane.addTab("New 2", panel2);
		return tabbedpane;
	}

	public JPanel Toolbar() {
		JPanel toolbarPanel = new JPanel();
		kreisButton = new JButton("Kreis");
		eckButton = new JButton("n-Eck");
		linienButton = new JButton("Linien");
		linienButton.addActionListener(new LinienKlick());
		punktButton = new JButton("Punkt");
		ellipseButton = new JButton("Ellipse");

		kugelButton = new JButton("Kugel");
		polygoneButton = new JButton("Polygone");
		ellipsoidButton = new JButton("Ellipsoid");

		toolbarPanel.setLayout(new GridLayout(8, 1));

		// 2D
		toolbarPanel.add(kreisButton);
		toolbarPanel.add(eckButton);
		toolbarPanel.add(linienButton);
		toolbarPanel.add(punktButton);
		toolbarPanel.add(ellipseButton);

		// 3D
		toolbarPanel.add(kugelButton);
		toolbarPanel.add(polygoneButton);
		toolbarPanel.add(ellipsoidButton);
		return toolbarPanel;
	}

	public void compLayout() {
		Container c = frame.getContentPane();

		layout = new GridBagLayout();
		c.setLayout(layout);

		// x y w h wx wy
		addComponent2(c, layout, Tabbed(), 0, 0, 10, 10, 0.1, 0.1);
		addComponent1(c, layout, Toolbar(), 10, 0, 2, 10, 0, 0);
	}

	static void addComponent1(Container cont, GridBagLayout gbl, Component c,
			int x, int y, int width, int height, double weightx, double weighty) {
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.fill = GridBagConstraints.VERTICAL;
		gbc.gridx = x;
		gbc.gridy = y;
		gbc.gridwidth = width;
		gbc.gridheight = height;
		gbc.weightx = weightx;
		gbc.weighty = weighty;
		gbl.setConstraints(c, gbc);
		cont.add(c);
	}

	static void addComponent2(Container cont, GridBagLayout gbl, Component c,
			int x, int y, int width, int height, double weightx, double weighty) {
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.fill = GridBagConstraints.BOTH;
		gbc.gridx = x;
		gbc.gridy = y;
		gbc.gridwidth = width;
		gbc.gridheight = height;
		gbc.weightx = weightx;
		gbc.weighty = weighty;
		gbl.setConstraints(c, gbc);
		cont.add(c);
	}

	@Override
	public void init(GLDrawable arg0) {
		// TODO Auto-generated method stub
		gl = arg0.getGL();
		glu = arg0.getGLU();
		glut = new GLUT();
		gl.glClearColor(1, 1, 1, 0); 
		
		System.out.println("init");
	}
	
	@Override
	public void display(GLDrawable arg0) {
		// TODO Auto-generated method stub
		gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
		
		gl.glColor3d(1, 0, 0);
		gl.glBegin(GL.GL_LINES);
			gl.glVertex3d(0, 0, 0);
			gl.glVertex3d(50, 0, 0);
		gl.glEnd();
		
		System.out.println("display");
	}

	@Override
	public void displayChanged(GLDrawable arg0, boolean arg1, boolean arg2) {
		// TODO Auto-generated method stub
	}

	@Override
	public void reshape(GLDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
		// TODO Auto-generated method stub
	}
	
	public class LinienKlick implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent arg0) {
			System.out.println("g "+ gl);
			System.out.println("Ich werde aufgerufen...");
			gl.glColor3d(1, 0, 0);
			gl.glBegin(GL.GL_LINES);
				gl.glVertex3d(0, 0, 0);
				gl.glVertex3d(50, 50, 0);
			gl.glEnd();
			panel1.display();
		}	
	}
	
	public static void main(String[] args) {
		Darstellung gui = new Darstellung();
	}
}


Ganz liebe Grüße,

Polli.
 

Marco13

Top Contributor
Genau wie man bei Swing nur in der paintComponent in das übergebene Graphics zeichnen darf, darf man bei JOGL nur in der display-Methode mit dem dort vom Drawable abzuholenden GL zeichnen.

Das Muster wäre demnach GANZ grob
Code:
private boolean zeichneLinie = false;

void display(...)
{
    if (zeichneLinie)
    { 
        // Zeichne sie
    }
}


void buttonKlick()
{
    zeichneLinie = true;
    repaint();
}
 
G

Guest2

Gast
Moin,

das entscheidende hat Marco ja schon gesagt.

Was mir allerdings noch aufgefallen ist:

1. Die von Dir verwendete JoGL Version ist ganz alt. Du solltest zumindest JoGL 1.1.1a nehmen. Das ist die letzte und aktuelle Version von JoGL1. Die gibt es hier: Index of /media/jogl/builds/archive/jsr-231-1.1.1a/

2. Wenn Du Swing und JoGL nutzt, solltest Du vermutlich lieber auf das GLCanvas verzichten und stattdessen zum GLJPanel greifen.

3. Da Du vermutlich mehr als eine Line zeichnen möchtest, musst Du Dir eine Datenstruktur ausdenken aus der heraus Du alle notwendigen Linien zeichnen kannst (wie bereits von Marco geschrieben: Dies darf nur innerhalb der display() geschehen). Neue Linien können dann z.B. innerhalb der actionPerformed() der Datenstruktur hinzugefügt werden.

4. Auch die display() sollte nie von Hand aufgerufen werden, sondern immer über einen (wie auch immer gearteten) Animator. (Bevor Du auf die Idee kommen solltest ;) )

Als kskb könnte das dann in etwa so aussehen (JoGL 1.1.1a):

Java:
package late.bluba;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.nio.FloatBuffer;
import java.util.Random;

import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLJPanel;
import javax.media.opengl.glu.GLU;
import javax.swing.JButton;
import javax.swing.JFrame;

import com.sun.opengl.util.Animator;
import com.sun.opengl.util.BufferUtil;

@SuppressWarnings("serial")
public class MyPanel extends GLJPanel implements GLEventListener {

    private static final int  MAXLINES = 1000;

    private final FloatBuffer va;

    private int               lines    = 0;

    private GL                gl;
    private GLU               glu;


    public MyPanel() {

        super();

        va = BufferUtil.newFloatBuffer(MAXLINES * 2 * 3);

        addGLEventListener(this);

    }


    @Override
    public void init(final GLAutoDrawable drawable) {

        gl = drawable.getGL();
        glu = new GLU();

        gl.glEnable(GL.GL_DEPTH_TEST);
        gl.glEnableClientState(GL.GL_VERTEX_ARRAY);

    }


    @Override
    public void display(final GLAutoDrawable drawable) {

        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

        gl.glLoadIdentity();
        gl.glTranslatef(0, 0, -5);

        synchronized (va) {

            va.rewind();
            gl.glVertexPointer(3, GL.GL_FLOAT, 0, va);
            gl.glDrawArrays(GL.GL_LINES, 0, lines * 2);

        }

    }


    @Override
    public void reshape(final GLAutoDrawable drawable, final int x, final int y, final int width, int height) {

        if (height <= 0)
            height = 1;

        gl.glMatrixMode(GL.GL_PROJECTION);
        gl.glLoadIdentity();
        glu.gluPerspective(45.0f, (float) width / (float) height, 1.0, 1000.0);
        gl.glMatrixMode(GL.GL_MODELVIEW);
        gl.glLoadIdentity();

    }


    public static void main(final String[] args) {

        final JFrame frame = new JFrame();
        final JButton button = new JButton();
        final Random random = new Random();
        final MyPanel canvas = new MyPanel();
        final Animator animator = new Animator(canvas);

        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(final ActionEvent e) {

                synchronized (canvas.va) {

                    for (int i = 0; i < 6; i++)
                        canvas.va.put(canvas.lines * 6 + i, random.nextFloat() - 0.5f);

                    canvas.lines++;
                }

            }
        });
        
        button.setText("new line");

        frame.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(final WindowEvent e) {

                new Thread(new Runnable() {
                    public void run() {

                        animator.stop();
                        System.exit(0);

                    }
                }).start();
            }
        });

        frame.getContentPane().setLayout(new BorderLayout());
        frame.getContentPane().add(canvas, BorderLayout.CENTER);
        frame.getContentPane().add(button, BorderLayout.SOUTH);

        frame.setSize(900, 500);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        animator.start();

    }


    @Override public void displayChanged(final GLAutoDrawable drawable, final boolean modeChanged, final boolean deviceChanged) { }

}

Gruß,
Fancy
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E JOGL kein zugriff auf manche methoden Spiele- und Multimedia-Programmierung 5
A Spielfelder erstellen mit Jogl Java durch ein Koordinaten Array Spiele- und Multimedia-Programmierung 1
M [JOGL] Maus über einem gezeichnetem Objekt abfragen? Spiele- und Multimedia-Programmierung 5
M [JOGL] eclipse export Runnable Jar - startet nicht Spiele- und Multimedia-Programmierung 3
D [JOGL] bibliothek aus jar laden Spiele- und Multimedia-Programmierung 3
A JOGL Shader Anfängerprobleme Spiele- und Multimedia-Programmierung 2
A JOGL FloatBuffer vs Buffers Spiele- und Multimedia-Programmierung 2
A JOGL glBindBuffer einmalig oder mehrmalig? Spiele- und Multimedia-Programmierung 3
A Aufbau einer JOGL Anwendung Spiele- und Multimedia-Programmierung 12
Z lwjgl oder jogl nutzen Spiele- und Multimedia-Programmierung 9
A Jogl-Projekt unter 32-Bit kompiliert und unter 64-Bit ausführen, geht das überhaubt ?? Spiele- und Multimedia-Programmierung 9
turing JOGL Cubes performant Spiele- und Multimedia-Programmierung 17
M JOGL Cubus mit Rand darstellen Spiele- und Multimedia-Programmierung 3
T JOGL 2D Objekte drehen rotate Spiele- und Multimedia-Programmierung 4
X JOGL - wie zum laufen bringen? Spiele- und Multimedia-Programmierung 2
M Schatten mit JOGL Spiele- und Multimedia-Programmierung 4
D [JOGL 2.0] Kleines Problem mit freier Flugsteuerung Spiele- und Multimedia-Programmierung 3
U [JOGL 1.1.1a]Kleines Problem mit Text Overlays: Spiele- und Multimedia-Programmierung 19
D [JOGL] Freibewegliche Lichtquelle im Raum Spiele- und Multimedia-Programmierung 4
H JOGL 2.0 jars fehlen Spiele- und Multimedia-Programmierung 8
R JOGL: glUniformLocation gibt immer -1 zurück Spiele- und Multimedia-Programmierung 4
BattleMaster246 Problem mit Jogl Spiele- und Multimedia-Programmierung 14
Mikescher [JOGL] Access restriction Spiele- und Multimedia-Programmierung 6
K jogl einbinden Spiele- und Multimedia-Programmierung 6
X JOGL - Textur auf Quad verzerrt Spiele- und Multimedia-Programmierung 2
X JOGL - 2D Sprite richtig platzieren Spiele- und Multimedia-Programmierung 4
T JOGL im OrthoMode und Texturen verfärben sich Spiele- und Multimedia-Programmierung 3
J JOGL konfigurieren / Windows 7 64-bit Spiele- und Multimedia-Programmierung 7
R JOGL polygon smooth Spiele- und Multimedia-Programmierung 20
J [JOGL] Kamera zentrieren über Achse Spiele- und Multimedia-Programmierung 4
BattleMaster246 Schussrichtung festlegen - JOGL Spiele- und Multimedia-Programmierung 8
BattleMaster246 Jogl Libs werden nicht geladen Spiele- und Multimedia-Programmierung 5
A [JOGL] TextRenderer malt Fläche hinter Buchstaben aus Spiele- und Multimedia-Programmierung 2
V Jogl: Objekt trotz Rotation immer in gleiche Richtung bewegen Spiele- und Multimedia-Programmierung 5
U [JOGL]Libs und Dlls mitliefern: Spiele- und Multimedia-Programmierung 9
S JOGL Perspektive Spiele- und Multimedia-Programmierung 2
R 2D Grafik JOGL Spiele- und Multimedia-Programmierung 18
D jogl downloaden ... wo? Spiele- und Multimedia-Programmierung 3
S JOGL 64 bit Spiele- und Multimedia-Programmierung 7
A jogl 2d performance Spiele- und Multimedia-Programmierung 20
J JOGL mit Netbeans Spiele- und Multimedia-Programmierung 3
S Jogl findet keine GLProfile ? Spiele- und Multimedia-Programmierung 6
C Frage zu Ray-Picking mit JOGL Spiele- und Multimedia-Programmierung 13
F Game mit LWJGL/JOGL in executable JAR packen, wie? Spiele- und Multimedia-Programmierung 6
D Jogl:Textur auf GLUquadric wird vertikal spiegelverkehrt dargestellt Spiele- und Multimedia-Programmierung 2
F LWJGL Smoother animieren lassen (wie bei JOGL = Animator) Spiele- und Multimedia-Programmierung 3
F JOGL 2.0 Bug? Spiele- und Multimedia-Programmierung 3
F Jogl oder Java3D ? Spiele- und Multimedia-Programmierung 20
N Ein paar fragen zu JOGL Spiele- und Multimedia-Programmierung 4
M JOGL - Mehr als nur ein Canvas - Texturpool Spiele- und Multimedia-Programmierung 7
S Jogl, no gluegen-rt :-( Spiele- und Multimedia-Programmierung 4
BattleMaster246 Pong - JOGL Spiele- und Multimedia-Programmierung 2
I JOGL: Problem mit Blending bei Billboards (Transparenz) Spiele- und Multimedia-Programmierung 2
1 JOGL: Fensterinhalt verschwindet sofort wieder Spiele- und Multimedia-Programmierung 3
jemandzehage JOGL 3D-Koordinaten des Klicks bestimmen Spiele- und Multimedia-Programmierung 2
P Erkennen auf welche Objekte gezeigt wird in JoGL Spiele- und Multimedia-Programmierung 6
E JOGL nur weißes Fenster Spiele- und Multimedia-Programmierung 2
Y 3D Koordinatensystem==> JOGL Spiele- und Multimedia-Programmierung 7
Y JOGL / OPENGL in Frame Spiele- und Multimedia-Programmierung 11
A JOGL Würfel hat durchsichtige Seiten? Spiele- und Multimedia-Programmierung 13
N Jogl Probleme mit dem Buffer beim laden einer Textur Spiele- und Multimedia-Programmierung 2
A Bewegungen mit JOGL Spiele- und Multimedia-Programmierung 12
S Jogl Problem bei Darstellung Spiele- und Multimedia-Programmierung 9
G JOGL Color stimmt nicht Spiele- und Multimedia-Programmierung 3
S JOGL Maven Dependency Spiele- und Multimedia-Programmierung 7
Developer_X JOGL - Sichtweite Spiele- und Multimedia-Programmierung 3
Developer_X JOGL Texturing Spiele- und Multimedia-Programmierung 31
Developer_X JOGL- Ich möchte mitmachen! Spiele- und Multimedia-Programmierung 23
X JOGL GL Kontext Initialisierung Spiele- und Multimedia-Programmierung 3
X Vertex Buffer Objects mit JOGL Spiele- und Multimedia-Programmierung 7
A JOGL / OpenGL Spiele- und Multimedia-Programmierung 7
P JOGL Cubemap Spiele- und Multimedia-Programmierung 7
P JOGL Installation Spiele- und Multimedia-Programmierung 15
J JOGL - Bild wird immer wieder weiß Spiele- und Multimedia-Programmierung 2
Antoras J3D / JME oder JOGL Spiele- und Multimedia-Programmierung 2
P GLSL in JOGL Spiele- und Multimedia-Programmierung 15
S jogl ins system einbinden Spiele- und Multimedia-Programmierung 3
W JOGL bleibt nach display() in PaintArea.paintComponent hängen Spiele- und Multimedia-Programmierung 5
S java /jogl /Texturen mit j3d Spiele- und Multimedia-Programmierung 3
S JOGL Fonts Spiele- und Multimedia-Programmierung 4
S JOGL Selection By Color Spiele- und Multimedia-Programmierung 3
E JOGL und TextRenderer Spiele- und Multimedia-Programmierung 9
H JoGL mit Anwendung verteilen... Spiele- und Multimedia-Programmierung 9
0x7F800000 weiß einer wozu ANTLR beim build von JOGL verwendet wird? Spiele- und Multimedia-Programmierung 3
H Jogl-Animator - Inhalt ändert sich nicht Spiele- und Multimedia-Programmierung 4
S JOGL + Multithreading Spiele- und Multimedia-Programmierung 2
P Probleme mit Vista und JOGL Spiele- und Multimedia-Programmierung 2
J Alpha Blending (jogl) Spiele- und Multimedia-Programmierung 5
G JOGL - glTranslate - Unterschiede bei zweimal Ausführen Spiele- und Multimedia-Programmierung 9
Kr0e Schattenproblem, JOGL, gluPerspective. Spiele- und Multimedia-Programmierung 2
J OpenGL (JOGL) - Radial Blur Effekt (Glow) Spiele- und Multimedia-Programmierung 2
J jogl - verschiedene Versionen Spiele- und Multimedia-Programmierung 7
Kr0e "gluSphere" (JOGL) soll Schatten werfen können Spiele- und Multimedia-Programmierung 5
A JOGL, Models Spiele- und Multimedia-Programmierung 4
A JOGL, etwas Grundlegendes Spiele- und Multimedia-Programmierung 8
Kr0e JOGL & Anpassung ins Fenster Spiele- und Multimedia-Programmierung 2
G JOGL: per Mausbewegung Objekt verschieben Spiele- und Multimedia-Programmierung 2
S In JOGL Java einbauen Spiele- und Multimedia-Programmierung 5
S Java 3D, JOGL, . Spiele- und Multimedia-Programmierung 3
P JOGL: mit glTranslated wird nichts gezeichnet Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben