我想知道如何在屏幕上绘制jcomponent,它是在Graphics的paintComponent()内部绘制的吗?还是单独绘制。我之所以这样问,是因为即使从未调用过repaint(),它的jbutton如何在鼠标悬停时也会改变颜色。
谢谢你的时间。
最佳答案
Component
用其paint
方法绘制。 repaint
只是一个有用的方法,它将在不久的将来在Event Dispatch Thread上调用paint
。
当鼠标进入JButton
时,将调用以下方法(对于具有默认UI的JButton
):
public void mouseEntered(MouseEvent e) {
AbstractButton b = (AbstractButton) e.getSource();
ButtonModel model = b.getModel();
if (b.isRolloverEnabled() && !SwingUtilities.isLeftMouseButton(e)) {
model.setRollover(true);
}
if (model.isPressed())
model.setArmed(true);
}
ButtonModel.setRollover
将触发ChangeEvent
,由AbstractButton
通过以下方式处理:public void stateChanged(ChangeEvent e) {
Object source = e.getSource();
updateMnemonicProperties();
if (isEnabled() != model.isEnabled()) {
setEnabled(model.isEnabled());
}
fireStateChanged();
repaint();
}
因此,当鼠标进入
repaint
时将调用JButton
。