java - 我想用鼠标输入在窗口上绘制像素

标签 java window mouse pixel

我花了几天时间寻找一种通过鼠标捕获将像素绘制到 Java 窗口的方法。我正在寻找一些我可以插入的框架。看起来好像很简单......任何帮助将不胜感激。

(编辑) 这是一些不起作用的代码。

public class Base extends JPanel implements MouseMotionListener {

    public static void main(String[] args) {
        new Base();
    }

    final static int width = 800;
    final static int height = 600;
    BufferedImage img;
    Base() {
        img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB_PRE);
        JFrame frame = new JFrame();
        frame.addMouseMotionListener(this);
        frame.add(this);
        frame.setSize(width, height);
        frame.setEnabled(true);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    @Override
    public void mouseDragged(MouseEvent e) {
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        Graphics g = img.getGraphics();
        g.drawRect(1, 1, width - 2, height - 2);
        g.dispose();
        repaint();
    }
    @Override 
    public void paintComponent(Graphics g) {
         g.drawImage(img, 0, 0, null);
    }

}

最佳答案

enter image description here

查看代码中的注释。

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;

public class Base extends JPanel implements MouseMotionListener {

    public static void main(String[] args) {
        new Base();
    }

    final static int width = 400;
    final static int height = 300;
    BufferedImage img;
    Base() {

        img = new BufferedImage(width, height, 
            BufferedImage.TYPE_INT_ARGB_PRE);
        // do in preference to setting the frame size..
        setPreferredSize(new Dimension(width, height));
        JFrame frame = new JFrame();
        this.addMouseMotionListener(this); // INSTEAD OF THE FRAME
        frame.add(this);
        //frame.setSize(width, height);  DO INSTEAD...
        frame.pack();
        //frame.setEnabled(true);  REDUNDANT
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  // good call!
    }

    @Override
    public void mouseDragged(MouseEvent e) {
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        Graphics g = img.getGraphics();
        g.setColor(Color.RED);  // SET A COLOR
        g.drawRect(1, 1, width - 2, height - 2);

        // DO SOMETHING UGLY
        g.setColor(Color.blue);
        Point p = e.getPoint();
        g.fillOval(p.x,p.y,5,5);

        g.dispose();
        repaint();
    }
    @Override
    public void paintComponent(Graphics g) {
         g.drawImage(img, 0, 0, null);
    }
}

关于java - 我想用鼠标输入在窗口上绘制像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6553845/

相关文章:

c# - 如何捕捉结束调整窗口?

javascript - 如何在页面加载时调用 Javascript 函数

objective-c - 如何有效地为 NSView 设置 Cursor?

java - 在 Javafx 上,有没有办法在不知道所有点的坐标(但只知道边数?)的情况下绘制正多边形?

java - 用于非 Spring 应用程序的 Junit 测试的嵌入式数据库

cocoa - 隐藏 NSWindow 的一部分(动画)

emacs - 设置键无操作的最佳方法

java - 将数据从 UI 传递到数据库时出现问题 - JSF、JPA 等

java - 如何显示重定向回不同 servlet 时保留的错误消息?

user-interface - 在 NetLogo 中检测鼠标点击/鼠标松开