показывать данные из JTable в JFrame

#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));
            }
         }