2016-09-30 3 views
0

У меня есть JTable с содержимым на нем, которое я прочитал из файла CSV. Я использую следующий метод, который, когда я нажимаю на строку, откроет новый JFrame и закроет предыдущий. Он отображает такие вещи, как идентификатор, координаты, статус того, что написано на этой таблице, и может редактировать их, если захочет. НАПРИМЕР. Приведенная ниже таблица:Передача данных в новый GUI

|ID |co-ordinates  | status | 
| 1 | (3,21)   | pending | 
| 2 | (4,21)   | full  | 
| 3 | (9, 12)   | empty | 

Если я нажимаю строку 1, он выскочит с рамкой из идентификатора (1), совместно ординат (3,21) и статус в текстовом поле в другом кадре и редактируется. Я могу сделать функцию щелчка, но не уверен, как взять эти данные на следующий кадр при нажатии строки.

//in location class 
table.addMouseListener(new MouseAdapter() { 
       public void mouseClicked(MouseEvent e) { 
        if (e.getClickCount() == 1) { 
        int row = table.getSelectedRow(); 
        AddEdit An = new AddEdit(); //goes to next class 
        An.setVisible(true); 
        dispose(); 
       } 
      } 
      }); 

Как взять эти данные на следующий кадр при нажатии строки?

+4

* «.. открыть новый JFrame и закрыть предыдущий». * 1) См. [Использование нескольких JFrames, Good/Bad Practice?] (Http://stackoverflow.com/q/9554636/418556) 2) Вместо этого используйте ['CardLayout'] (http://download.oracle.com/javase/8/docs/api/java/awt/CardLayout.html), как показано в [этот ответ] (http://stackoverflow.com/a/5786005/418556). –

+0

BTW - учитывая, что это сайт Q & A, я добавил фактический вопрос в форме * «Как перенести данные на следующий кадр при нажатии строки?» * Пожалуйста, не забудьте добавить вопрос. –

+0

yup изменит вопрос спасибо за ответ. –

ответ

4

Не зная, какого типа контента у вас есть JTable, я могу предложить только общее решение.

int row = table.getSelectedRow(); 
int userID = (Integer) table.getValueAt(row, 0); 
// is co-ordinates [sic] a String or a Point? 
// You can do the same as for userID and use (row,1) to get the value 
String status = (String) table.getValueAt(row, 2) 

При этом вы можете создать то Object[] и отправить это в конструктор AddEdit или написать метод getJTableObject() или что-то подобное в AddEdit. Это зависит от того, вы можете изменить AddEdit или нет.

Вы также должны рассмотреть совет Эндрюса и использовать карту. С помощью этого вы можете, например, использовать ObserverPattern и отправить свой объект.


Другой способ использует JOptionPane:

Object[] message = { "Please update the information:", newStatusPanel }; 
int response = JOptionPane.showConfirmDialog(null, message, "Update information", 
        JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); 

newStatusPanel просто является JPanel, на котором вы кладете т.е. JTextFields. Затем вы заполняете эти поля содержимым с JTable по методу, который я показал ранее, и когда пользователь нажимает кнопку «ОК», вы обновляете JTable.

// Do something with the result 
if (response == JOptionPane.OK_OPTION) { 
model.addRow(new Object[] { txtID.getText(), coordinates.getText(), ... }); 

Это выглядит следующим образом:

UpdateStatus

(PS: Я позже изменить текстовые пароли на основе хэш-Игнорируйте это вопиющее небезопасный способ борьбы с паролями.)

+0

спасибо за совет :)! –

Смежные вопросы