Я решил вашу проблему в вашем редакторе:
package jtableheadermouseevent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
/**
*
* @author martijn
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
JFrame fr = new JFrame("JTable Header Mouse Listener");
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JTable table = new JTable();
JScrollPane pane = new JScrollPane(table);
String[][] data = {{"Foo", "Bar"}, {"Baz", "Coffee"}};
String[] columns = {"Header 0", "Header 1"};
DefaultTableModel model = new DefaultTableModel(data, columns);
table.setModel(model);
fr.add(pane);
table.getTableHeader().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
System.out.println("Header clicked : (X: " + e.getX() + ", Y: " + e.getY() + ") With button " + e.getButton() );
int header = table.getTableHeader().columnAtPoint(e.getPoint());
System.out.println("This means header " + header + " is clicked!");
}
});
fr.pack();
fr.setSize(800, 300);
fr.setVisible(true);
}
}
Это прекрасно работает в Linux, поэтому, я полагаю, также в OSX и Windows.Я также проверил это после изменения размера столбцов: он все еще знает, какие столбцы были нажаты.Но после изменения порядка столбцов столбец, который был первым «столбцом 0», стал «столбцом 1».
Но вы всегда можете запретить пользователю перемещать столбцы следующим образом:
table.getTableHeader().setReorderingAllowed(false);
Надеюсь, это поможет