#java #swing #jtable #jframe #jbutton
#java #swing #jtable #jframe #jbutton
Вопрос:
У меня есть jFrame2, который содержит JTable с 4 столбцами (JTable, берущий данные из таблицы в базе данных, которая содержит 20 столбцов) Также у меня есть jFrame1, который я использовал для заполнения базы данных. Что я хочу сделать, когда я выбираю строку в JTable и нажимаю JButton, он должен открыть jframe1, показывающий все данные для этой строки. я проясню, что я хочу, в пунктах
* я хочу открыть jframe1 из jframe2 через jbutton (эта задача выполнена, и это код)
public void actionPerformed(ActionEvent e) {
if(e.getSource()==jButton2){
jframe2 regFace =new jframe2();
regFace.setVisible(true);
}}
* как только jframe1 открывается jbutton в jframe2, он должен отображать в своих полях все данные выбранной строки в jframe2>> этот пункт означает
……..-sql-запрос выполняется после того, как jfram1 открыт Jbutton в jframe2
………-отображение данных в jtextfield, взятых из базы данных с помощью запроса, который я упомянул в строке выше (эта задача выполнена, и это код, но не завершен)
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));
}
* вкратце, я хочу понять jframe1, что, пожалуйста, если вы открыли jframe2, выполните запрос и заполните текстовые поля этим запросом
* эта картинка была бы более четкой
здесь
Комментарии:
1. Вы не должны показывать другой фрейм. Как правило, приложения должны содержать только один JFrame. В этом случае ваше окно сведений должно быть JDialog.
2. почему .. я использую JFrame, потому что мне нужны все его возможности
Ответ №1:
Похоже, что часть, с которой у вас возникли проблемы, заключается в том, как перенести выбранные данные из таблицы в поля в jframe1.
Многое из этого зависит от того, TableModel
что используется в вашем JTable
. Предполагая, что вы только что использовали DefaultTableModel
, вы можете получить выбранные данные строки следующим образом:
@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);
}
И у вас был бы следующий метод в вашем классе 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
}
Комментарии:
1. в jFrame2 у меня есть этот код…………………….. выполнено общедоступное недействительное действие (ActionEvent e) {if(e.getSource()==jButton2){ jframe2 regFace =new jframe2(); regFace.setVisible(true);}}……………………… и я хочу, чтобы данные отправлялись в jframe1 при нажатии на JButton. нет: данные должны отображаться только в текстовых полях jframe1, если они были получены из jframe2.
2. @m.basleem Мне все еще не ясно, с чем у вас проблемы. Если вы можете отредактировать свой вопрос и включить SSCCE , это помогло бы.
3. @wolfcastle я уточнил больше деталей в своем вопросе. надеюсь, теперь все понятно .. спасибо за вашу заботу
4. @m.basleem Хорошо, думаю, теперь я понял ваш вопрос. Вы хотите знать, как получить данные из JTable, которые выбрал пользователь, и передать их в jframe1 для заполнения различных текстовых полей. Я отвечу в ближайшее время.
5. @m.basleem Я обновил свой ответ. Надеюсь, это больше того, что вы искали.
Ответ №2:
прежде чем я добавлю ответ, я хотел бы поблагодарить @wolfcastle такого приятного человека.Он почти ответил на вопрос, и я просто модифицирую его, чтобы адаптировать его к sql-запросу и базе данных. это код для 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);
}
}
и код для 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));
}
}