Bases de Dades
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();
}
}