私は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;
}
助けてくれてありがとう、どうもありがとう!