首页 >Java >java教程 >如何在 Java 中使用按钮点击在 JPanel 上画线?

如何在 Java 中使用按钮点击在 JPanel 上画线?

Patricia Arquette
Patricia Arquette原创
2024-12-14 12:22:13456浏览

How to Draw Lines on a JPanel Using Button Clicks in Java?

如何在 Java 中通过单击按钮在 JPanel 中绘制一条线

给定的代码提供了一个图形用户界面 (GUI)一个 JPanel 和几个按钮。目标是单击按钮时在 JPanel 上绘制线条。

绘制线条

要在 JPanel 上绘制线条,可以使用 drawLine() 方法Graphics 对象的:

public void paint(Graphics graphics)
{
    graphics.drawLine(10, 20, 300, 310);
}

此代码从点 (10, 20) 到点 (300, 310)。您可以修改这些坐标以在不同位置和方向绘制线条。

使用鼠标事件进行事件处理

处理用户交互,例如按钮单击和鼠标移动,您可以使用事件侦听器。在本例中,您将使用鼠标侦听器来检测用户何时单击 JPanel。

public class MouseHandler extends MouseAdapter {

    @Override
    public void mouseClicked(MouseEvent arg0) {


        /////////////


    }
}

在 mouseClicked 方法中,您可以编写代码以根据用户的单击绘制线条。

与 GUI 集成

要将画线代码与 GUI 集成,您需要需要向 JPanel 添加一个按钮。单击按钮时,应触发 MouseHandler 的 mouseClicked 方法并绘制线条。

JLabel label = new JLabel("New label");
label.addMouseListener(new MouseHandler() {
   @Override
   public void mouseClicked(MouseEvent arg0) {


    /////////////


   }
});
contentPane.add(label);

在此示例中,名为“New label”的按钮被添加到 JPanel 中。当单击时,它会调用 MouseHandler 的 mouseClicked 方法。您可以修改 mouseClicked 方法以包含绘制线条的代码。

处理多条线

如果要绘制多条线,可以存储单击的点由用户绘制并在它们之间画线。您可以使用列表存储点,然后在每对连续点之间绘制一条线。

示例实现

这里是一个完整的示例,演示了在 JPanel 上绘制多条线:按钮点击次数:

import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

public class Main {

    private ArrayList<Point> points = new ArrayList<>();
    private boolean drawing;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Main().display();
            }
        });
    }

    private void display() {
        JFrame f = new JFrame("LinePanel");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(640, 480));
        panel.addMouseListener(new MouseHandler());
        panel.addMouseMotionListener(new MouseHandler());
        f.add(panel);

        JButton clearButton = new JButton("Clear");
        clearButton.addActionListener(new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent e) {
                points.clear();
                panel.repaint();
            }
        });
        f.add(clearButton, BorderLayout.SOUTH);

        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    private class MouseHandler extends MouseAdapter {

        @Override
        public void mousePressed(MouseEvent e) {
            drawing = true;
            points.add(e.getPoint());
            panel.repaint();
        }

        @Override
        public void mouseReleased(MouseEvent e) {
            drawing = false;
            panel.repaint();
        }

        @Override
        public void mouseDragged(MouseEvent e) {
            if (drawing) {
                points.add(e.getPoint());
                panel.repaint();
            }
        }
    }
}

此示例创建一个带有 JPanel 和“清除”按钮的 JFrame。当用户单击 JPanel 时,它开始绘制一条线。当鼠标移动时,线会延伸。松开鼠标后,线条就完成了。 “清除”按钮可用于清除所有行并重新开始。

以上是如何在 Java 中使用按钮点击在 JPanel 上画线?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn