Java绘画问题

时间:2012-11-13 00:21:03

标签: graphics paint repaint

我需要“涂料”程序的帮助。我已经建立了GUI,但是我对程序的实际绘图部分有疑问。我绘制的所有内容在绘制后立即消失,我无法弄清楚原因。

这是我到目前为止所做的:

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class JPaint extends JFrame implements ActionListener, MouseListener, MouseMotionListener {

int x, y, x2, y2;
private int select = 0;
private Graphics g;
private PaintPanel DrawPanel = new PaintPanel(this);
private JPanel ButtonPanel = new JPanel();
private JTextArea Draw = new JTextArea(20,20);
private JButton jbtRed = new JButton("Red");
private JButton jbtGreen  = new JButton("Green");
private JButton jbtBlue  = new JButton("Blue");
private JButton jbtErase  = new JButton("Eraser");
private JButton jbtClear  = new JButton("Clear");
PaintPanel l=new PaintPanel(this);

public JPaint(){
    super("Java Paint");
    setSize(480,320);
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    //build draw panel
    DrawPanel.setBackground(Color.WHITE);

    add(DrawPanel, BorderLayout.CENTER);
    DrawPanel.setVisible(true);
    //build button panel

    ButtonPanel.add(jbtRed);
    ButtonPanel.add(jbtGreen);
    ButtonPanel.add(jbtBlue);
    ButtonPanel.add(jbtErase);
    ButtonPanel.add(jbtClear);

    add(ButtonPanel, BorderLayout.SOUTH);
    ButtonPanel.setVisible(true);

    jbtRed.addActionListener(this);
    jbtGreen.addActionListener(this);
    jbtBlue.addActionListener(this);
    jbtErase.addActionListener(this);
    jbtClear.addActionListener(this);
    DrawPanel.addMouseMotionListener(this);
    DrawPanel.addMouseListener(this);

}


         public void actionPerformed(ActionEvent e){

             if(e.getSource() == jbtRed){
                 DrawPanel.setToolTipText("Color set to 'Red'");
                 select = 1;
                 }
             if(e.getSource() == jbtGreen){
                 DrawPanel.setToolTipText("Color set to 'Green'");
                 }
             if(e.getSource() == jbtBlue){
                 DrawPanel.setToolTipText("Color set to 'Blue'");
                 }
             if(e.getSource() == jbtErase){
                 DrawPanel.setToolTipText("Erase Selected");
                 }
             if(e.getSource() == jbtClear){
                 DrawPanel.setToolTipText("Drawing cleared");
                 }



         }




@Override
public void mouseDragged(MouseEvent e) {


    x = e.getX();
    y = e.getY();
    DrawPanel.repaint();



}


@Override
public void mouseMoved(MouseEvent e) {



}


@Override
public void mouseClicked(MouseEvent e) {



}


@Override
public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub

}


@Override
public void mouseExited(MouseEvent e) {
    // TODO Auto-generated method stub

}


@Override
public void mousePressed(MouseEvent e) {

    x = e.getX();
    y = e.getY();


}


@Override
public void mouseReleased(MouseEvent e) {

    x2 = e.getX();
    y2 = e.getY();
    DrawPanel.repaint();

}

}

         class PaintPanel extends JPanel
            {
                JPaint p;
                PaintPanel(JPaint in){
                    p=in;
                }
                public void paintComponent(Graphics g)
                {

                    super.paintComponent(g);

                    // clear the screen
                    g.setColor(Color.white);


                    g.setColor(Color.RED);
                    g.drawLine(p.x, p.y, p.x2, p.y2);

                    p.x2 = p.x;
                    p.y2 = p.y;

            }

}

         class Run_JPaint {

                public static void main(String[] args){

                    JPaint P = new JPaint();

                    P.setVisible(true);

                }
            }

1 个答案:

答案 0 :(得分:1)

您可能希望删除以下代码行:     super.paintComponent方法(克); 从您的PaintPanel类内部。否则,使用每个绘图命令,GUI将重置屏幕。

祝你好运!