绘制固定多边形的java程序
我正在写一个程序,它可以画一个带有特定点的固定多边形,并告诉你鼠标点是在多边形的内部还是外部。我不知道我需要将代码移到哪里才能修复这些错误。我敢肯定有些东西放错地方了。这就是我现在拥有的:绘制固定多边形的java程序,java,eclipse,Java,Eclipse,我正在写一个程序,它可以画一个带有特定点的固定多边形,并告诉你鼠标点是在多边形的内部还是外部。我不知道我需要将代码移到哪里才能修复这些错误。我敢肯定有些东西放错地方了。这就是我现在拥有的: import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; impor
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.BorderLayout;
import java.awt.Point;
import java.awt.Polygon;
public class Ch3PA extends JFrame {
Polygon polygon = new Polygon();
Point point = new Point(0, 0);
boolean inside = false;
private PaintPanel paintPanel = new PaintPanel();
public PaintPanel()
{
add(paintPanel);
static class PaintPanel extends JPanel
{
polygon.addPoint(40, 20);
polygon.addPoint(70, 40);
polygon.addPoint(60, 80);
polygon.addPoint(45, 45);
polygon.addPoint(20, 60);
@addMouseMotionListener(new MouseAdapter()
{
public void mouseMoved(MouseEvent e)
{
point.x = e.getX();
point.y = e.getY();
if (polygon.contains(e.getX(), e.getY()))
{
inside = true;
repaint();
}
else
{
inside = false;
repaint();
}
}
});
}
}
protected void paintComponent(Graphics g){
super.paintComponents(g);
g.drawPolygon(polygon);
if (inside)
{
g.drawString(inside ? "Mouse point is in the polygon" : "Mouse point is not in the polygon", point.x, point.y);
repaint();
}
}
public static void main(String[] args) {
Ch3PA frame = new Ch3PA();
frame.setTitle("Ch3PA");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.setVisible(true);
}
}
这个
public class Ch3PA extends JFrame {
//...
public PaintPanel()
毫无意义。您已经定义了一个名为Ch3PA的类,但为它定义了一个名为PaintPanel的构造函数
然后在构造函数中定义一个类
static class PaintPanel extends JPanel
{
polygon.addPoint(40, 20);
polygon.addPoint(70, 40);
polygon.addPoint(60, 80);
polygon.addPoint(45, 45);
polygon.addPoint(20, 60);
@addMouseMotionListener(new MouseAdapter()
{
public void mouseMoved(MouseEvent e)
{
point.x = e.getX();
point.y = e.getY();
if (polygon.contains(e.getX(), e.getY()))
{
inside = true;
repaint();
}
else
{
inside = false;
repaint();
}
}
});
即使这是合法的,polygon.addPoint也不会工作,因为您试图在可执行上下文方法、构造函数和静态块之外执行代码
@addMouseMotionListener是非法语法,您不应该使用@
不要叫重新油漆;在任何绘制方法中,这都会消耗CPU,导致无休止的重新绘制
你在调用super.paintComponents你的代码毫无意义。您定义了一个名为Ch3PA的类,然后为这个类定义了一个名为PaintPanel的构造函数,这个类似乎是您试图在其中使用的一个内部类……看起来她在复制其他人的代码,但做得很差,而且没有经过思考。这永远不会成为学习编程的一种方法。相反,尝试复制其他程序中的想法,但编写自己的代码。你在哪里添加鼠标侦听器?我会将它添加到JPanel中,没有必要使用未使用的方法。
public class PaintPanel extends JPanel {
Polygon polygon = new Polygon();
Point point = new Point(0, 0);
boolean inside = false;
public PaintPanel() {
polygon.addPoint(40, 20);
polygon.addPoint(70, 40);
polygon.addPoint(60, 80);
polygon.addPoint(45, 45);
polygon.addPoint(20, 60);
addMouseMotionListener(new MouseAdapter() {
public void mouseMoved(MouseEvent e) {
point.x = e.getX();
point.y = e.getY();
if (polygon.contains(e.getX(), e.getY())) {
inside = true;
repaint();
} else {
inside = false;
repaint();
}
}
});
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawPolygon(polygon);
if (inside) {
g.drawString(inside ? "Mouse point is in the polygon" : "Mouse point is not in the polygon", point.x, point.y);
}
}
}
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new PaintPanel());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JFrame;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Ch3PA extends JFrame {
public static void main(String[] args) {
new Ch3PA();
}
public Ch3PA() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new PaintPanel());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class PaintPanel extends JPanel {
Polygon polygon = new Polygon();
Point point = new Point(0, 0);
boolean inside = false;
public PaintPanel() {
polygon.addPoint(40, 20);
polygon.addPoint(70, 40);
polygon.addPoint(60, 80);
polygon.addPoint(45, 45);
polygon.addPoint(20, 60);
addMouseMotionListener(new MouseAdapter() {
public void mouseMoved(MouseEvent e) {
point.x = e.getX();
point.y = e.getY();
if (polygon.contains(e.getX(), e.getY())) {
inside = true;
repaint();
} else {
inside = false;
repaint();
}
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawPolygon(polygon);
if (inside) {
g.drawString(inside ? "Mouse point is in the polygon" : "Mouse point is not in the polygon", point.x, point.y);
}
}
}
}