2

jcomponent がどのように画面に描画されるのか疑問に思っていますが、Graphics の paintComponent() 内に描画されていますか? それとも別塗装ですか?repaint() が呼び出されないにもかかわらず、マウスホバーで jbutton がどのように色を変えるかが奇妙であるため、私はこれを求めています。

御時間ありがとうございます。

4

3 に答える 3

6

Componentpaintsは彼らの方法で描かれています。Event Dispatch Threadで近い将来にrepaint呼び出される便利なメソッドです。paint


マウスが に入るJButtonと、次のメソッドが呼び出されます (JButtonデフォルト UI の の場合)。

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();
}

Sorepaint 、マウスが a に入ると呼び出されJButtonます。

于 2012-08-25T02:03:22.240 に答える
5

.. repaint() が呼び出されなくても、jbutton はマウスホバーで色が変わります。

もちろんそうだ。そして、このコードはその証拠です。もちろん、Kindle Fire に JRE がない可能性が高いという証拠はありませんが、Kindle Fire は、実行されないプログラミング言語の技術的な点について議論しながら、Q&A サイトと通信するために使用するのにまったく不適切なツールです。デバイス上。

import javax.swing.*;

public class ButtonRepaint {

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override 
            public void run() {
                JButton b = new JButton("Hover Over Me!") {
                    @Override
                    public void repaint() {
                        super.repaint();
                        System.out.println("Repaint");
                    }
                };
                JOptionPane.showMessageDialog(null, b);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}
于 2012-08-25T02:03:36.070 に答える
3

paint()呼び出されるメソッドは、ボタンの UI デリゲートに属し、通常は から派生することに注意してくださいBasicButtonUI。を使用した例がここにMetalButtonUIあります。

于 2012-08-25T02:05:44.783 に答える