import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;public class Painter2 extends JFrame
{
   private int topX,topY,width,fontSize,
    height,bottomX,bottomY,shape;
   private boolean clear,textOn,filled;
   private Color drawingColor;
   private String font;
   private JTextField text;
   private JPanel panel1,panel2,panel3;
   private JRadioButton ovalBox,rectBox,lineBox;
   private ButtonGroup shapeGroup;
   private JCheckBox fillBox;
   private JComboBox colorList, fontList, sizeList;
   private JButton clearButton;
   private String colorNames[] = {"Black", "Green", "Blue", "Red", "Cyan" 
   };
   private Color colors [] = {  Color.black, Color.green, Color.blue, Color.red, Color.cyan };
   
   private String fontNames[] = { "Serif", "SansSerif", "Monospaced"
   
   };    private String szieNames[] = { "9", "10", "22", "72" };
   private int sizes[] = { 9, 10, 22, 72 };
   private final int OVAL = 1, LINE = 2, RECT = 3;
   private ToolWindow tools;
   public Painter2 ()
{
    addMouseListener( new MouseHandler() );
drawingColor = Color.black;
shape = OVAL;
font = "Serif";
   fontSize = 9;
   setSize( 300,300 );
   setVisible( true );
   tools = new ToolWindow();
}
   public void paint( Graphics g)
{
   g.setColor( drawingColor );
   if ( textOn )
   {
  g.setFont( new Font( font,Font.PLAIN, fontSize) );
  g.drawString ( text.getText(), topX, topY );
  textOn = false;
  return;
   }
   if (shape != LINE)
   {
   topX = Math.min( topX,bottomX );
   topY = Math.min( topY,bottomY );
   }
if (filled && shape != LINE )
switch ( shape )
{
case OVAL:
g.fillOval(topX, topY, width, height );
   break;
  case RECT:
   g.fillRect(topX, topY, width, height );
  break;
}
 else
switch (shape) {
 case OVAL:
g.drawOval (topX, topY, width, height );
     break;  
     case LINE:
   g.drawLine(topX, topY, width, height );
     break;
     case RECT:
   g.drawRect( topX, topY, width, height );
     break;
 }
  if ( clear == true )
  { g.setColor( Color.white);
    g.fillRect( 0,0, getSize().width, getSize().height );
   clear = false;
  }
}
 private class ToolWindow extends JFrame {
   public ToolWindow()
 {
   text = new JTextField( "Text", 20 );
   text.addActionListener
   (
new ActionListener()
   {
    public void actionPerformed( ActionEvent event )
   {
textOn = true;
repaint();

}   
   
   }   
   
   );
   
  fontList = new JComboBox( fontNames );
  fontList.setMaximumRowCount( 3 );
  fontList.addItemListener(
 new ItemListener(){
  public void itemStateChanged( ItemEvent event )
  {
    font = fontNames [ fontList.getSelectedIndex() ];
  
  }
 
  }   
 
  );
   
 sizeList = new JComboBox( sizeNames );sizeList.setMaximumRowCount( 3 );
  sizeList.addItemListener(new ItemListener()
 {
    public void itemStateChanged( ItemEvent event )
  {
    font = fontSize [ sizeList.getSelectedIndex() ];
  
  }
  
  }
  
  ); colorList = new JComboBox( colorNames );colorList.setMaximumRowCount( 3 );
  colorList.addItemListener(new ItemListener()
 {
    public void itemStateChanged( ItemEvent event )
  {
    drawingColor = colors [ colorList.getSelectedIndex() ];
  }
 }
 );
 clearButton = new JButton( "Clear" );
 clearButton.addActionListener( new ClearButtonHandler() );
   fillBox = new JCheckBox( "filled" );
   FillBoxHandler fillHandle = new FillBoxHandler();
   fillBox.addItemListener( fillHandle );
   ovalBox = new JRadioButton ( "Oval", true );
lineBox = new JRadioButton ( "Line", false );
 rectBox = new JRadioButton ( "Rectangle", false );
 RadioButtonHandler handler = new RadioButtonHandler();
 ovalBox.addItemListener( handler );
  lineBox.addItemListener( handler );
   rectBox.addItemListener( handler );
   shapeGroup.add( ovalBox );
   shapeGroup.add( lineBox );
   shapeGroup.add( rectBox );
   panel1 = new JPanel();
   panel2 = new JPanel();
   panel3 = new JPanel();
   panel1.setLayout( new GridLayout( 1, 3));
   panel2.setLayout( new GridLayout( 1, 2));
   panel3.setLayout( new GridLayout( 1, 3)); panel1.add( ovalBox );
  panel1.add( lineBox );
   panel2.add( fillBox );
    panel2.add( clearButton );
 panel3.add( new JScrollPane( colorList ));
  panel3.add( new JScrollPane ( fontList ));
   panel3.add( new JScrollPane ( sizeList ) );
   Container container = getContentpane();
Container.setLayout( new FlowLayout() );
Container.add( panel1 );
Container.add( panel2 );
Container.add( panel3 );
Container.add( text );setSize( 350,200 );
setLocation ( 300, 0 );
setVisible ( true );
 }
 }
private class MouseHandler extends MouseAdapter
{
public void mousePressed( MouseEvent event )
{
topX = event.getX();
topY = event.getY();



}
  public void mouseReleased ( MouseEvent event )
{
  bottomX = event.getX();
  bottomY = event.getY();
  width = Math.ads( topX - bottomX );
  height = Math.ads( topY - bottomY );
  
  repaint();
  }
} private class ClearButtonHandlera implements ActionListener 
 {
 public void actionPerformed ( ActionEvent event )
 {
 clear = true;
  repaint();
 
 
 
 }
 } private class RadioButtonHandler implements  ItemListener
 {
 public void itemStateChanged( ItemEvent event )
 {
 if ( event.getSource() == ovalBox )
 shape = OVAL;
else if ( event.getSource() == lineBox )
 shape = LINE;
 if ( event.getSource() == rectBox )
 shape = RECT;
 
 }
 }
  private class FillBoxHander implements ItemListener
  {
 public void itemStateChanged( ItemEvent event )
  {
 if ( event.getStateChange() == ItemEvent.SELECTED )
    filled = true;
 else
  filled = false;
 
 
 }
 
 } 
public static void main ( String arg[] )
   {
Painter2 application = new Painter2 ();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );    }
}
修改了3个小时还是不知道怎么修改好.求救一下

解决方案 »

  1.   

    手写的吗? 那么多错误,给你改了一下,你是说NullPointerException吗?还是什么问题,发帖时要讲清楚import java.awt.Color;
    import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;import javax.swing.ButtonGroup;
    import javax.swing.JButton;
    import javax.swing.JCheckBox;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JRadioButton;
    import javax.swing.JScrollPane;
    import javax.swing.JTextField;public class Painter2 extends JFrame {
    private int topX, topY, width, fontSize, height, bottomX, bottomY, shape;
    private boolean clear, textOn, filled;
    private Color drawingColor;
    private String font;
    private JTextField text;
    private JPanel panel1, panel2, panel3;
    private JRadioButton ovalBox, rectBox, lineBox;
    private ButtonGroup shapeGroup;
    private JCheckBox fillBox;
    private JComboBox colorList, fontList, sizeList;
    private JButton clearButton;
    private String colorNames[] = { "Black", "Green", "Blue", "Red", "Cyan" };
    private Color colors[] = { Color.black, Color.green, Color.blue, Color.red,
    Color.cyan }; private String fontNames[] = { "Serif", "SansSerif", "Monospaced" }; private String szieNames[] = { "9", "10", "22", "72" };
    private int sizes[] = { 9, 10, 22, 72 };
    private final int OVAL = 1, LINE = 2, RECT = 3;
    private ToolWindow tools; public Painter2() {
    addMouseListener(new MouseHandler());
    drawingColor = Color.black;
    shape = OVAL;
    font = "Serif";
    fontSize = 9;
    setSize(300, 300);
    setVisible(true);
    tools = new ToolWindow();
    } public void paint(Graphics g) {
    g.setColor(drawingColor);
    if (textOn) {
    g.setFont(new Font(font, Font.PLAIN, fontSize));
    g.drawString(text.getText(), topX, topY);
    textOn = false;
    return; }
    if (shape != LINE) {
    topX = Math.min(topX, bottomX);
    topY = Math.min(topY, bottomY);
    }
    if (filled && shape != LINE)
    switch (shape) {
    case OVAL:
    g.fillOval(topX, topY, width, height);
    break;
    case RECT:
    g.fillRect(topX, topY, width, height);
    break;
    }
    else
    switch (shape) {
    case OVAL:
    g.drawOval(topX, topY, width, height);
    break;
    case LINE:
    g.drawLine(topX, topY, width, height);
    break;
    case RECT:
    g.drawRect(topX, topY, width, height);
    break;
    }
    if (clear == true) {
    g.setColor(Color.white);
    g.fillRect(0, 0, getSize().width, getSize().height);
    clear = false;
    }
    } private class ToolWindow extends JFrame {
    public ToolWindow() {
    text = new JTextField("Text", 20);
    text.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent event) {
    textOn = true;
    repaint(); } } ); fontList = new JComboBox(fontNames);
    fontList.setMaximumRowCount(3);
    fontList.addItemListener(new ItemListener() {
    public void itemStateChanged(ItemEvent event) {
    font = fontNames[fontList.getSelectedIndex()]; } } ); sizeList = new JComboBox(szieNames); sizeList.setMaximumRowCount(3);
    sizeList.addItemListener(new ItemListener() {
    public void itemStateChanged(ItemEvent event) {
    font = fontNames[sizeList.getSelectedIndex()]; } } ); colorList = new JComboBox(colorNames); colorList.setMaximumRowCount(3);
    colorList.addItemListener(new ItemListener() {
    public void itemStateChanged(ItemEvent event) {
    drawingColor = colors[colorList.getSelectedIndex()];
    }
    });
    clearButton = new JButton("Clear");
    clearButton.addActionListener(new ClearButtonHandler());
    fillBox = new JCheckBox("filled");
    FillBoxHandler fillHandle = new FillBoxHandler();
    fillBox.addItemListener(fillHandle);
    ovalBox = new JRadioButton("Oval", true);
    lineBox = new JRadioButton("Line", false);
    rectBox = new JRadioButton("Rectangle", false);
    RadioButtonHandler handler = new RadioButtonHandler();
    ovalBox.addItemListener(handler);
    lineBox.addItemListener(handler);
    rectBox.addItemListener(handler);

    shapeGroup = new ButtonGroup();
    shapeGroup.add(ovalBox);
    shapeGroup.add(lineBox);
    shapeGroup.add(rectBox);
    panel1 = new JPanel();
    panel2 = new JPanel();
    panel3 = new JPanel();
    panel1.setLayout(new GridLayout(1, 3));
    panel2.setLayout(new GridLayout(1, 2));
    panel3.setLayout(new GridLayout(1, 3)); panel1.add(ovalBox);
    panel1.add(lineBox);
    panel2.add(fillBox);
    panel2.add(clearButton);
    panel3.add(new JScrollPane(colorList));
    panel3.add(new JScrollPane(fontList));
    panel3.add(new JScrollPane(sizeList));
    Container container = getContentPane();
    container.setLayout(new FlowLayout());
    container.add(panel1);
    container.add(panel2);
    container.add(panel3);
    container.add(text); setSize(350, 200);
    setLocation(300, 0);
    setVisible(true);
    }
    } private class MouseHandler extends MouseAdapter {
    public void mousePressed(MouseEvent event) {
    topX = event.getX();
    topY = event.getY(); } public void mouseReleased(MouseEvent event) {
    bottomX = event.getX();
    bottomY = event.getY();
    width = Math.abs(topX - bottomX);
    height = Math.abs(topY - bottomY);
    repaint();
    } } private class ClearButtonHandlera implements ActionListener {
    public void actionPerformed(ActionEvent event) {
    clear = true;
    repaint(); }
    } private class RadioButtonHandler implements ItemListener {
    public void itemStateChanged(ItemEvent event) {
    if (event.getSource() == ovalBox)
    shape = OVAL;
    else if (event.getSource() == lineBox)
    shape = LINE;
    if (event.getSource() == rectBox)
    shape = RECT; } } private class FillBoxHander implements ItemListener {
    public void itemStateChanged(ItemEvent event) {
    if (event.getStateChange() == ItemEvent.SELECTED)
    filled = true;
    else
    filled = false; } } public static void main(String arg[]) {
    Painter2 application = new Painter2();
    application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
    }
      

  2.   

    原来我写少了- -||||
    我是刚学JAVA的...不好意思
      

  3.   

    import java.awt.Color;
    import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;import javax.swing.ButtonGroup;
    import javax.swing.JButton;
    import javax.swing.JCheckBox;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JRadioButton;
    import javax.swing.JScrollPane;
    import javax.swing.JTextField;public class Painter2 extends JFrame {
        private int topX, topY, width, fontSize, height, bottomX, bottomY, shape;
        private boolean clear, textOn, filled;
        private Color drawingColor;
        private String font;
        private JTextField text;
        private JPanel panel1, panel2, panel3;
        private JRadioButton ovalBox, rectBox, lineBox;
        private ButtonGroup shapeGroup;
        private JCheckBox fillBox;
        private JComboBox colorList, fontList, sizeList;
        private JButton clearButton;
        private String colorNames[] = { "Black", "Green", "Blue", "Red", "Cyan" };
        private Color colors[] = { Color.black, Color.green, Color.blue, Color.red,
                Color.cyan };    private String fontNames[] = { "Serif", "SansSerif", "Monospaced"    };    private String szieNames[] = { "9", "10", "22", "72" };
        private int sizes[] = { 9, 10, 22, 72 };
        private final int OVAL = 1, LINE = 2, RECT = 3;
        private ToolWindow tools;    public Painter2() {
            addMouseListener(new MouseHandler());
            //似乎每用
            drawingColor = Color.black;
            shape = OVAL;
            font = "Serif";
            fontSize = 9;
            setSize(300, 300);
            setVisible(true);
            tools = new ToolWindow();
        }    public void paint(Graphics g) {
            g.setColor(drawingColor);
            if (textOn) {
                g.setFont(new Font(font, Font.PLAIN, fontSize));
                g.drawString(text.getText(), topX, topY);
                textOn = false;
                return;        }
            
            if (shape != LINE) {
                topX = Math.min(topX, bottomX);
                topY = Math.min(topY, bottomY);
            }
            if (filled && shape != LINE)
                switch (shape) {
                case OVAL:
                    g.fillOval(topX, topY, width, height);
                    break;
                case RECT:
                    g.fillRect(topX, topY, width, height);
                    break;
                }
            else
                switch (shape) {
                case OVAL:
                    g.drawOval(topX, topY, width, height);
                    break;
                case LINE:
                    g.drawLine(topX, topY, width, height);
                    break;
                case RECT:
                    g.drawRect(topX, topY, width, height);
                    break;
                }
            if (clear == true) {
                g.setColor(Color.white);
                g.fillRect(0, 0, getSize().width, getSize().height);
                clear = false;
            }
        }    private class ToolWindow extends JFrame {
            public ToolWindow() {
                text = new JTextField("Text", 20);
                text.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent event) {
                        textOn = true;
                        repaint();                }            }            );            fontList = new JComboBox(fontNames);
                fontList.setMaximumRowCount(3);
                fontList.addItemListener(new ItemListener() {
                    public void itemStateChanged(ItemEvent event) {
                        font = fontNames[fontList.getSelectedIndex()];                }            }            );            sizeList = new JComboBox(szieNames);            sizeList.setMaximumRowCount(3);
                sizeList.addItemListener(new ItemListener() {
                    public void itemStateChanged(ItemEvent event) {
                        font = fontNames[sizeList.getSelectedIndex()];                }            }            );            colorList = new JComboBox(colorNames);            colorList.setMaximumRowCount(3);
                colorList.addItemListener(new ItemListener() {
                    public void itemStateChanged(ItemEvent event) {
                        drawingColor = colors[colorList.getSelectedIndex()];
                    }
                });
                clearButton = new JButton("Clear");
                clearButton.addActionListener(new ClearButtonHandler());
                fillBox = new JCheckBox("filled");
               // FillBoxHandler fillHandle = new FillBoxHandler();
                fillBox.addItemListener(new FillBoxHander());
                ovalBox = new JRadioButton("Oval", true);
                lineBox = new JRadioButton("Line", false);
                rectBox = new JRadioButton("Rectangle", false);
                RadioButtonHandler handler = new RadioButtonHandler();
                ovalBox.addItemListener(handler);
                lineBox.addItemListener(handler);
                rectBox.addItemListener(handler);
                
                shapeGroup = new ButtonGroup();
                shapeGroup.add(ovalBox);
                shapeGroup.add(lineBox);
                shapeGroup.add(rectBox);
                panel1 = new JPanel();
                panel2 = new JPanel();
                panel3 = new JPanel();
                panel1.setLayout(new GridLayout(1, 3));
                panel2.setLayout(new GridLayout(1, 2));
                panel3.setLayout(new GridLayout(1, 3));            panel1.add(ovalBox);
                panel1.add(lineBox);
                panel2.add(fillBox);
                panel2.add(clearButton);
                panel3.add(new JScrollPane(colorList));
                panel3.add(new JScrollPane(fontList));
                panel3.add(new JScrollPane(sizeList));
                Container container = getContentPane();
                container.setLayout(new FlowLayout());
                container.add(panel1);
                container.add(panel2);
                container.add(panel3);
                container.add(text);            setSize(350, 200);
                setLocation(300, 0);
                setVisible(true);
            }
        }    private class MouseHandler extends MouseAdapter {
            public void mousePressed(MouseEvent event) {
                topX = event.getX();
                topY = event.getY();        }        public void mouseReleased(MouseEvent event) {
                bottomX = event.getX();
                bottomY = event.getY();
                width = Math.abs(topX - bottomX);
                height = Math.abs(topY - bottomY);
                repaint();
            }    }    private class ClearButtonHandler implements ActionListener {
            public void actionPerformed(ActionEvent event) {
                clear = true;
                repaint();        }
        }    private class RadioButtonHandler implements ItemListener {
            public void itemStateChanged(ItemEvent event) {
                if (event.getSource() == ovalBox)
                    shape = OVAL;
                else if (event.getSource() == lineBox)
                    shape = LINE;
                if (event.getSource() == rectBox)
                    shape = RECT;        }    }    private class FillBoxHander implements ItemListener {
            public void itemStateChanged(ItemEvent event) {
                if (event.getStateChange() == ItemEvent.SELECTED)
                    filled = true;
                else
                    filled = false;        }    }    public static void main(String arg[]) {
            Painter2 application = new Painter2();
            application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    }
    }