【发布时间】:2015-10-30 17:34:38
【问题描述】:
我对 Java 的图形部分非常陌生。我创建了一个框架,并在其上添加了一个面板,其颜色已设置为绿色。现在单击该面板时,我想使用名为 Mypanel 的测试类对象绘制一个圆圈。但它不会发生。请指导!
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);
}
});
}
}
如果我猜的话,我会说我不应该使用 repaint 方法,但有人告诉我这是要使用的。
【问题讨论】:
-
在我看来,当你改变结构时,你需要重新绘制,即椭圆形到方形或类似的。在大多数情况下,组件更改会自动反映。当您调用特定属性的 setter 方法时。
-
无法确定,因为您的问题中没有包含
initComponents()方法,但可能的原因是您的Mypanel实例的宽度为零,高度为零。您可以通过在 Mypanel 类中覆盖 getPreferredSize() 来解决此问题。此外,被覆盖的paintComponent 方法的第一行应始终为super.paintComponent(g);。如果你不这样做,你会看到奇怪的行为。 -
根据您的代码,我相信您是一名 C# 程序员,对吧?在 Java 中,仅使用您的对象名称和后缀
MouseClicked创建一个方法根本不会向您的对象添加事件。我建议你先学习更多关于 Java、事件、命名约定的知识,然后再重写你的代码 =)
标签: java swing repaint mouselistener swingx