ホームページ >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 と統合するにはGUI の場合、JPanel にボタンを追加する必要があります。ボタンがクリックされると、MouseHandler の MouseClicked メソッドがトリガーされ、線が描画されます。

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


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


   }
});
contentPane.add(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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。