gpt4 book ai didi

java - JTable 不会监听 Doubleclicks

转载 作者:行者123 更新时间:2023-12-04 05:42:33 25 4
gpt4 key购买 nike

我正在尝试为可编辑的 JTable 实现撤消(和重做)功能使用默认组件。 JTable有一个额外的类来指定其名为 SpecifiedJTable 的属性.

为此,我想捕获双击单元格的时刻(即选择/标记单元格进行编辑的时刻)以将单元格中的信息及其坐标推送到堆栈上。

这应该由 MouseListener 完成……至少这是我的想法。
我试过了(站在我的 SpecifiedJTable 类的构造函数中)

class JTableSpecified extends JTable {
private static final long serialVersionUID = 1L;
private int c; // the currently selected column
private int r; // the currently selected row

public JTableSpecified(String[][] obj, String[] columnNames) {
super(obj, columnNames); // constructs the real table
// makes that you can only select one row at a time
this.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
// makes that columns are not squeezed
this.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// forbids to rearrange the columns
getTableHeader().setReorderingAllowed(false);
// adds action listener
this.getModel().addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {
r = getSelectedRow();
c = getSelectedColumn();
// get the String at row r and column c
String s = (String) getValueAt(r, c);
if (jobDisplayed) jobSwitch(c, s);
else resSwitch(c, s);
}
});
this.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
System.out.println("test");
}
}
});
}
}

但不知何故,clickCounter 不想达到任何高于 1 的值。

我很高兴任何答案和帮助。谢谢。

最佳答案

您遇到的问题与使用 mouseClicked() 有关而不是使用 mousePressed() .在这种情况下,增加点击计数器似乎非常困难,但仍有可能。我需要多次点击和鼠标移动才能将点击计数器增加到 1 以上。您可以在代码中自己尝试。要使计数器超过 1,您需要在鼠标从一个单元格移动到另一个单元格的同时快速按下和释放来使鼠标变得疯狂(或者也许我只是幸运地在单元格之间单击?)。

正如您在这个完全工作的示例中所看到的,使用您的代码,两次鼠标按下,使用 mousePressed()方法正在被检测到就好了。

public class JTableSpecified extends JTable {
private static final long serialVersionUID = 1L;

public JTableSpecified(String[][] obj, String[] columnNames) {
super(obj, columnNames); // constructs the real table
// makes that you can only select one row at a time
this.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
// makes that columns are not squeezed
this.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// forbids to rearrange the columns
getTableHeader().setReorderingAllowed(false);
// adds action listener
this.getModel().addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
}
});
this.addMouseListener(new MouseAdapter() {

@Override
public void mousePressed(MouseEvent e) {
if (e.getClickCount() == 2) {
System.out.println("test");
}
System.out.println("e.getClickCount() = " + e.getClickCount());
}
});
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
JPanel panel = new JPanel();
panel.add(new JTableSpecified(new String[][]{{"oi", "oi2"}, {"oi3", "oi4"}}, new String[]{"Col1", "Col2"}));
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(panel);
f.pack();
f.setVisible(true);
}
});
}
}

结论:也许您实际上想使用 mousePressed()方法?

关于java - JTable 不会监听 Doubleclicks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11105133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com