jcomponent がどのように画面に描画されるのか疑問に思っていますが、Graphics の paintComponent() 内に描画されていますか? それとも別塗装ですか?repaint() が呼び出されないにもかかわらず、マウスホバーで jbutton がどのように色を変えるかが奇妙であるため、私はこれを求めています。
御時間ありがとうございます。
jcomponent がどのように画面に描画されるのか疑問に思っていますが、Graphics の paintComponent() 内に描画されていますか? それとも別塗装ですか?repaint() が呼び出されないにもかかわらず、マウスホバーで jbutton がどのように色を変えるかが奇妙であるため、私はこれを求めています。
御時間ありがとうございます。
Component
paint
sは彼らの方法で描かれています。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
ます。
.. 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);
}
}
paint()
呼び出されるメソッドは、ボタンの UI デリゲートに属し、通常は から派生することに注意してくださいBasicButtonUI
。を使用した例がここにMetalButtonUI
あります。