Grafica 3D in Java

Introduzione a OpenGL ed esempi di programmazione:
robot.unipv.it/robolab-website/courses/16-computer-graphics
www3.ntu.edu.sg/home/ehchua/programming/opengl/JOGL2.0.html

Download delle librerie OpenGL per Java dal sito jogamp.org

Istruzioni per l’installazione:

  • Decomprimere il contenuto dei 2 file 7zip in una cartella JOGL2 precedentemente creata.
  • In NetBeans creare una libreria denominata JOGL2 mediante il menu Tools – Libraries – New Library…
  • In Classpath inserire il percoso dei file
    …/JOGL2/jar/jogl-all.jar
    …/JOGL2/jar/gluegen-rt.jar
  • e dei file corrispondenti ai sistemi operativi su cui deve essere utilizzato il programma
    (in Windows a 32 bit)
    …/JOGL2/jar/jogl-all-natives-windows-i586.jar
    …/JOGL2/jar/gluegen-rt-natives-windows-i586.jar
    (in Linux a 32bit)
    …/JOGL2/jar/jogl-all-natives-linux-i586.jar
    …/JOGL2/jar/gluegen-rt-natives-linux-i586.jar
  • In Sources inserire il percoso del file
    …/JOGL2/jogl-java-src.zip
  • In Javadoc inserire il percoso delle cartelle
    …/JOGL2/javadoc
    …/JOGL2/javadoc_jogl_spec
    …/JOGL2/javadoc_nativewindow_spec

Programma di esempio:

Java: finestre di dialogo per l’apertura e il salvataggio dei file

    private void salva(java.awt.event.ActionEvent evt) {                       
        JFileChooser chooser = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("File di testo (*.txt)", "txt");
        chooser.setFileFilter(filter);
        int returnVal = chooser.showSaveDialog(this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            try {
                FileWriter fw = new FileWriter(chooser.getSelectedFile());
                BufferedWriter bw = new BufferedWriter(fw);
                bw.write(txtTesto.getText());
                bw.close();
                JOptionPane.showMessageDialog(this, "Salvataggio eseguito correttamente", "Messaggio", JOptionPane.INFORMATION_MESSAGE);
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(this, "Si è verificato un errore nella scrittura del file", "Errore", JOptionPane.ERROR_MESSAGE);
            }
        }
    }                      

    private void apri(java.awt.event.ActionEvent evt) {                      
        JFileChooser chooser = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("File di testo (*.txt)", "txt");
        chooser.setFileFilter(filter);
        int returnVal = chooser.showOpenDialog(this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            txtTesto.setText("");
            try {
                FileReader fr = new FileReader(chooser.getSelectedFile());
                BufferedReader br = new BufferedReader(fr);
                String riga;
                while ((riga = br.readLine()) != null) {
                    txtTesto.append(riga + "\n");
                }
                br.close();
                JOptionPane.showMessageDialog(this, "Il file è stato caricato correttamente", "Informazione", JOptionPane.INFORMATION_MESSAGE);
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(this, "Il file non è stato caricato correttamente", "Errore", JOptionPane.ERROR_MESSAGE);
            }
        }
    }

Biblioteca

Biblioteca

package biblioteca;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JOptionPane;

public class Main extends javax.swing.JFrame {

    private int pos;
    private Libro[] libri;

    public Main() {
        initComponents();
        libri = new Libro[100];
        for (int i = 0; i < 100; i++) {
            libri[i] = new Libro();
        }
        pos = 0;
    }

[...]
    private void Left(java.awt.event.ActionEvent evt) {                      
        libri[pos].setAutore(txtAutore.getText());
        libri[pos].setEditore(txtEditore.getText());
        libri[pos].setPrezzo(txtPrezzo.getText());
        libri[pos].setTitolo(txtTitolo.getText());
        pos--;
        if (pos < 0) {
            pos = 0;
        }
        lblPos.setText("" + pos);
        txtAutore.setText(libri[pos].getAutore());
        txtTitolo.setText(libri[pos].getTitolo());
        txtEditore.setText(libri[pos].getEditore());
        txtPrezzo.setText(libri[pos].getPrezzo());
    }                     

    private void btnRightActionPerformed(java.awt.event.ActionEvent evt) {                                         
        libri[pos].setAutore(txtAutore.getText());
        libri[pos].setEditore(txtEditore.getText());
        libri[pos].setPrezzo(txtPrezzo.getText());
        libri[pos].setTitolo(txtTitolo.getText());
        pos++;
        if (pos > 100) {
            pos = 100;
        }
        lblPos.setText("" + pos);
        txtAutore.setText(libri[pos].getAutore());
        txtTitolo.setText(libri[pos].getTitolo());
        txtEditore.setText(libri[pos].getEditore());
        txtPrezzo.setText(libri[pos].getPrezzo());
    }                                        

    private void btnSalvaActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try {
            FileWriter fw = new FileWriter("Biblioteca.csv");
            BufferedWriter bw = new BufferedWriter(fw);
            for (int i = 0; i < 100; i++) {
                bw.write(libri[i].getAutore() + ";" + libri[i].getTitolo() + ";" + libri[i].getEditore() + ";" + libri[i].getPrezzo());
                bw.newLine();
            }
            bw.close();
            JOptionPane.showMessageDialog(this, "Archivio salvato", "Informazione", JOptionPane.INFORMATION_MESSAGE);
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(this, "Errore nel salvataggio dell'archivio", "Errore", JOptionPane.ERROR_MESSAGE);
        }
    }                                        

    private void btnCaricaActionPerformed(java.awt.event.ActionEvent evt) {                                          
        try {
            FileReader fr = new FileReader("Biblioteca.csv");
            BufferedReader br = new BufferedReader(fr);
            for (int i = 0; i < 100; i++) {
                String riga = br.readLine();
                String[] campi = riga.split(";");
                libri[i].setAutore(campi[0]);
                libri[i].setTitolo(campi[1]);
                libri[i].setEditore(campi[2]);
                libri[i].setPrezzo(campi[3]);
            }
            br.close();
            JOptionPane.showMessageDialog(this, "Archivio caricato", "Informazione", JOptionPane.INFORMATION_MESSAGE);
            txtAutore.setText(libri[pos].getAutore());
            txtTitolo.setText(libri[pos].getTitolo());
            txtEditore.setText(libri[pos].getEditore());
            txtPrezzo.setText(libri[pos].getPrezzo());
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(this, "Errore nel caricamento dell'archivio", "Errore", JOptionPane.ERROR_MESSAGE);
        }
    }                                         

[...]
}