2010-05-07 5 views
1

저는 스윙의 초록색 사용자입니다. java.sun 튜토리얼의 예제를 사용하여 테이블 클래스를 만들었고 데이터를 동적으로로드 할 수있었습니다. 대화 상자를 표시하여 행에 대한 클릭에 반응 할 수 있기를 원합니다. 선택한 행 번호를 식별하는 이벤트 처리기를 어떻게 추가합니까?스윙 테이블에 mouseClicked 이벤트를 추가하려면 어떻게해야합니까?

주요 기능 코드 :

public static void main(String[] args) { 
    javax.swing.SwingUtilities.invokeLater(new Runnable() { 

     public void run() { 
      try { 
       MainWindow window = new MainWindow(); 
       window.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       //Create and set up the content pane. 
       createAndShowGUI(); 
       //... 
      } 
     } 
    } 
} 

private static void createAndShowGUI() { 
    //Create and set up the window. 

    JFrame frame = new JFrame("Data Table"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    //Create and set up data of the content pane. 
    TableClass mainTable = new TableClass(fh.getColNames(), fh.getTableContent()); 

    mainTable.setOpaque(true); 
    frame.setContentPane(mainTable); 


    //Display the window. 
    frame.pack(); 
    frame.setVisible(true); 
} 

당신

+0

서식있는 코드; 잘못된 경우 되돌려주십시오. – trashgod

답변

5
 table.addMouseListener(new MouseAdapter() { 
      @Override 
      public void mouseClicked(MouseEvent e) { 
       if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 1) { 
        int selectedRowIndex = table.getSelectedRow(); 
        //show your dialog with the selected row's contents 
       } 
      } 
     }); 
+0

SwingUtilities.isLeftMouseButton (e)는 꽤 좋은 속임수입니다. +1 – Xorty

+0

이것은 마우스를 클릭 한 셀을 확인하기위한 표 선택을 기반으로합니다. 이것은 대부분 왼쪽 클릭에 대해 좋지만, - 클릭은 무엇입니까? 오른쪽 클릭은 테이블 선택을 조정하지 않습니다 ... – zigdon

1

에게 포인트의 몇 감사드립니다.

Bozhidar Batsov의 대답은 정확합니다. 그러나 테이블에 대한 참조가 반드시 필요한 것은 아닙니다 (예 : 마우스 수신기가 다른 클래스 또는 다른 클래스에있는 경우). 포인트는, MouseEvent의 getSource() 메소드에서 테이블을 찾을 수 있습니다. JTable에 안전하게 전송할 수 있습니다.

또한 table.getSelectedRow()는 실제로 테이블에서 선택된 행이없는 경우 -1을 반환 할 수 있습니다. 예를 들어 사용자가 표의 "공백"(그리드 ​​바깥 영역이지만 텍스트 영역에있는 영역)을 클릭하면 이런 일이 발생합니다. 코드에서 -1을 테스트하십시오.

+0

저에게 좋은 아이디어를 주신 모든 사람들에게 감사드립니다. Bozhidar Batsov가 제공 한 코드를 사용하여 문제를 해결했습니다. 또한 어떤 행도 테이블에서 실제로 선택되지 않은 경우 -1을 반환합니다. (taftser의 경고) – Ayelet

+0

내 질문에 대한 답변을 표시하고 더 답변을 필요로하지 않는다는 표시 방법이 있습니까? (나는 스윙을 처음 접했을뿐만 아니라이 사이트를 처음 사용합니다.) – Ayelet

+0

가장 좋아하는 답변 옆에있는 체크 표시를 클릭하면 원하는 대답으로 표시하고 효과적으로 문제를 푸는 녹색으로 표시됩니다. –

관련 문제