我还在学习Java,我可以编写简单的软件,但在创建GUI时我完全是垃圾。 我想创建一个简单的GUI,在屏幕上打印出一个简单的矩形,用户在该GUI中点击的位置,矩形将移动到该位置。
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class circle extends JPanel implements MouseListener {
int x = 0;
int y = 0;
public void paint(Graphics g) {
g.setColor(Color.BLUE);
g.fillRect(x, y, 25, 10);
}
@Override
public void mouseClicked(MouseEvent m) {
x = m.getX();
y = m.getY();
repaint();
}
我显然错过了mouseEntered / Exited / Pressed / Released,因为它还没有包含任何代码。我无法理解的是,为什么矩形不会在我点击的地方打印出来,除非我使用错误的方法,如重绘....
我的主要课程:
import javax.swing.JFrame;
public class main {
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame f = new JFrame("Circle Prog");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
circle co = new circle();
f.add(co);
f.setSize(300, 300);
f.setVisible(true);
}
}
答案 0 :(得分:1)
MouseListener
尚未在面板中注册
public class CirclePanel extends JPanel implements MouseListener {
int x = 0;
int y = 0;
public CirclePanel() {
addMouseListener(this);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillRect(x, y, 25, 10);
}
...
}
一些注释
paintComponent
代替paint
进行自定义绘制,并记住调用super.paintComponent(g)
。虽然paint
可能有效,但它不会利用Swings优化的油漆模型答案 1 :(得分:1)
两件事:
1)您需要添加MouseListener。也许在构造函数中:
public circle() {
addMouseListener(this);
}
2)您需要致电super.paint(g)
。