调用paintComponent方法

时间:2015-04-20 22:47:12

标签: java swing graphics2d

我想通过在课程readyToDraw方法TRUE中使用if...语句,在变量PaintpaintComponent()时绘制一条线。我想我做错了,因为这条线永远不会被画上。我该如何解决?有没有办法从另一种方法调用paintComponent()? 完整代码:

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Rectangle2D;
import java.awt.Graphics2D;
import java.util.Iterator;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.SwingWorker;
import javax.swing.border.LineBorder;

import javax.swing.AbstractAction;
import javax.swing.Action;

public class MainFrame {
    public int x1, x2, y1, y2;
    private boolean readyToDraw = false;
    private int clickCount = 0;
    private JFrame frame;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MainFrame window = new MainFrame();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public MainFrame() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 800, 600);
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JPanel buttonPanel = new JPanel();
        buttonPanel.setBackground(Color.WHITE);
        buttonPanel.setBorder(new LineBorder(new Color(0, 0, 0), 2, true));
        buttonPanel.setBounds(10, 11, 100, 85);
        frame.getContentPane().add(buttonPanel);
        buttonPanel.setLayout(null);

        JPanel paint = new Paint();
        frame.getContentPane().add(paint);

        JButton btnLine = new JButton("Line");
        btnLine.setBackground(Color.LIGHT_GRAY);
        btnLine.setBounds(4, 4, 92, 25);

        btnLine.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                // Execute when button is pressed
                if (readyToDraw == true) {
                    System.out.println("Let's draw!");
                }

                else {

                }
                System.out.println("Line");

            }
        });

        JButton btnRectangle = new JButton("Rectangle");
        btnRectangle.setBackground(Color.LIGHT_GRAY);
        btnRectangle.setBounds(4, 30, 92, 25);

        btnRectangle.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                // Execute when button is pressed
                if (readyToDraw == true) {
                    System.out.println("Let's draw!");
                }

                else {

                }
                System.out.println("Rectangle");
            }
        });

        JButton btnCircle = new JButton("Circle");
        btnCircle.setBackground(Color.LIGHT_GRAY);
        btnCircle.setBounds(4, 56, 92, 25);

        btnCircle.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                // Execute when button is pressed
                if (readyToDraw == true) {
                    System.out.println("Let's draw!");
                }

                else {

                }
                System.out.println("Circle");
            }
        });

        buttonPanel.add(btnLine);
        buttonPanel.add(btnRectangle);
        buttonPanel.add(btnCircle);
    }

    private class Paint extends JPanel implements MouseListener {

        public Paint() {
            this.setBackground(Color.WHITE);
            this.setBounds(120, 11, 664, 550);
            this.addMouseListener(this);
        }

        @Override
        public void paintComponent(Graphics g) {
            Graphics2D g2 = (Graphics2D) g;
            super.paintComponent(g);
            //if (readyToDraw) {

                g2.setStroke(new BasicStroke(4));
                g2.setColor(Color.BLACK);
                g2.drawLine(x1, y1, x2, y2);
            //}
        }
        @Override
        public void mouseEntered(MouseEvent arg0) {
            Toolkit toolkit = Toolkit.getDefaultToolkit();
            Image image = toolkit.getImage("cursor.png");
            Point hotSpot = new Point(15, 15);
            Cursor cursor = toolkit.createCustomCursor(image, hotSpot, "Dot");
            this.setCursor(cursor);
        }

        @Override
        public void mouseExited(MouseEvent arg0) {
            Cursor dotCursor = new Cursor(Cursor.DEFAULT_CURSOR);
            this.setCursor(dotCursor);

        }

        public void mouseClicked(MouseEvent e) {
            int x1 = 0;
            int y1 = 0;
            int x2 = 0;
            int y2 = 0;
            if (clickCount == 0) {
                x1 = e.getX();
                y1 = e.getY();
                clickCount++;

            } else if (clickCount == 1) {
                x2 = e.getX();
                y2 = e.getY();
                clickCount++;
                readyToDraw = true;
            } else {
                clickCount = 0;
                readyToDraw = false;
                repaint();
            }

            System.out.println(x1 + " " + y1 + " " + clickCount + " " + x2
                    + " " + y2 + readyToDraw);
        }

        public void mousePressed(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }

        public void mouseReleased(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }
    }
}

0 个答案:

没有答案