0
我需要這樣的行爲:鼠標光標指向JTable
單元格的時間 - 需要顯示彈出式菜單或類似的東西。沒有單擊鼠標在單元格上。有什麼建議麼?在JTable單元格中顯示鼠標光標時彈出菜單
我需要這樣的行爲:鼠標光標指向JTable
單元格的時間 - 需要顯示彈出式菜單或類似的東西。沒有單擊鼠標在單元格上。有什麼建議麼?在JTable單元格中顯示鼠標光標時彈出菜單
JB Nizet有一個很好的觀點。 OTOH,我準備了這個例子,'我們有技術'。
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
class TimesTable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JTable t = new JTable(new TimesTableModel());
t.setDefaultRenderer(Object.class, new TimesTableRenderer());
JOptionPane.showMessageDialog(null, t);
}
});
}
}
class TimesTableRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(
JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
Component c = super.getTableCellRendererComponent(
table,value,isSelected,hasFocus,row,column);
JComponent jc = (JComponent)c;
jc.setToolTipText(
(row+1) + "x" + (column+1) + "=" + ((row+1)*(column+1)));
return jc;
}
}
class TimesTableModel extends DefaultTableModel {
@Override
public int getColumnCount() {
return 7;
}
@Override
public int getRowCount() {
return 5;
}
@Override
public Object getValueAt(int row, int column) {
return new Integer((row+1)*(column+1));
}
}
感謝您的關注。我需要更改單元格中的數據,但這樣做只需點擊一下鼠標即可!一個來自變種它如何我上面說過。我有兩個按鈕彈出菜單:「訪問」和「禁止」。並且我想出了這樣的解決方案...
public class PopupMenuMouseMotionListener implements MouseMotionListener {
private JXTreeTable jxTreeTable;
private TreeTableModel model;
private JPopupMenu popupMenu;
private boolean inCell = false;
private Rectangle r = null;
private boolean visible = false;
private long startTime = 0L;
private Component[] buttons;
PopupMenuMouseMotionListener(JXTreeTable jxTreeTable, TreeTableModel model, JPopupMenu popupMenu) {
this.jxTreeTable = jxTreeTable;
this.model = model;
this.popupMenu = popupMenu;
this.buttons = popupMenu.getComponents();
}
public void mouseDragged(MouseEvent event) {
//Does nothing
}
public void mouseMoved(MouseEvent event) {
Point point = event.getPoint();
int row = jxTreeTable.rowAtPoint(point);
int column = jxTreeTable.columnAtPoint(point);
double time = 0.0;
if (column >= 1) {
if (startTime == 0L) {
startTime = System.currentTimeMillis();
};
long ms = System.currentTimeMillis() - startTime;
time = ms/1000 + ms % 1000;
if (r == null) {
r = jxTreeTable.getCellRect(row, column, false);
};
inCell = true;
Component c = event.getComponent();
if (inCell && r.contains(point)) {
if (time >= 100.50 && visible == false) {
popupMenu.show(c, r.x, r.y);
visible = true;
}
} else {
popupMenu.setVisible(false);
inCell = false;
startTime = 0L;
r = null;
visible = false;
}
} else popupMenu.setVisible(false);
}
}
,你有什麼看法呢?
我會理解一個工具提示,但彈出菜單會非常煩人。我更喜歡點擊一次來獲得彈出式菜單,而不是點擊百次來隱藏我沒有問過的彈出式菜單。 – 2012-03-03 08:38:21
@JBNizet從此取決於 - 你是如何做到的:) – dvigal 2012-03-03 16:06:58