首頁 >Java >java教程 >如何在 Java 中使用按鈕點擊在 JPanel 上畫線?

如何在 Java 中使用按鈕點擊在 JPanel 上畫線?

Patricia Arquette
Patricia Arquette原創
2024-12-14 12:22:13454瀏覽

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