Как узнать, какая строка была выбрана из другого кадра? - PullRequest
0 голосов
/ 18 июня 2019

В первом Jframe у меня заполнен JTable из базы данных, и мне нужно передать данные выбранного jTable в другой кадр.

Так что мне нужно знать из другого JInternalFrame, какая строка была выбрана в первом Jframe

public void showTableData() {
        try {
            Class.forName(driverName);
            Connection con = DriverManager.getConnection(url, userName, password);
            String sql = "SELECT t.name, t.exam, l.coursename\n"
                    + "FROM exam AS t\n"
                    + "INNER JOIN Course as l ON (t.LendaID=l.LendaID)";
            PreparedStatement ps = con.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            int i = 0;
            Jtable1.setModel(DbUtils.resultSetToTableModel(rs));

        } catch (Exception ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, ex.getMessage(), "Error",
                    JOptionPane.ERROR_MESSAGE);
        }
    }

Это таблица, которую я имею в первом Jframe

1 Ответ

0 голосов
/ 18 июня 2019

Независимо от количества ваших компонентов, в качестве простого решения вы можете создать класс CourseEventDispatcher, который будет центральной точкой для отправки событий курса по приложению.

public class CourseEventDispatcher {
 private List<CourseEventSubscriber> subscribers;

 // ...

 public void dispatchEvent(CourseEvent event) {
   for(CourseEventSubscriber: subscribers) {
     if( event.getSource() != subscriber ) {
        subscriber.onCourseEvent(event);
     }
   }
 }
}

И для каждого соответствующего представления,есть контроллер, который является CourseEventSubscriber:

public class SomeFrameController implements CourseEventSubscriber {
  private CourseEventDispatcher courseEventDispatcher;

  public SomeFrameController(CourseEventDispatcher courseEventDispather) {
    this.courseEventDispatcher = courseEventDispatcher;
  }

  public void addSelectionListener() {
    // ...
    table.getSelectionModel().addListSelectionListener(
        new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent event) {
             doYourOwnStuff();
             // then dispatch the event
             courseEventDispatcher.dispatch(new CourseEvent(this, event));
            }
        }
    );
  }

  // from some other view 
  public void onCourseEvent(CourseEvent event) {
   // process the event
   // e.g. event.getEvent()
  }
}

И CourseEvent - это простой класс

public class CourseEvent {
  private CourseEventSubscriber source;
  private EventObject event;

  public CourseEvent(CourseEventSubscriber source, EventObject event) {
   this.source = source;
   this.event = event;
  }
  // getters
}

Вы можете добавить (зарегистрировать) свои контроллеры после создания диспетчера.

Надеюсь, это даст вам другую перспективу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...