konto usunięte

Temat: Dane z bazy w 2 zakładkach

Witam.
Jak wyświetlić dane z bazy w dwóch zakładkach.

JFrame -> zakładki (właśnie jak ?) -> JTable

czy w inny sposób ??

konto usunięte

Temat: Dane z bazy w 2 zakładkach

Już nieważne.
Mateusz Owsiański

Mateusz Owsiański Abuser beginner

Temat: Dane z bazy w 2 zakładkach

Potrzebna pomoc JAVA+MySQL+SWING
Komunikacja pomiędzy odpowiedzia bazy a swingiem (inne klasy)
Szymon Lisiecki

Szymon Lisiecki Senior Software
Engineer

Temat: Dane z bazy w 2 zakładkach

W czym masz problem? Podaj więcej szczegółów. Jakiś kawałek kodu? Równie dobrze mogłeś napisać: dostaję error potrzebuje pomocy. Opisz dokładnie swój problem.
Mateusz Owsiański

Mateusz Owsiański Abuser beginner

Temat: Dane z bazy w 2 zakładkach

Potrzebuje przekazać wynik z bazy danych (klasa x) do klasy zarządzającej swingiem (klasa y).
Generalnie z klasy frame kieruje zapytania do innej klasy odpowiedzialnej za komunikacje z bazą danych. Rezultat z bazy potrzebuje obsadzić w swing'u -> w jtable próbuje poprzez tableModel ale tylko ostatni rekord z bazy jest wyswietlany
Szymon Lisiecki

Szymon Lisiecki Senior Software
Engineer

Temat: Dane z bazy w 2 zakładkach

To jest jeden ze sposobów. Klasy oczywiście bardzo uproszczone

Tworzysz klasę służącą do komunikacji z bazą danych


public class DbUtils{
public final List<User> getUsers(){
//połączenie do bazy,
//wyciągnięcie danych,
//opakowanie w listę
}
}


Następnie Tworzysz data model dla Twojej tablicy, rozszerzasz klasę i nadpisujesz odpowiednie metody


public class UsersDM extends AbstractTableModel
{
protected ArrayList<User> data;
protected Vector columnNames;

public int getRowCount() {
return data.size();
}

public int getColumnCount() {
return columnNames.size();
}

public Object getValueAt(int rowIndex, int columnIndex) {

User user = (User) data.get(rowIndex);

switch(columnIndex)
{
case 0:
return user.getName();
case 1:
return user.getLastName();
case 2:
return user.getRole();
}
}else return new Object();
}

public Class getColumnClass(int column){
return getValueAt(0, column).getClass();
//jesli masz wszystko w Stringach to dajesz po prostu return String.class
}

public String getColumnName(int columnIndex){
return (String)columnNames.elementAt(columnIndex);
}

public boolean isCellEditable(int row, int column){
return false;
}

private void initColumnNames(){
columnNames = new Vector<String>();
columnNames.addElement("Name");
columnNames.addElement("Last name");
columnNames.addElement("Role");
}

public UsersDM()
{
this.initColumnNames();

try{
DbUtils db = new DbUtils();
this.data = (ArrayList<User>) db.getUsers();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}


I teraz w klasie odpowiedzialnej za "widok" tworzysz tabelkę:

JTable usersTable= new JTable();
usersTable.setModel(new UsersDM());


W tym momencie w tabelce powinny się pojawić wpisy z bazy.
Celowo w kodzie powyżej pominąłem obsługę wyjątków aby nie zaciemniać kodu.
Można również inaczej zorganizować inicjowanie tabeli i wyciąganie danych, jednak wydaje mi się że od takiego czegoś możesz wyjść i dalej już ulepszać kod według swojego uznania.Szymon Lisiecki edytował(a) ten post dnia 18.09.12 o godzinie 18:55
Mateusz Owsiański

Mateusz Owsiański Abuser beginner

Temat: Dane z bazy w 2 zakładkach

Witam,

Bardzo dziękuje [; rozwiązanie idealnie pasuje do problemu. Przesyłam rozwiązany problem (który działa na mojej localnej bazie):

Interface dla definiowania zmiennych

public interface IConstans {
static String url = "jdbc:mysql://localhost:3306/salonkosmetyczny";
static String server = "com.mysql.jdbc.Driver";
// static String user = "db619386";
static String user = "root";
static String password = "1q2w3e4r";
static String polecenie = "SELECT * FROM klient;";
}

Class'a odpowiedzialna za połączenie z bazą
public class ConnectMySQL {

IKlient klient;
ArrayList<IKlient> arrKlient = new ArrayList<IKlient>();

public final ArrayList<IKlient> getKlient() throws SQLException,
ClassNotFoundException {
Class.forName(IConstans.server);
Connection connection = DriverManager
.getConnection(IConstansurl.user, IConstans.password);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(IConstans.polecenie);

while (resultSet.next()) {

String imie = resultSet.getString("imie");
String nazwisko = resultSet.getString("nazwisko");
int numerTelefonu = resultSet.getInt("numer_telefonu");

String numerTelefonuStr = Integer.toString(numerTelefonu);
String email = resultSet.getString("email");
ResultSetMetaData rsmd = resultSet.getMetaData();
int columnCount = rsmd.getColumnCount();

arrKlient.add(new Klient(imie, nazwisko, email, numerTelefonu));
for (int i = 0; i < arrKlient.size(); i++) {

System.out.println(arrKlient.get(i).ImieKlient() + " "
+ arrKlient.get(i).NazwiskoKlient());
}

}// end while
resultSet.close();
statement.close();
return arrKlient;

}// end of database
}// end of class

Class'a odpowiedzialna za model JTable

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.table.AbstractTableModel;

public class TableModelUser extends AbstractTableModel {

protected ArrayList<IKlient> data;
protected Vector columnNames;
protected ArrayList<IKlient> arrKlientTest;

@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return columnNames.size();
}

@Override
public int getRowCount() {
// TODO Auto-generated method stub
System.out.println("Size: " + arrKlientTest.size());

return data.size();
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub

// IKlient klient = (Klient) data.get(rowIndex);
IKlient klient = (Klient) data.get(rowIndex);

switch (columnIndex) {
case 0:

System.out.println("Imie klienta: " + klient.ImieKlient());
return klient.ImieKlient();

case 1:

return klient.NazwiskoKlient();

case 2:
return klient.NumerTelefonuKlient();
case 3:
return klient.EmailKlient();

}
return null;
}// end getValue

public Class getColumnClass(int column) {

return getValueAt(0, column).getClass();
}

public String getColumnName(int columnIndex) {
return (String) columnNames.elementAt(columnIndex);
}

public boolean isCellEditable(int row, int column) {
return false;
}

private void initColumnNames() {
columnNames = new Vector<String>();
columnNames.addElement("imie");
columnNames.addElement("nazwisko");
columnNames.addElement("numer_telefonu");
columnNames.addElement("email");
arrKlientTest = new ArrayList<IKlient>();
arrKlientTest.add(new Klient("a", "b", "w", 123456789));
arrKlientTest.add(new Klient("c", "c", "e", 987654321));
}

public TableModelUser() throws SQLException, ClassNotFoundException {

super();
this.initColumnNames();
ConnectMySQL connDatabase = new ConnectMySQL();
this.data = connDatabase.getKlient();

}// end of constr

}//end of class

Teraz prosta klasa dla wyświetlenia JTable. Class'a tylko i wyłącznie z JTable bez zbeddnych elementów

import java.sql.SQLException;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTable;

public class FrameGUI {

/**
* @param args
*/

TableModelUser tableModel;

public static void main(String[] args) {
// TODO Auto-generated method stub

FrameGUI frame = new FrameGUI();
frame.initGUI();

}

public void initGUI() {

JFrame frame = new JFrame("List clients");

JLabel lbl = new JLabel("testttt");
frame.add(lbl);
JTable tblTest = new JTable();
try {
tblTest.setModel(new TableModelUser());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// frame.add(tblTest);
JLabel lblTestDanych = new JLabel();
frame.add(tblTest);
frame.setVisible(true);
frame.pack();
}

}//end of class

Następna dyskusja:

[Zlecenie] panel kontrolny ...




Wyślij zaproszenie do