两次单击即可添加绘制矩形和椭圆形的可能性

时间:2018-11-13 18:29:13

标签: java swing

我想通过单击两次鼠标来绘制矩形和椭圆形。

我想每次用户单击“矩形”和“椭圆”按钮然后基于事件x和y坐标单击JFrame时绘制一个矩形。 我需要一个组件类来绘制矩形,而我还有另一个类具有JFrame鼠标按下侦听器。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.EventListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JComponent;

import javax.swing.JFrame;

public class Painter extends JFrame implements MouseListener, MouseMotionListener, ActionListener, ChangeListener {

    private JButton clearButton; //Pole danych do przechowywania przycisku czyszczacego
    private JPanel menu;
    private JPanel workspace;

    private JSlider suwak;
    int size;
    private JButton klik;
    private Color kolor;



    public void mouseMoved(MouseEvent e) {}
    public void mouseClicked(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
    public void mouseReleased(MouseEvent e) {}

    public Painter(int sz, int w) {
        //Stworzenie interfejsu graficznego (GUI)
        this.setLayout(new BorderLayout()); //Ustawienie sposobu ukladania komponentow
        menu = new JPanel(); //Stworzenie panelu menu
        menu.setLayout(new FlowLayout()); //Ustawienie layout dla tego panelu
        menu.setBackground(Color.LIGHT_GRAY); //Ustawienie koloru tła
        clearButton = new JButton("Clear"); //Stworzenie nowego przycisku
        menu.add(clearButton); // Dodanie przycisku do panelu menu
        this.add(menu, BorderLayout.NORTH); // Dodanie menu na górze okna
        workspace = new JPanel(); //Stworzenie panelu pola do rysowania
        // dodanie obsługi zdarzeń kliknięcia i ruchu po panelu
        workspace.addMouseListener(this);
        workspace.addMouseMotionListener(this);
        this.add(workspace, BorderLayout.CENTER); // Dodanie pola do rysowania w środku okna
        this.setSize(sz,w); // Ustawienie wymiarów okna
        this.setTitle("Painter"); // Nazwa okna
        clearButton.addActionListener(this); //Aktywowanie obslugi przycisku


        suwak = new JSlider(JSlider.HORIZONTAL, 5, 25, 10);
        suwak.setMajorTickSpacing(10);
        suwak.setMinorTickSpacing(1);
        suwak.setPaintTicks(true);
        suwak.setPaintLabels(true);
        suwak.addChangeListener(this);
        menu.add(suwak);
        size=10;

        klik = new JButton("Set Color");
        klik.addActionListener(this);
        menu.add(klik);
    }

    public void paint(Graphics g)
    {
    // wywołanie metody paint klasy JFrame
    super.paint(g);
    }

    public void actionPerformed(ActionEvent e)
    {
    // TODO Auto-generated method stub
    if(e.getSource() == clearButton) //Sprawdzenie czy zrodlem zdarzenia jest przycisk
    {
    //Czyszczenie pola roboczego
    workspace.getGraphics().clearRect(0, 0, workspace.getWidth(), workspace.getHeight());

    } 
    if(e.getSource() == klik) //Sprawdzenie czy zrodlem zdarzenia jest przycisk
    {

    kolor = JColorChooser.showDialog(null,  "Choose a color", kolor);

    }
    }
    //Rysowanie w momencie przeciagania myszy (przycisniety przycisk + mysz w ruchu)
    @Override
    public void mouseDragged(MouseEvent e) {
    Graphics g = workspace.getGraphics();
    g.setColor(kolor);
    g.fillOval(e.getX()-5, e.getY()-(size/2), size, size);
    e.consume();
    }
    //Rysowanie w momencie przycisniecia przycisku myszy
    @Override
    public void mousePressed(MouseEvent e) {
    Graphics g = workspace.getGraphics();
    g.setColor(kolor);
    g.fillOval(e.getX()-5, e.getY()-(size/2), size, size);
    e.consume();
    }

    public static void main(String[] args)
    {
    Painter paint = new Painter(500,500); //Ustawienia rozmiarów okna
    //Ustalenie operacji po kliknięciu na X
    paint.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    paint.setVisible(true); // Ustawienie widoczności okna


    }


    public void stateChanged(ChangeEvent e)
    {
    if(e.getSource() == suwak) //Sprawdzenie czy zrodlem zdarzenia jest przycisk
    {


        size = suwak.getValue();
    } 
    }


}

0 个答案:

没有答案
相关问题