我是Java的Graphics部分的新手。我已经创建了一个框架,并在其上添加了一个颜色已设置为绿色的面板。现在,在点击该面板时,我想使用名为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);
}
});
}
}
如果我猜我会说我不应该使用重绘方法,但我被告知要使用它。
答案 0 :(得分:1)
提供的代码无法编译。为了更好地提供帮助,请发布Minimal, Complete, and Verifiable example或Short, Self Contained, Correct Example。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Mypanel extends JPanel {
boolean clicked = false;
Mypanel() {
setBackground(Color.GREEN);
MouseListener mouseListener = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
clicked = true;
repaint();
}
};
this.addMouseListener(mouseListener);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 100);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (clicked) {
g.drawOval(15, 15, 50, 50);
}
}
}
public class algo extends JFrame {
public algo() {
initComponents();
pack();
//jPanel1.setBackground(Color.GREEN); ?!?
}
protected final void initComponents() {
add(new Mypanel());
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new algo().setVisible(true);
}
});
}
}
答案 1 :(得分:-2)
在你的例子中有一些事情需要纠正......
当你创建框架(即在构造函数中)时,你想要调用super()。这是构造函数必须做的第一件事。然后,您可能想要设置初始宽度/高度,并将框架的背景颜色设置为绿色。
您需要添加一个鼠标侦听器,以便实际调用mouseClicked方法。然后让它添加' MyPanel'对象到框架,并调用重绘。
我认为这大致是你的目标。