开发Eclipse自定义控件
2009-12-14 00:00:00 来源:WEB开发网接下来,我们要让我们的控件响应鼠标对列表项进行选择。首先我们要计算出鼠标选中的行号,注意MouseEvent中的y值只是相对于控件左上角的坐标,我们需要加上滚动出了控件的部分。
addMouseListener(new MouseListener() {
public void mouseDoubleClick(MouseEvent e) {
}
public void mouseDown(MouseEvent e) {
int row = (e.y - cy) / lineHeight; //计算选中的行
if (row >= 0) {
oldRowSel = rowSel;
rowSel = row;
}
if (oldRowSel != rowSel) { // 重画旧的和新的选择项
((Canvas) e.getSource()).redraw(cx, (e.y / lineHeight)
* lineHeight, maxX, lineHeight, false);
((Canvas) e.getSource()).redraw(cx, (oldRowSel + cy
/ lineHeight)
* lineHeight, maxX, lineHeight, false);
}
selectionChanged();
}
public void mouseUp(MouseEvent e) {
}
});
当我们的控件获得焦点时,选中的列表项需要有虚框表示控件得到焦点。当获得或失去焦点是,我们这里只需要简单的通知选中的项重画。
addFocusListener(new FocusListener() {
public void focusGained(FocusEvent e) {
((Canvas) e.getSource()).redraw(cx, rowSel * lineHeight, maxX,
lineHeight, true);
}
public void focusLost(FocusEvent e) {
((Canvas) e.getSource()).redraw(cx, rowSel * lineHeight, maxX,
lineHeight, true);
}
});
更多精彩
赞助商链接