使用JPanel的简单绘图程序显示了JButton的随机图像

时间:2018-03-28 19:59:06

标签: java

我试图用Java制作一个简单的绘图程序。它有3种颜色和一个JField来输入厚度。它起作用,除了每次我输入一个按钮时,该按钮的图像显示在包含绘图部分的JPanel中。

我知道我可以将paintPane JPanel设置为不透明,但它依赖于绘制它自己以使绘画工作 - 否则它只是拖动屏幕周围的一个点。感谢!!!

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class SimplePainting
{
    //The main method simply creates a frame, and terminates the program
    //once that frame is closed.
    public static void main (String [] args)
    {
        PaintFrame frame = new PaintFrame();

        frame.addWindowListener(new WindowAdapter()
            {
                public void windowClosing(WindowEvent e)
                {
                    System.exit(0);
                }
            }
        );

    }
}

class PaintFrame extends JFrame implements ActionListener
{

    JPanel pane;
    PaintPane drawPane;
    Color paintColor = Color.black;
    private int radius = 5;
    //holds the thickness of the line
    JTextField thick;

    public PaintFrame ()
    {
        //We use the JFrame consturctor to add a title to the frame
        super("Windows Paint");

        //set the main content pane
        pane = (JPanel)getContentPane();
        pane.setLayout(new BorderLayout());

        //make a pane to hold the drawing
        drawPane = new PaintPane();
        drawPane.addMouseMotionListener(drawPane);

        //Make a JPanle to hold all of the buttons
        JPanel buttonPane = new JPanel();
        buttonPane.setLayout(new GridLayout(1,6));

        //add the buttons
        JButton black = new JButton("Black");
        buttonPane.add(black);
        JButton red = new JButton("Red");
        buttonPane.add(red);
        JButton green = new JButton("Green");
        buttonPane.add(green);

        //Make a field to re-enter the thickness
        thick = new JTextField(3);
        thick.setText("5");
        JButton thickness = new JButton("Reset Thickness");
        thickness.addActionListener(this);
        buttonPane.add(thickness);
        buttonPane.add(thick);
        JButton reset = new JButton("New Drawing");
        reset.addActionListener(this);
        buttonPane.add(reset);

        black.addActionListener(this);
        red.addActionListener(this);
        green.addActionListener(this);

        pane.add(drawPane, BorderLayout.CENTER);
        pane.add(buttonPane, BorderLayout.SOUTH);

        setSize(500,200);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e)
    {
        if (e.getActionCommand().equals("Black"))
            paintColor = Color.black;
        else if (e.getActionCommand().equals("Red"))
            paintColor = Color.red;
        else if (e.getActionCommand().equals("Green"))
            paintColor = Color.green;
        else if (e.getActionCommand().equals("Reset Thickness"))
        {
            if (thick.getText() != "")
            {
                int lineThickness = Integer.parseInt(thick.getText());
                radius = lineThickness;
            }
        }
        else if (e.getActionCommand().equals("New Drawing"))
        {
            drawPane.startPaint = false;
            drawPane.repaint();
        }

    }

    class PaintPane extends JPanel implements MouseMotionListener
    {
        private int x;
        private int y;
        // don't paint a point until mouse is dragged
        boolean startPaint = false;
        public PaintPane()
        {
            setBackground(Color.white);
        }

        //paints a circle centered at x,y
        public void paint(Graphics g)
        {
            //recall that the frist (x,y) coordiantes represent the top left
            //corner of a box holding the circle
            g.setColor(paintColor);
            if (startPaint)
                g.fillOval(x-radius,y-radius, 2*radius, 2*radius);
            else
                super.paintComponent(g);
        }

        public void mouseDragged(MouseEvent e)
        {

            startPaint = true;
            x = e.getX();
            y = e.getY();
            repaint();

        }

        public void mouseMoved(MouseEvent e)
        {
        }

    }
}

0 个答案:

没有答案