java吧 关注:1,274,746贴子:12,788,695
  • 1回复贴,共1

有关一个画图板问题,希望大家帮帮忙!谢谢!

只看楼主收藏回复

主要是做一个画图板,单击工具栏的控件时,会弹出对话框,要求输入矩形(或圆、或椭圆)的height和width。主要框架都搭好了,界面也都做好了,却画不出图形,希望各位高手帮忙看看,谢谢!
代码如下(就贴了矩形的):
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
import javax.swing.border.*;
import javax.swing.text.*;
class PadControl extends JFrame {     //JFrame,生成主界面
private ObjectInputStream input;    
private ObjectOutputStream output;     //定义输入输出流,用来保存和调用图像
private DrawPanel drawingArea;         //定义画图区域
drawings[] itemList=new drawings[5000];       //用来存放基本图形的数组
int index=0;                           //当前已经绘制的图形数目
private Color color=Color.black;       //当前颜色为黑色
int R,G,B;                             //用来存放当前
int h,w;                               //用来存放JTextField传回的数值
public PadControl(){     //构造函数
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame=new JFrame("DrawPad");       //框架名为DrawPad
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   //设置框架的关闭
JToolBar tbar=new JToolBar();       //新建工具栏
//在工具栏中加入矩形Button
JButton rect=new JButton("矩形");
rect.addActionListener(           //注册监听
new ActionListener(){
public void actionPerformed(ActionEvent e)       //触发则弹出对话框输入长、宽值
{
JDialog dialogRect=new JDialog(PadControl.this,"Draw Rect");
JDialog.setDefaultLookAndFeelDecorated(true);
dialogRect.setSize(280,200);
JLabel mhRect=new JLabel("Please input height(not 0!):");
dialogRect.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
final JTextField rheight=new JTextField("",10);     //矩形的长
rheight.addActionListener(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
h=Integer.parseInt(rheight.getText().trim());
}
});
JLabel mwRect=new JLabel("Please input width(not 0!):");
     final JTextField rwidth=new JTextField("",10);   //矩形的宽
     rwidth.addActionListener(
new ActionListener()
{
public void actionPerformed(ActionEvent e)



1楼2010-02-22 15:52回复
    {
    w=Integer.parseInt(rwidth.getText().trim());
    }
    });
    JButton dRect=new JButton("Draw");         //触发则调用画矩形函数段
    dRect.addActionListener(
    new ActionListener(){
    public void actionPerformed(ActionEvent e)
    {
    new Rect();
    }
    });
    JButton fRect=new JButton("Fill");       //触发则调用填充矩形函数段
    fRect.addActionListener(
    new ActionListener(){
    public void actionPerformed(ActionEvent e)
    {
    new fillRect();
    }
    });
    JPanel p1=new JPanel();           //通过定义JPanel来把控件添加到JDialog的内容窗格中
    p1.add(mhRect);
    p1.add(rheight);
    JPanel p2=new JPanel();
    p2.add(mwRect);
    p2.add(rwidth);
    JPanel p3=new JPanel();
    p3.add(dRect);
    p3.add(fRect);
    Container cRect=dialogRect.getContentPane();
    cRect.setLayout(new GridLayout(3,1));       //采用GridLayou的布局格式
    cRect.add(p1);
    cRect.add(p2);
    cRect.add(p3);    
    dialogRect.setVisible(true);
    }
    });
    tbar.add(rect);
    //创建Drawing并注册监听鼠标按下,获取画图点
    drawingArea=new DrawPanel();
    drawingArea.addMouseListener(
    new MouseAdapter()
    {
    public void mousePressed(MouseEvent e)
    {
    itemList[index].x=e.getX();
    itemList[index].y=e.getY();
    }
    });
    //获取PadControl的内容窗格
    Container c=frame.getContentPane();
    c.add(tbar,BorderLayout.NORTH);     //在窗格中添加工具栏,采用默认BorderLayout布局管理器
    c.add(drawingArea,BorderLayout.CENTER);
    frame.setSize(800,500);   //设置框架的大小
    frame.setVisible(true);
    }
    //DrawPanel继承于JPanel
    class DrawPanel extends JPanel
    {
    public DrawPanel()
    {
    setBackground(Color.white);   //设置背景为白色
    }
    public void PaintComponent(Graphics g)   //绘制容器组件
    {
    super.paintComponent(g);
    int j=0;
    while(j <=index)
    {
    draw(g,itemList[j]);
    j++;
    }
    }
    void draw(Graphics g,drawings i)
    {
    i.draw(g);     //传入各个子类,完成画图
    }
    }
    public void createNewItem()   //新建一个画图基本单元
    {
    itemList[index].R=R;
    itemList[index].B=B;
    itemList[index].G=G;
    }
    //各种画图类
    class drawings implements Serializable
    {
    int x,y;   //单击JPanel获得的坐标点
    int R,G,B; //颜色
    void draw(Graphics g) {};   //draw函数
    }
    class Rect extends drawings   //画矩形
    {
    void draw(Graphics g)
    {
    g.setColor(new Color(R,G,B));
    g.drawRect(x,y,w,h);
    }
    }
    class fillRect extends drawings   //填充矩形
    {
    void draw(Graphics g)
    {
    g.setColor(new Color(R,G,B));
    g.fillRect(x,y,w,h);
    }
    }
    public static void main(String args[])     //主函数
    {
    try{ //设置当前为windows风格
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch(Exception e) {}
    PadControl newPad=new PadControl();
    }
    }
    谢谢大家!


    2楼2010-02-22 15:52
    回复