2016-06-11 14 views
0

나는 JTable을 가지고있다. 유저가 셀을 클릭하면 (자), 그 셀의 전체 행의 데이터를 열 포맷으로 표시하는 다른 JTable가 작성됩니다 (즉, 행은 열로 변환됩니다).테이블 모델에 MouseListener를 추가하는 방법

이것은 사용자가 클릭 할 때마다 발생하지만 조금씩 짜증나는 일이 있으므로 매번 두 번 클릭하면됩니다.

문제는 테이블의 getSelection 메서드는 MouseListener가 아닌 addListSelectionListener 메서드를 사용한다는 것입니다. 내가 원하는 걸 어떻게 할 수 있니? 여기

코드입니다 :

public void valueChanged(ListSelectionEvent e) { 
       if (!e.getValueIsAdjusting()) { 
        int selectedRow = table.getSelectedRow(); 
        DefaultTableModel newModel = new DefaultTableModel(); 
        String rowName = "Row: " + selectedRow; 
        newModel.setColumnIdentifiers(new Object[]{rowName}); 
        for (int i = 0; i < table.getModel().getColumnCount(); i++) { 
         newModel.addRow(new Object[]{table.getModel().getValueAt(selectedRow, i)}); 
        } 
        JTable newTable = new JTable(newModel) { 
         /** 
         * 
         */ 
         private static final long serialVersionUID = 1L; 

         @Override 
         public Dimension getPreferredScrollableViewportSize() { 
          return new Dimension(140, 240); 
         } 
        }; 

        // Apply any custom renderers and editors 
        JOptionPane.showMessageDialog(frame, new JScrollPane(newTable), 
         rowName, JOptionPane.PLAIN_MESSAGE); 
       } 
      } 
     }); 

답변

2

이 경우 사용자가 클릭하지만 그래서는 두 번 클릭에을 할 때마다 일어날 자극 약간

ListSelectionListener가 아닌 MouseListener을 사용합니다. 클릭 수 2의 마우스 이벤트를 확인하십시오.

자세한 내용과 작동 예제는 How to Write a MouseLister의 스윙 튜토리얼 섹션을 참조하십시오.

또한 두 번 클릭하면 기본적으로 편집기가 시작되므로 셀을 편집 할 수 없도록하고 싶습니다. 따라서 테이블의 isCellEditable(...) 메서드를 재정의해야 할 수도 있습니다.