Всем привет. Я только начал изучать java так что не судите строго.
Во общем у меня вопрос по JTable. Задача такая: нужно вывести данные из таблицы Mysql в компонент JTable.
Что я сделал:
1. Создал формочку, поместил туда компонент JTable.
2. Подключился к базе Mysql и считал данные с таблицы. Данные находятся в объекте ResultSet. Теперь эти данные нужно загрузить в таблицу.
На сколько я понял правильный вариант это рабоче через "Модель".
3. Создал класс наследовался от класса AbstractTableModel
В конструкторе класса сказал принимать объект типа ResultSet. И все дальше ступор, не знаю как быть дальше.
На сколько я понял для вывода данных нужно представить данные в виде массива типа Object[][] data. А после этого в методе getValueAt делать так:
Java |
1
2
3
4
| public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
return data[rowIndex][columnIndex];
} |
|
А как представить ResultSet в виде массива Object[][] data, а модет эть другая реализация этого.
Ниже представлен сам код:
MainTb.java
Java |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
| package jtb;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
import javax.swing.JTable;
public class MainTb extends JFrame {
private JPanel contentPane;
private JTable table;
private static ResultSet rs;
private static MyTableModel model;
/**
* Launch the application.
*/
public static void main(String[] args) {
Connection connection;
try {
String driverName = "com.mysql.jdbc.Driver";
Class.forName(driverName);
String serverName = "localhost";
String mydatabase = "world";
String url = "jdbc:mysql://" + serverName + "/" + mydatabase;
String username = "root";
String password = "12345678";
connection = DriverManager.getConnection(url, username, password);
String query = "Select * FROM city";
Statement stmt = connection.createStatement();
rs = stmt.executeQuery(query);
model = new MyTableModel(rs);
connection.close();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
// Could not find the database driver
} catch (SQLException e) {
e.printStackTrace();
// Could not connect to the database
}
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MainTb frame = new MainTb();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public MainTb() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
table = new JTable(model);
contentPane.add(table, BorderLayout.CENTER);
}
} |
|
Вот сама модель MyTableModel.java
Java |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| package jtb;
import java.sql.ResultSet;
import javax.swing.table.AbstractTableModel;
public class MyTableModel extends AbstractTableModel{
/**
*
*/
private static final long serialVersionUID = 1L;
private ResultSet rs;
public MyTableModel(ResultSet rs){
this.rs = rs;
}
@Override
public int getRowCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return 0;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
return null;
}
} |
|