Omet navegació

2.2.2.3 RD-Java: Tot l'exemple

Tot l'exemple

Anem a posar tot l'exemple que arreplega tot l'anterior.

Primer la classe Missatge.java:

public class Missatge{
    public String nom;
    public String contingut;

    public Missatge(){
    }

    public Missatge(String nom,String cont){
        this.nom=nom;
        this.contingut=cont;
    }

	public String getNom() {
		return nom;
	}

	public void setNom(String nom) {
		this.nom = nom;
	}

	public String getContingut() {
		return contingut;
	}

	public void setContingut(String contingut) {
		this.contingut = contingut;
	}
    
}


Ara el programa:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import com.google.auth.oauth2.GoogleCredentials;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class Pantalla_CrearXat extends JFrame implements ActionListener {

	private static final long serialVersionUID = 1L;
	JLabel etUltimMissatge= new JLabel("Últim missatge: ");
	JLabel ultimMissatge= new JLabel();
	
	JLabel etiqueta = new JLabel("Missatges:");
	JTextArea area = new JTextArea();

	JLabel etIntroduccioMissatge = new JLabel("Introdueix missatge:");
	JButton enviar = new JButton("Enviar");
	JTextField missatge = new JTextField(15);

	// en iniciar posem un contenidor per als elements anteriors
	public void iniciar() throws IOException {
		JFrame pantPrincipal = this;
		this.setBounds(100, 100, 450, 300);
		this.setLayout(new BorderLayout());
		// contenidor per als elements
		//Hi haurà títol. Panell de dalt: últim missatge. Panell de baix: per a introduir missatge. Panell central: tot el xat
		
		JPanel panell1 = new JPanel(new FlowLayout());
		panell1.add(etUltimMissatge);
		panell1.add(ultimMissatge);
		getContentPane().add(panell1, BorderLayout.NORTH);

		JPanel panell2 = new JPanel(new BorderLayout());
		panell2.add(etiqueta, BorderLayout.NORTH);
		area.setForeground(Color.blue);
		JScrollPane scroll = new JScrollPane(area);
		panell2.add(scroll, BorderLayout.CENTER);
		getContentPane().add(panell2, BorderLayout.CENTER);
		
		JPanel panell3 = new JPanel(new FlowLayout());
		panell3.add(etIntroduccioMissatge);
		panell3.add(missatge);
		panell3.add(enviar);
		getContentPane().add(panell3, BorderLayout.SOUTH);

		setVisible(true);
		enviar.addActionListener(this);

		FileInputStream serviceAccount = new FileInputStream("acces-a-dades-6e5a6-firebase-adminsdk-ei7uc-8f5d926921.json");

		FirebaseOptions options = new FirebaseOptions.Builder()
				.setCredentials(GoogleCredentials.fromStream(serviceAccount))
				.setDatabaseUrl("https://acces-a-dades-6e5a6.firebaseio.com").build();

		FirebaseApp.initializeApp(options);

		// Exemple de listener de lectura única addListenerForSingleValue()
		// Per a posar el títol. Sobre nomXat
		final DatabaseReference nomXat = FirebaseDatabase.getInstance().getReference("nomXat");

		nomXat.addListenerForSingleValueEvent(new ValueEventListener() {
			@Override
			public void onDataChange(DataSnapshot dataSnapshot) {
				pantPrincipal.setTitle(dataSnapshot.getValue(String.class));
			}

			@Override
			public void onCancelled(DatabaseError error) {
			}
		});
		
		// Exemple de listener de lectura contínua addValueEventListener()
		// Per a posar l'últim missatge registrat. Sobre a1
		final DatabaseReference ultim = FirebaseDatabase.getInstance().getReference("a1");

		ultim.addValueEventListener(new ValueEventListener() {
			@Override
			public void onDataChange(DataSnapshot dataSnapshot) {
				ultimMissatge.setText(dataSnapshot.getValue(String.class));
			}

			@Override
			public void onCancelled(DatabaseError error) {
			}
		});
		
		// Exemple de listener d'una llista addChildEventListener()
		// Per a posar tota la llista de missatges. Sobre xat
		final DatabaseReference xat = FirebaseDatabase.getInstance().getReference("xat");

		xat.addChildEventListener(new ChildEventListener() {
			@Override
			public void onChildAdded(DataSnapshot dataSnapshot, String s) {
				area.append(dataSnapshot.child("nom").getValue(String.class) + ": "
						+ dataSnapshot.child("contingut").getValue(String.class) + "\n");
			}

			@Override
			public void onChildChanged(DataSnapshot dataSnapshot, String s) {
			}

			@Override
			public void onChildRemoved(DataSnapshot dataSnapshot) {
			}

			@Override
			public void onChildMoved(DataSnapshot dataSnapshot, String s) {
			}

			@Override
			public void onCancelled(DatabaseError databaseError) {
			}
		});

	}

	@Override




	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == enviar) {
			// Exemple de guardar dades sense haver d'esperar per ser una aplicació gràfica
			// Per a guardar dades. Sobre a1, i despŕes sobre la llista xat
			final DatabaseReference refA1 = FirebaseDatabase.getInstance().getReference("a1");
			refA1.setValue(missatge.getText(), null);
			final DatabaseReference xat = FirebaseDatabase.getInstance().getReference("xat");
			Missatge m = new Missatge("Usuari1",missatge.getText());
			xat.push().setValue(m,null);
		}
	}
}


I per últim el programa principal:

import java.io.IOException;

public class CrearXat {

    public static void main(String[] args) throws IOException {
        final Pantalla_CrearXat finestra = new Pantalla_CrearXat();
        finestra.iniciar();
    }
}