我对Java的Graphics部分非常陌生。我创建了一个框架,并在其上添加了一个颜色设置为绿色的面板。现在单击该面板,我想使用名为Mypanel的测试类对象绘制一个圆。但它没有发生。请指导!如何在Java Swing中使用重绘方法
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
class Mypanel extends JPanel
{
@Override
public void paintComponent(Graphics g)
{
g.drawOval(15, 15, 5, 5);
}
}
public class algo extends javax.swing.JFrame {
public algo() {
initComponents();
jPanel1.setBackground(Color.GREEN);
}
Mypanel p = new Mypanel() ;
private void jPanel1MouseClicked(java.awt.event.MouseEvent evt) {
p.repaint();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new algo().setVisible(true);
}
});
}
}
如果我猜我会说我不应该使用重绘方法,但我被告知这是要使用。
在我看来,当你改变结构时,你将需要重绘,即椭圆形为方形或相似。在大部分时间里,组件变化会自动反映出来。当你打电话给特定属性的setter方法时。 – Acewin
这是不可能的,因为你的问题中没有包含你的'initComponents()'方法,但可能的原因是你的'Mypanel'实例的宽度为零,高度为零。您可以通过在Mypanel类中覆盖[getPreferredSize()](http://docs.oracle.com/javase/8/docs/api/java/awt/Component.html#getPreferredSize--)来解决此问题。另外,重写的paintComponent方法的第一行应该总是'super.paintComponent(g);'。如果你不这样做,你会看到奇怪的行为。 – VGR
根据你的代码,我相信你是C#程序员,对吧? 在Java中,只有创建一个包含对象名称和修饰符“MouseClicked”的Method才不会将事件添加到对象中。我吸收你学习更多有关Java,事件,命名召唤之前,然后重写你的代码=) –