我有一个非常奇怪的问题,我有一个自定义的JPanel,我想绘制一个圆圈,但没有任何反应......这是我的来源,希望有人看到错误,我找不到它。< / p>
import javax.swing.JPanel;
public class CircleView extends JPanel {
public CircleView() {}
@Override
public void paintComponent(Graphics g) {
g.setColor(Color.red);
g.drawOval(10, 10, 50, 50);
}
}
答案 0 :(得分:3)
这根本不是真的
Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError
at KondorExport.Util.Helping.CustomComponent12.<init>(CustomComponent12.java:19)
at KondorExport.Util.Helping.CustomComponent12$1.run(CustomComponent12.java:37)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.lang.RuntimeException: Uncompilable source code - class CircleView is public, should be declared in a file named CircleView.java
at KondorExport.Util.Helping.CircleView.<clinit>(CustomComponent12.java:44)
... 10 more
1)删除构造函数
2)添加super.paintComponent(g);
这个可以运行
class CircleView extends JPanel {
private static final long serialVersionUID = 1L;
@Override
public Dimension getPreferredSize() {
return new Dimension(100, 100);
}
@Override
public void paintComponent(Graphics g) {
int margin = 10;
Dimension dim = getSize();
super.paintComponent(g);
g.setColor(Color.red);
g.drawOval(margin, margin, dim.width - margin * 2, dim.height - margin * 2);
}
}
答案 1 :(得分:3)
这是因为你的组件没有维度,因此@mKorbel提供的sscce在定义组件的首选大小时会使用一些“魔术”维度。