我想知道如何在屏幕上绘制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

10-07 16:41
查看更多