2013-04-10 2 views
3

저는 java, 특히 java의이 편이 상당히 새로워졌습니다. 나는 현재 데이터의 CSV 파일을 가져올 JTable을 만들려고하고 있는데, 테이블은 GUI의 특정 부분을 선택할 수있는 GUI에 표시되어 시각화를 생성한다. 지금은 mouseClicked에 MouseListener를 사용하고 있습니다. 이것은 셀을 명령 행으로 올바르게 출력합니다. 그러나 mouseDragged에 MouseMotionListener를 사용하면 clicked (mouseClicked에서) 셀을 여러 번 인쇄합니다. 나는 그것이 mouseClicked (또는 atleast라고 생각하는)와 관련이 있다고 생각하지만 그 주위에서 머리를 얻을 수는 없다.JTable에서 MouseMotionListener를 사용하여 명령 줄에 데이터를 인쇄하려고합니다.

코드 : 어떤 도움

import java.awt.Dimension; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseMotionAdapter; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import java.awt.Color; 

public class TableView extends ChartGUI{ 

     /** 
     * 
     */ 
     public JScrollPane GetPanel() { 
       return scrollPane; 
     } 
     public void SetScrollPane(JScrollPane pane) { 
       scrollPane = pane; 
     } 
     public TableView(String title, Object[][] data) { 
       if(data != null) { 
         Object[] columnNames = data[0]; 
         Object[][] tableData = new Object[data.length][]; 
        for(int i = 0; i < (data.length - 1); i++){ 
         tableData[i] = data[i+1]; 
        } 

        table = new JTable(tableData, columnNames); 
        table.setCellSelectionEnabled(true); 
        JScrollPane scrollPane = new JScrollPane(table); 
        scrollPane.setPreferredSize(new Dimension(PANE_WIDTH, PANE_HEIGHT)); 
        SetScrollPane(scrollPane); 
       } else { 
         System.out.println("Null Data"); 
       } 

     /** MouseListener to allow users to select specific cells, printing the data to the command line */    
       table.addMouseListener(new MouseAdapter() {    
         public void mouseClicked(MouseEvent evt) {  
           col = table.getSelectedColumn(); 
           row = table.getSelectedRow(); 
           selData = GetData(table, row, col); 

           System.out.println("Selected data: MouseClicked :: " + (String)selData); 
         } 
       }); 
       table.addMouseListener(new MouseAdapter() { 
         public void mouseReleased(MouseEvent evt) { 
           col = table.getSelectedColumn(); 
           row = table.getSelectedRow(); 
           selData = GetData(table, row, col); 

           System.out.println("Selected data: MouseReleased :: " + (String)selData); 
         } 
       }); 
       table.addMouseMotionListener(new MouseMotionAdapter() { 
         public void mouseDragged(MouseEvent evt) {      
           col = table.getSelectedColumn(); 
           row = table.getSelectedRow(); 
           selData = GetData(table, row, col); 

           System.out.println("Selected data: MouseDragged :: " + (String)selData); 

         }   
       }); 

     }  
     /** A method to return the values at an index selected by the user, as a String */ 
     public String GetData(JTable table, int row_index, int col_index){ 
       return (String)table.getModel().getValueAt(row_index, col_index); 
     } 

     public static void main(String[] args){ 
       System.out.println("Why are you doing this?, maybe we should have some JUnit Tests");   
    } 

     private static final long serialVersionUID = 4901866775892531001L; 
     private JScrollPane scrollPane; 
     private JTable table; 
     private String selData; 
     private int col; 
     private int row; 
     private int PANE_WIDTH = 900; 
     private int PANE_HEIGHT = 600; 
} 

감사합니다는, 많은 감사!

+1

인쇄 할 내용을 말하지 않았습니다. 현재 선택한 셀을 인쇄하고 있지만 인쇄 할 내용을 알 수는 없습니다. 선택 항목이 변경 될 때마다 전체 선택 항목을 인쇄하려면 Mouse 및 MouseMotion Listener를 사용하지 말고 표의 선택 모델에 ListSelectionListener를 추가해야합니다. –

+1

관련 없음 : a) [setXXSize를 사용하지 마십시오.] (http://stackoverflow.com/a/7229519/203657) b) Java 명명 규칙을 배우고 따르십시오. – kleopatra

+0

setPreferredSize(), setMaximumSize() 및 setMinimumSize()를 절대로 사용하지 말고 조언하는 것은 완전히 난센스입니다. 당신은 절대적으로 필요로 할 때만 이들을 간과해서 사용해야하며, 각 레이아웃 관리자가 각 방법을 지원하는지 알아야합니다. 그러나 이러한 메서드는 레이아웃 관리자의 힌트이며 필요한 경우 사용할 수 있습니다. – Michael

답변

0

표 셀은 마우스 동작으로 선택되지 않으므로 클릭하면 선택됩니다. mouseDragged 메서드는 해고 될 때마다 선택한 표 셀의 정보를 인쇄하지만 클릭하면 선택한 표 셀만 변경됩니다. mouseEvent에서 현재 마우스 위치를 가져 와서 해당 정보를 사용하여 새 표 셀을 선택한 다음 정보를 인쇄하고 싶을 것입니다.

관련 문제