Mam jFrame2, który zawiera jTable z 4kolumny (jTable pobierający dane z tabeli w bazie danych, która zawiera 20 kolumn) Mam także jFrame1, którego użyłem do wypełnienia bazy danych. Co chcę to zrobić, gdy zaznaczę wiersz w jTable i kliknę przycisk jButton, musi on otworzyć jframe1, pokazując wszystkie dane dla tego wiersza. wyjaśnię to, co chcę w punktach
* Chcę otworzyć Jframe1 z Jframe2 poprzez Jbutton (to zadanie jest wykonane i to jest kod)
public void actionPerformed(ActionEvent e) {
if(e.getSource()==jButton2){
jframe2 regFace =new jframe2();
regFace.setVisible(true);
}}
* po otwarciu jframe1 przez jbutton w jframe2 musi pokazać w polach wszystkie dane z wybranego wiersza w jframe2 >> ten punkt oznacza
........ - kwerenda SQL wykonywana po otwarciu jfram1 przez Jbutton w jframe2
......... - wyświetlanie danych w polu jtextfield z bazy danych według zapytania, o którym wspomniałem w wierszu powyżej (to zadanie jest wykonane i to jest kod, ale nie ukończony)
try {
dbconnect = new myDbConnection();
ResultSet resultSet =null;
resultSet = dbconnect.excuteQuery("SELECT id, area,location, status1 FROM pledges where id="17"");
while (resultSet.next()){
id.setText(resultSet.getString(1));
area.setText(resultSet.getString(2));
location.setText(resultSet.getString(3));
status.setText(resultSet.getString(4));
// i = Long.parseLong(rs1.getString(1));
}
* w skrócie chcę zrozumieć jframe1, że jeśli otworzyłeś jframe2, wykonaj zapytanie i wypełnij pola tekstowe tym zapytaniem * to jest obraz lepiej wyczyścić tutaj
Odpowiedzi:
3 dla odpowiedzi № 1Brzmi to tak, jakbyś miał problem z tym, jak pobrać wybrane dane z tabeli do pól w jframe1.
Wiele z tego zależy od TableModel
który jest używany w twoim JTable
. Zakładając, że właśnie użyłeś DefaultTableModel
, możesz pobrać wybrane dane wiersza w ten sposób:
@Override
public void actionPerformed(ActionEvent e) {
int viewRow = myJTable.getSelectedRow();
int modelRow = myJTable.convertRowIndexToModel(viewRow);
DefaultTableModel model = (DefaultTableModel) myJTable.getModel();
// You will get a compiler warning on the following line, but there"s not much you can do about it beside suppress it
Vector<Object> rowVector = (Vector<Object>) model.getDataVector().get(modelRow);
jframe2 regFace =new jframe2();
regFace.setSelectedRow(rowVector);
regFace.setVisible(true);
}
I miałbyś następującą metodę w swojej klasie jframe2:
public void setSelectedRow(Vector<Object> row ) {
id.setText(row.get(0).toString());
area.setText(row.get(1).toString());
location.setText(row.get(2).toString());
status.setText(row.get(3).toString());
// continue for all columns
}
0 dla odpowiedzi nr 2
zanim odpowiem, chciałbym podziękować @wolfcastle tak miłej osobie. Prawie odpowiada na pytanie i po prostu modyfikuję go, aby dostosować go do zapytania SQL i bazy danych. to jest kod dla jfrme2
public void actionPerformed(ActionEvent e) {
if(e.getSource()==jButton2){
int viewRow = jTable1.getSelectedRow();
int modelRow = jTable1.convertRowIndexToModel(viewRow);
Object oc= jTable1.getModel().getValueAt(modelRow, 0);
String vv=oc.toString();
DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
jframe1 regFace =new jframe1();
try {
regFace.setSelectedRow(vv);
} catch (SQLException ex) {
Logger.getLogger(showp1.class.getName()).log(Level.SEVERE, null, ex);
}
regFace.setVisible(true);
}
}
i kod jframe1
public void setSelectedRow(String row ) throws SQLException {
dbconnect = new myDbConnection();
ResultSet resultSet =null;
System.out.print(row);
resultSet = dbconnect.excuteQuery("SELECT id, area,location, status1 ,date1,insname,oname,bname,street,junction,INSPSITION,recname1 FROM pledges where id=""+row+""");
while (resultSet.next()){
id.setText(resultSet.getString(1));
area.setText(resultSet.getString(2));
location.setText(resultSet.getString(3));
status.setText(resultSet.getString(4));
date.setText(resultSet.getString(5));
insname.setText(resultSet.getString(6));
oname.setText(resultSet.getString(7));
bname.setText(resultSet.getString(8));
street.setText(resultSet.getString(9));
junction.setText(resultSet.getString(10));
insposition.setText(resultSet.getString(11));
recname.setText(resultSet.getString(12));
}
}