Ewe*_*wen 2 java swing jcomponent repaint
我想知道如何在屏幕上绘制jcomponent,它是否在Graphics的paintComponent()中绘制?或者它是单独绘制的.我问这个是因为jbutton在mousehover上改变颜色很奇怪,即使从不调用repaint()也是如此.
谢谢你的时间.
Components用他们的paint方法绘制.repaint只是一个有用的方法,将paint在不久的将来调用事件调度线程.
当鼠标进入a时JButton,将调用以下方法(对于JButton具有默认UI的s):
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);
}
Run Code Online (Sandbox Code Playgroud)
ButtonModel.setRollover将触发一个ChangeEvent,由AbstractButton以下方式处理:
public void stateChanged(ChangeEvent e) {
Object source = e.getSource();
updateMnemonicProperties();
if (isEnabled() != model.isEnabled()) {
setEnabled(model.isEnabled());
}
fireStateChanged();
repaint();
}
Run Code Online (Sandbox Code Playgroud)
因此,repaint 在当鼠标进入一个叫JButton.
..a jbutton在mousehover上改变颜色,即使从不调用repaint().
当然是啦.这段代码证明了这一点.当然,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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |