私は、私のJTableの中で非選択セルをクリックしてドラッグしたいと思います。 e。テーブルはドラッグモードにする必要があります。問題は、JTableに、選択されていないセルをクリックしてドラッグすると、実際にドラッグモードではなく選択モードにあるというメカニズムがあることです。選択モードはクリックでのみ可能でなければならず、ドラッグ+ドラッグではなくShift +クリックで拡張可能でなければなりません。
私が見つけたことは、BasicTableUIにありましたが、残念ながら関連性のあるものはすべてプライベートです。
質問
どのようにドラッグを経由して選択を防ぐことができますし、非選択セルをクリックして、それをドラッグすると、ドラッグモードに瞬時になりますか?
私は検索しましたが、私が見つけた解決策はどれも満足できませんでした。または、古いJavaバージョン用です。非選択セルをクリックし、マウスをドラッグし
- :
コード
はここに再現するためのいくつかのコードです。細胞が選択されます。
- 選択したセルをクリックしてドラッグします。テーブルはドラッグモードです。
コード:
import java.awt.BorderLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.DropMode;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class Main {
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object rowData[][] = {
{ "a", "a", "a" },
{ "a", "a", "a" },
{ "a", "a", "a" },
{ "a", "a", "a" },
{ "a", "a", "a" },
};
Object columnNames[] = { "Column 1", "Column 2", "Column 3" };
final JTable table = new JTable(rowData, columnNames);
table.setDragEnabled(true);
table.setDropMode(DropMode.INSERT_ROWS);
table.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
boolean selectionIsAdjusting = table.getSelectionModel().getValueIsAdjusting();
if(selectionIsAdjusting) {
System.out.println("selecting");
} else {
System.out.println("dragging");
}
}
});
table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
table.setColumnSelectionAllowed(true);
table.setRowSelectionAllowed(true);
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);
frame.setSize(300, 150);
frame.setVisible(true);
}
}
スクリーンショット:
は助けをありがとうございました!
'あなたは空のセルをクリックして、それをドラッグすると、'あなたは空の意味するか、何のコンテンツセルが(例えば区別しません空の文字列など)、または任意のセルをドラッグするだけですか?投稿されたコードには「空の」セルが含まれていません。 – copeg
ああ、そうです、私はそれを修正しました。それは選択されていない細胞です。私は選択されていないセルをクリックしてドラッグします。 – Roland
質問の2番目の文も更新した方が便利です。 – VGR