3

私はJava、特にJavaのこちら側にかなり慣れていません。現在、データの CSV ファイルを取り込む JTable を作成しようとしています。テーブルは GUI に表示され、データの特定の部分を選択して、そこから視覚化を作成できます。現時点では、mouseClicked に MouseListener を使用しています。これにより、セルがコマンド ラインに正しく出力されます。ただし、mouseDragged に MouseMotionListener を使用すると、(mouseClicked から) クリックされたセルが複数回出力されます。私はそれが mouseClicked と関係があることを知っています(または少なくともそうであると思います)が、それについて頭を悩ませることはできません。

コード:

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;
}

助けてくれてありがとう、どうもありがとう!

4

1 に答える 1

0

表のセルはマウスの動きでは選択されず、クリックによって選択されます。mouseDragged メソッドは、起動されるたびに選択されたテーブル セルの情報を出力しますが、選択されたテーブル セルはクリックしたときにのみ変更されます。おそらく、mouseEvent から現在のマウスの位置を取得し、その情報を使用して新しいテーブル セルを選択し、情報を出力したいと思うでしょう。

于 2013-05-02T13:44:50.550 に答える