> Java > java지도 시간 > Java에서 버튼 클릭을 사용하여 JPanel에 선을 그리는 방법은 무엇입니까?

Java에서 버튼 클릭을 사용하여 JPanel에 선을 그리는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-14 12:22:13
원래의
451명이 탐색했습니다.

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 메서드를 수정할 수 있습니다.

여러 선 처리

여러 선을 그리려면 클릭한 지점을 저장할 수 있습니다. 사용자가 그 사이에 선을 그립니다. List를 사용할 수 있습니다. 점을 저장한 다음 각 연속 점 쌍 사이에 선을 그립니다.

구현 예

다음은 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과 "Clear" 버튼이 있는 JFrame을 생성합니다. 사용자가 JPanel을 클릭하면 선 그리기가 시작됩니다. 마우스를 움직이면 선이 늘어납니다. 마우스를 놓으면 선이 완성됩니다. "지우기" 버튼을 사용하면 모든 줄을 지우고 다시 시작할 수 있습니다.

위 내용은 Java에서 버튼 클릭을 사용하여 JPanel에 선을 그리는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿