使用鼠标适配器绘制一条线不显示 Java



找到了这个示例代码,点击后应该会生成一条画线,但不显示任何内容或工作。假设所有导入语句都是正确的,代码没有给出任何错误,我不知道为什么它不起作用。线条颜色为红色,而背景为白色,因此如果有效,则应清楚地显示。鼠标侦听器似乎也是正确的。此代码不起作用的任何原因?

public class PathPanel extends JPanel {
/**
 * The panel width.
 */
public static final int WIDTH = 400;
/**
 * The panel height.
 */
public static final int HEIGHT = 400;
/**
 * The background color of the panel.
 */
public static final Color BACKGROUND_COLOR = Color.WHITE;
/**
 * The color to paint with.
 */
public static final Color FOREGROUND_COLOR = Color.RED;
/**
 * The line width.
 */
public static final int LINE_WIDTH = 8;
// Instance Fields
/**
 * 
 */
private static final long serialVersionUID = -3644129903653409515L;
/**
 * The path being created.
 */
private final Path2D myPath;
// OR you could use Path2D.Double instead of GeneralPath
// Constructor
/**
 * Constructs a new general path panel.
 */
public PathPanel() {
    super();
    myPath = new GeneralPath();
    myPath.setWindingRule(GeneralPath.WIND_EVEN_ODD);
    //myPath = new Path2D.Double();
    setPreferredSize(new Dimension(WIDTH, HEIGHT));
    setBackground(BACKGROUND_COLOR);
    addMouseListener(new MyMouseListener());
}
/**
 * Paints the current path.
 * 
 * @param theGraphics The graphics context to use for painting.
 */
@Override
public void paintComponent(final Graphics theGraphics) {
    super.paintComponent(theGraphics);
    final Graphics2D g2d = (Graphics2D) theGraphics;
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                         RenderingHints.VALUE_ANTIALIAS_ON);
    g2d.setPaint(FOREGROUND_COLOR);
    g2d.setStroke(new BasicStroke(LINE_WIDTH));
    g2d.draw(myPath);
}
// Main Method
/**
 * Creates and displays a GeneralPathPanel.
 * 
 * @param theArgs Command line arguments (ignored).
 */
public static void main(final String... theArgs) {
    final PathPanel panel = new PathPanel();
    final JFrame frame = new JFrame("GeneralPathPanel Demo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(panel);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}
// Inner Class
/**
 * Listens for mouse clicks, to draw on our panel.
 */
private class MyMouseListener extends MouseAdapter {
    /**
     * Handles a click event.
     * 
     * @param theEvent The event.
     */
    @Override
    public void mouseClicked(final MouseEvent theEvent) {
        if (myPath.getCurrentPoint() == null) {
            myPath.moveTo(theEvent.getX(), theEvent.getY());
        } else if (theEvent.getClickCount() == 2) {
            myPath.closePath();
        } else {
            myPath.lineTo(theEvent.getX(), theEvent.getY());
        }
        repaint();
    }
}

}

您发布的示例代码对我来说很好用。您是否尝试过在mouseClicked(final MouseEvent theEvent)方法中添加System.out.println()以检查它是否实际被调用?如果未调用,您可以尝试将其更改为 mouseReleased

我使用的导入:

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.GeneralPath;
import java.awt.geom.Path2D;

相关内容

  • 没有找到相关文章

最新更新