我试图了解在Swing中实际上绘制了哪些组件。我阅读了有关在AWT和Swing中绘画的this article,现在尝试编写以下简单程序:
//A simple wrapper to understan how paint() works
public class MyButton extends JButton{
/**
* Default serialVersionUID
*/
private static final long serialVersionUID = 1L;
private final JButton jButton;
public MyButton(JButton jButton) {
this.jButton = jButton;
}
@Override
public void paint(Graphics g){
jButton.paint(g);
}
}
但是当我尝试将MyButton添加到框架时
JFrame frame = new JFrame("Hello swing");
JPanel panel = new JPanel();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel.add(new MyButton(button));
frame.add(panel);
它什么也没呈现
但是删除后
@Override
public void paint(Graphics g){
jButton.paint(g);
}
它呈现空按钮:
问题:为什么这样做?为什么委派导致渲染失败?
最佳答案
首先,当您发布问题时,您应该发布适当的SSCCE来演示问题。我们不能复制/编译随机的代码行。在解决问题之前,您不知道代码的哪一部分导致了问题。
为什么委派导致渲染失败?
我的猜测是按钮的大小为(0,0),所以没有什么可绘制的。
摆脱自定义绘制方法后,即可绘制真实按钮,因为它的大小确实是因为布局管理器已完成其工作。
关于java - 了解挥杆绘画,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36666555/