图形绘制实现
简单直线绘制:
界面:JFrame
监听器:MouseListener
画笔类:Graphics 特殊:主要用于绘制图形功能
对象必须从指定的容器组件上获取
画板代码
public class Text {
public static void main(String[] args) {
DrowFrame df=new DrowFrame();
df.initFrame();
}
}
public class DrowFrame extends JFrame{
public void initFrame() {
this.setSize(1040,677);
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
this.setTitle("画图");
//this.setIconImage(getIconImage());
//给窗体的左边、下边、中间分别添加中间容器层容器组件JPanel
JPanel panelLeft=new JPanel();
JPanel panelDown=new JPanel();
JPanel panelCenter=new JPanel();
//颜色
Color color=new Color(240,240,240);
panelLeft.setBackground(color);
//大小
Dimension dimen=new Dimension(70,55);
panelLeft.setPreferredSize(dimen);
panelDown.setPreferredSize(dimen);
this.add(panelLeft,BorderLayout.WEST);
this.add(panelDown,BorderLayout.SOUTH);
this.add(panelCenter);
/*********************添加左部图案区***********************************/
panelLeft.setLayout(new FlowLayout(1,0,0));
panelLeft.setBorder(new BevelBorder(0,color.white,color.gray));
ButtonGroup bg=new ButtonGroup();
for(int i=0;i<16;i++) {
JRadioButton jrb=new JRadioButton();
jrb.setActionCommand("pic"+i);
jrb.setBorder(null);
jrb.setIcon(new ImageIcon("Images/draw"+i+".jpg"));
jrb.setRolloverIcon(new ImageIcon("Images/draw"+i+"-1.jpg"));
jrb.setPressedIcon(new ImageIcon("Images/draw"+i+"-2.jpg"));
jrb.setSelectedIcon(new ImageIcon("Images/draw"+i+"-3.jpg"));
bg.add(jrb);
panelLeft.add(jrb);
}
JPanel pane=new JPanel();
pane.setPreferredSize(new Dimension(35,70));
pane.setBorder(new BevelBorder(1,color.white,color.gray));
panelLeft.add(pane);
/*********************添加底部颜色区***********************************/
panelDown.setBorder(new BevelBorder(1,color.white,color.gray));
panelDown.setLayout(new FlowLayout(0,7,5));
panelDown.setBackground(new Color(240,240,240));
JPanel panelLeft_1=new JPanel();
panelLeft_1.setPreferredSize(new Dimension(36, 36));
panelDown.add(panelLeft_1,BorderLayout.WEST);
panelLeft_1.setBorder(new BevelBorder(1,color.white,color.gray));
panelLeft_1.setLayout(null);
JButton jButton_1=new JButton();
jButton_1.setBackground(color.black);
jButton_1.setBounds(7, 7,17, 17);
jButton_1.setEnabled(false);
jButton_1.setBorder(new BevelBorder(0,color.white,color.gray));
panelLeft_1.add(jButton_1);
JButton jButton_2=new JButton();
jButton_2.setBackground(color.white);
jButton_2.setBounds(15,15,17, 17);
jButton_2.setEnabled(false);
jButton_2.setBorder(new BevelBorder(0,color.white,color.gray));
panelLeft_1.add(jButton_2);
//添加小格颜色
JPanel panelColor=new JPanel();
panelColor.setPreferredSize(new Dimension(280,45));
panelDown.add(panelColor);
panelColor.setLayout(new GridLayout(2,14));
JButton jb[]=new JButton[28];
for(int i=0;i<28;i++) {
jb[i]=new JButton();
jb[i].setPreferredSize(new Dimension(17,17));
jb[i].setBorder(new BevelBorder(1,color.white,color.gray));
panelColor.add(jb[i]);
jb[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JButton button = (JButton)e.getSource();
//获取按钮的背景色
Color color = button.getBackground();
//把颜色设置到前面小按钮上,作为背景色
jButton_1.setBackground(color); }
});
}
jb[0].setBackground(new Color(0, 0, 0));jb[1].setBackground(new Color(128,138,135));
jb[2].setBackground(new Color(176, 23, 31));jb[3].setBackground(new Color(107,142,35));
jb[4].setBackground(new Color(34,139,34));jb[5].setBackground(new Color(64,224,205));
jb[6].setBackground(new Color(8,46, 84));jb[7].setBackground(new Color(160, 32, 240));
jb[8].setBackground(new Color(210, 180, 140));jb[9].setBackground(new Color(25,25,112));
jb[10].setBackground(new Color(0,191,255));jb[11].setBackground(new Color(153, 51,250));
jb[12].setBackground(new Color(160, 82,45));jb[13].setBackground(new Color(120,82,45));
jb[14].setBackground(new Color(255,255,255));jb[15].setBackground(new Color(192,192,192));
jb[16].setBackground(new Color(255, 0, 0));jb[17].setBackground(new Color(255, 255, 0));
jb[18].setBackground(new Color(0, 255, 0));jb[19].setBackground(new Color(0,255,255));
jb[20].setBackground(new Color( 0, 0,255));jb[21].setBackground(new Color(255,0,255));
jb[22].setBackground(new Color(255,227,132));jb[23].setBackground(new Color(0,206,209));
jb[24].setBackground(new Color(175,238,238));jb[25].setBackground(new Color(202,135,216));
jb[26].setBackground(new Color(116, 0, 0));jb[27].setBackground(new Color(255,125,64));
//1、菜单条的添加
JMenuBar bar = new JMenuBar();
//设置菜单条到窗体上
this.setJMenuBar(bar);
//2、菜单添加到菜单条
JMenu menu_1 = new JMenu("文件(F)");
JMenu menu_2 = new JMenu("编辑(E)");
JMenu menu_3 = new JMenu("查看(V)");
JMenu menu_4 = new JMenu("图像(I)");
JMenu menu_5 = new JMenu("颜色(C)");
JMenu menu_6 = new JMenu("帮助(H)");
bar.add(menu_1);
bar.add(menu_2);
bar.add(menu_3);
bar.add(menu_4);
bar.add(menu_5);
bar.add(menu_6);
//3.菜单上添加菜单项
JMenuItem item []= {new JMenuItem("新建"),new JMenuItem("打开"),
new JMenuItem("保存"),new JMenuItem("另存为"),new JMenuItem("打印预览"),new JMenuItem("页面设置"),
new JMenuItem("打印"),new JMenuItem("发送"),new JMenuItem("退出")};
for(int i=0;i<9;i++) menu_1.add(item[i]);
JMenuItem item_1 []= {new JMenuItem("撤销"),new JMenuItem("全选"),
new JMenuItem("粘贴来源")};
for(int i=0;i<3;i++) menu_2.add(item_1[i]);
JMenuItem item_2 []= {new JMenuItem("工具箱"),new JMenuItem("颜料盒"),
new JMenuItem("状态栏"),new JMenu("缩放"),new JMenuItem("查看位图")};
JMenuItem item2[]= {new JMenuItem("大尺寸"),new JMenuItem("自定义")};
for(int i=0;i<2;i++) item_2[3].add(item2[i]);
for(int i=0;i<5;i++) menu_3.add(item_2[i]);
JMenuItem item_3 []= {new JMenuItem("翻转/旋转"),new JMenuItem("拉伸/扭曲"),
new JMenuItem("反色"),new JMenuItem("属性"),new JMenuItem("清除图像"),new JMenuItem("不透明处理")};
for(int i=0;i<6;i++) menu_4.add(item_3[i]);
menu_5.add(new JMenuItem("编辑颜色"));
JMenuItem item_4[] = {new JMenuItem("帮助主题"),new JMenuItem("关于画图")};
for(int i=0;i<2;i++) menu_6.add(item_4[i]);
//menu_1.add(item);
/************中间面板设置*********************************************/
panelCenter.setLayout(new FlowLayout(0,5,5));
JPanel panelDraw = new JPanel();
panelDraw.setPreferredSize(new Dimension(940,500));
panelDraw.setBackground(Color.white);
panelCenter.add(panelDraw);
this.setVisible(true);
Graphics g = panelDraw.getGraphics();
//创建监听器对象
/*Mouse ms = new Mouse(g);
panelDraw.addMouseListener(ms);*/
panelDraw.addMouseListener(new MouseListener() {
public int x1,y1,x2,y2;
public String commend;
public void mousePressed(MouseEvent e) {
x1=e.getX();
y1=e.getY();
ButtonModel bm=bg.getSelection();
commend=bm.getActionCommand();
g.setColor(jButton_1.getBackground());
}
public void mouseReleased(MouseEvent e) {
x2=e.getX();
y2=e.getY();
//画图形
if(commend.equals("pic10")){
g.drawLine(x1, y1, x2, y2);
}else if(commend.equals("pic12")){
g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));
}else if(commend.equals("pic14")){
g.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));
}
//g.drawLine(x1,y1, x2, y2);
//g.drawRect(Math.min(x1, x2),Math.min(y1, y2),Math.abs(x2-x1), Math.abs(y2-y1));
//g.drawOval(Math.min(x1, x2),Math.min(y1, y2),Math.abs(x2-x1), Math.abs(y2-y1));
//直角三角形
/*g.drawLine(x1, y1, x2, y2);
g.drawLine(x1, y2, x2, y2);
g.drawLine(x1, y1, x1, y2);*/
//等腰三角形
/*g.drawLine(x1, y2, x2, y2);
g.drawLine((x1+x2)/2, y1, x1, y2);
g.drawLine((x1+x2)/2, y1, x2, y2);*/
}
public void mouseExited(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
});
}
}