2012-09-05 2 views
2

Jtable에서 값을 가져오고 싶습니다. JTable에서 값을 가져 오려고 할 때마다 getvalueat를 사용하여 시도했지만, 첫 번째 열의 값만 가져옵니다. 선택된 행, 내가 선택한 Jtable에서 모든 값을 가져와야합니다. 당신이 좀 도와 주시겠습니까이 하나Java JTable 값 가져 오기 (행 당)

here is my code: 
class GetTableValue implements ActionListener{ 
    public void actionPerformed(ActionEvent e){ 
     AbstractButton button = (AbstractButton)e.getSource(); 
     if(e.getActionCommand().equals(button.getActionCommand)){ 
      int row = table.getSelectedRow(); 
      int col = table.getSelectedColumn(); 

      Object data = (Object)table.getValueAt(row, col); 
      JOptionPane.showMessageDialog(null, data); 
     } 
    } 
} 

이 전체 선택한 테이블의 값이 불행하게도 그것은 단지 (이미 선택된 하나입니다) 하나 개의 값을 표시하려면위한 JOptionPane에 표시됩니다 내 액션 이벤트 아니다 열.

ActionListener tableAction = new GetTableValue(); 


buttonEdit = new JButton("EDIT"); 


buttonEdit.addActionListener(tableAction); 

코드가 나는 또한, 평범하고 단순

이 코드는 호출에 대해 내하는 JButton의 액션 이벤트입니다 (내 데이터베이스 JTable가 값을 가져 오기 때문에 난 이미 JTable의에서 내 코드 제외) G (google)에서 행을 가져 오는 좋은 지침서를 검색하십시오. 불행히도 Jtable 값 (행당)을 가져 오는 좋은 지침서는 없습니다.

+0

SwingX 프레임 워크에서 JXTable을 사용하는 것이 좋습니다. – brainless

+1

스윙 구성 요소를 사용하여 게시물에 스윙 태그를 추가하십시오! 나는 지난 2 주간 내가 너에게 해주기를 바랐다. 힌트를 주었을지도 모른다. –

답변

5

getValueAt (행/열에서) 셀의 값을 반환합니다. 테이블 모델이 지원하지 않는 한, 단일 요청으로 전체 행을 가져 오는 편리한 방법이 없습니다.

또한, 기억, 테이블 정렬 또는 필터링 경우, 모델 인덱스 뷰를 일치하지 않습니다, 당신은 convertRowIndexToModelconvertColumnIndexToModel

UPDATE

유일한 방법을 사용하여, 먼저 변환해야 테이블 모델에 getRow (또는 이와 동등한) 메소드가있는 경우 그 주변에 있습니다. 이제

public class MyAwesomeTableModel extends AbstractTableModel { 
    // All the usual stuff... 

    public MyRowData getRowAt(int index) { ... } 
} 

... 정확한 대답을하는 것은 불가능 근처에 당신이 다음의 테이블 모델에 데이터를 저장하는 방법을 알고 있지만, 일반적인 생각 일 것없이, MyRowData 테이블에있는 데이터의 적 구현은 당신이 만들었습니다. 단일 Object 또는 (DefaultTableModel의 경우) 객체 배열 일 수 있습니다.

class GetTableValue implements ActionListener{ 
    public void actionPerformed(ActionEvent e){ 
     AbstractButton button = (AbstractButton)e.getSource(); 
     if(e.getActionCommand().equals(button.getActionCommand)){ 

      int row = table.convertRowIndexToModel(table.getSelectedRow()); 
      MyAwesomeTableModel model = (MyAwesomeTableModel)table.getModel(); 

      MyRowData data = model.getRowAt(row); 
      JOptionPane.showMessageDialog(null, data); 
     } 
    } 
} 

은 당신이 당신의 행 데이터를 구현 한 방법 TableModel을 구현 한 방법에 모두 의존하지만

+0

다른 방법이 있습니까? 내가 "치트 (cheat)"라고 말하면이 일을 내가 열어 준 링크를 열어 읽고 이해하는 것이 조금 복잡해집니다. – Zyrax

+0

자, 제게 조언 해 주시겠습니까? Jtable 및 데이터베이스에서 검색 한 다음 가져 오기 값을 배열이나 변수에 저장 하시겠습니까? – Zyrax

+0

나는 그것이 당신을 즉시 도울 것이라고 말할 수는 없지만 그것은 일반적인 지스트입니다. – MadProgrammer

1
에 도움이 될 수있는 일반 JIST입니다

아래의 코드를 사용하여 선택한 행 값을 가져올 수 있습니다.

int selectedRow = jTableName.getSelectedRow(); 
selectedRow = jTableName.convertRowIndexToModel(selectedRow); 
String val1 = (String)jTableName.getModel().getValueAt(selectedRow, 0); 
String val2 = (String)jTableName.getModel().getValueAt(selectedRow, 1); 
+0

이 코드를 시도해 보겠습니다. 덕분에 – Zyrax

10

선택에서 모든 값을 원할 경우 행을 입력 한 다음 code을 입력하십시오.

int row = jTable1.getRowCount(); 
int column = jTable1.getColumnCount(); 
for (int j = 0; j < row; j++) { 
    for (int i = 0; i < column; i++) { 
     System.out.println(jTable1.getValueAt(j, i)); 
    } 
} 

예를 수행 할 수 있습니다

int row = jTable1.getSelectedRow(); 
int column = jTable1.getColumnCount(); 
for(int i = 0; i < column; i++) { 
    System.out.println(jTable1.getValueAt(row, i)); 
} 

당신은 상관없이 jtable

거기에 얼마나 많은 열이 모든 값이 JTable의 다음 시도하려는 경우, 선택된 행의 모든 ​​값을 얻을 Object[]을 사용하여 값을 저장하십시오.예를 들어 :

Object[] val = new Object[column]; 
for (int k = 0; k < val.length - 1; k++) { 
    for (int j = 0; j < row; j++) { 
     for (int i = 0; i < column; i++) { 
      val[k] = jTable1.getValueAt(j, i); 
      System.out.println(val[k]); 
     } 
    } 
} 
+0

와우 효과가 있습니다! 덕분에, 그것은 Jtable 값을 가져와 그것을 인쇄했습니다. – Zyrax

+0

그러나 변수에 값을 저장하려면 어떻게해야합니까? Object [] 배열을 사용하여 저장해야합니까? – Zyrax

+0

예 Object []를 사용하여 내 대답의 예를 볼 수 있습니다. 나는 당신을 위해 그 일을 희망한다. – Rajshri

2
private void jTable1MousePressed(java.awt.event.MouseEvent evt) {          

int selectedRow; 

ListSelectionModel rowSM = jTable1.getSelectionModel(); 

    rowSM.addListSelectionListener(new ListSelectionListener() 
    { 
    @Override 
    public void valueChanged(ListSelectionEvent e) 
    { 
     ListSelectionModel lsm = (ListSelectionModel) e.getSource(); 

     selectedRow = lsm.getMinSelectionIndex(); 

     int numCols = jTable1.getColumnCount(); 

     model = (DefaultTableModel) jTable1.getModel(); 

     System.out.print(" \n row " + selectedRow + ":"); 

     for (int j = 0; j < numCols; j++) 
     { 
      System.out.print(" " + model.getValueAt(selectedRow, j)); 
     } 

    } 
}); 
} 

이 사용하면 u는 특정 행을 클릭 전체 행의 값을 얻을 수 있습니다.

+0

그래서 테이블을 클릭 할 때마다 다른 선택 리스너를 추가합니까? 정말 지저분해질 것입니다. – MadProgrammer