⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.java

📁 java画图软件 功能较为齐全
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package javabrush;import java.awt.*;    import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import javax.swing.event.*;import javax.imageio.ImageIO;import java.io.*;import java.awt.geom.*;import java.awt.image.*;import java.awt.font.*; class Painter extends JFrame implements ActionListener {//定义主类	private	Container c = getContentPane();       	private	String menuBar[]={"文件(F)","编辑(E)","视图(V)","说明(H)"};	private	String menuItem[][]={		{"新建(N)|78","打开(O)|79","保存(S)|83","另存为(A)","退出(X)|88"},		{"撤消(U)|90","重复(R)|89","剪切(T)|87","复制(C)|68","粘贴(P)|85"},		{"工具箱(T)|84","色块(C)|76","状态栏(S)","属性栏(M)"},		{"关于printbrush(A)"}    //定义菜单项	};	private	JMenuItem jMenuItem[][]=new JMenuItem[4][5];	private	JMenu jMenu[];	private	JCheckBoxMenuItem jCheckBoxMenuItem[] = new JCheckBoxMenuItem[4];   	private	String ButtonName[]={"直线","矩开","椭圆","圆角矩形","贝氏曲线","扇型","多边形","铅笔","橡皮擦","文字","选取"};	private JToggleButton jToggleButton[];        private ButtonGroup buttonGroup;	private	JPanel jPanel[]=new JPanel[5];//0内层,1绘图区,2工具箱,3色块,4属性栏	private	JLabel jLabel[]=new JLabel[1];//状态栏	private	String toolname[]={"img/tool1.gif","img/tool2.gif","img/tool3.gif","img/tool4.gif","img/tool5.gif","img/tool8.gif","img/tool9.gif","img/tool7.gif","img/tool6.gif","img/tool10.gif","img/tool11.gif"};	private	Icon tool[]=new ImageIcon[11];	private	int i,j,show_x,show_y,drawMethod=7,draw_panel_width=700,draw_panel_height=500;	private Paint color_border,color_inside;	private SetPanel setPanel;	private DrawPanel drawPanel;	private UnderDrawPanel underDrawPanel;	private ColorPanel colorPanel;	private Stroke stroke;	private Shape shape;	private String isFilled;		public Painter(){//构造方法		//设定JMenuBar,并产生JMenuItem、并设置快捷键		JMenuBar bar = new JMenuBar();		jMenu=new JMenu[menuBar.length];		for(i=0;i<menuBar.length;i++){			jMenu[i] = new JMenu(menuBar[i]);			jMenu[i].setMnemonic(menuBar[i].split("\\(")[1].charAt(0));			bar.add(jMenu[i]);		}		//添加多个子菜单		for(i=0;i<menuItem.length;i++){			for(j=0;j<menuItem[i].length;j++){				if(i==0 && j==4 || i==1 && j==2) jMenu[i].addSeparator();				if(i!=2){					jMenuItem[i][j] = new JMenuItem(menuItem[i][j].split("\\|")[0]);					if(menuItem[i][j].split("\\|").length!=1)						jMenuItem[i][j].setAccelerator(KeyStroke.getKeyStroke(Integer.parseInt(menuItem[i][j].split("\\|")[1]), ActionEvent.CTRL_MASK) );					jMenuItem[i][j].addActionListener(this);					jMenuItem[i][j].setMnemonic(menuItem[i][j].split("\\(")[1].charAt(0));					jMenu[i].add(jMenuItem[i][j]);				}				else{					jCheckBoxMenuItem[j] = new JCheckBoxMenuItem(menuItem[i][j].split("\\|")[0]);					if(menuItem[i][j].split("\\|").length!=1)						jCheckBoxMenuItem[j].setAccelerator(KeyStroke.getKeyStroke(Integer.parseInt(menuItem[i][j].split("\\|")[1]), ActionEvent.CTRL_MASK) );					jCheckBoxMenuItem[j].addActionListener(this);					jCheckBoxMenuItem[j].setMnemonic(menuItem[i][j].split("\\(")[1].charAt(0));					jCheckBoxMenuItem[j].setSelected( true );					jMenu[i].add(jCheckBoxMenuItem[j]);				}			}		}		this.setJMenuBar( bar );		c.setLayout( new BorderLayout() );		for(i=0;i<5;i++)			jPanel[i]=new JPanel();					jLabel[0]=new JLabel(" 状态列");				buttonGroup = new ButtonGroup();		JToolBar jToolBar=new JToolBar("工具箱",JToolBar.VERTICAL);		jToggleButton=new JToggleButton[ButtonName.length];		for(i=0;i<ButtonName.length;i++){			tool[i] = new ImageIcon(toolname[i]);			jToggleButton[i] = new JToggleButton(tool[i]);			jToggleButton[i].addActionListener( this );			jToggleButton[i].setFocusable( false );			buttonGroup.add(jToggleButton[i]);		}				//工具类的按纽		jToolBar.add(jToggleButton[7]);		jToolBar.add(jToggleButton[8]);		jToolBar.add(jToggleButton[0]);		jToolBar.add(jToggleButton[4]);		jToolBar.add(jToggleButton[1]);		jToolBar.add(jToggleButton[3]);		jToolBar.add(jToggleButton[2]);		jToolBar.add(jToggleButton[5]);		jToolBar.add(jToggleButton[6]);		jToolBar.add(jToggleButton[9]);		jToolBar.add(jToggleButton[10]);		jToggleButton[7].setSelected(true);		jToolBar.setLayout( new GridLayout( 6, 2, 2, 2 ) );//GridLayout 类是一个布局处理器,它以矩形网格形式对容器的组件进行布置。		/*public GridLayout(int rows,该 rows 具有表示任意行数的值零                  int cols,该 cols 具有表示任意列数的值零                  int hgap,水平间距                  int vgap)垂直间距*/		jPanel[2].add(jToolBar);				jToolBar.setFloatable(false);//无法移动				colorPanel=new ColorPanel(); //创建颜色栏		jPanel[3].setLayout(new FlowLayout(FlowLayout.LEFT));		jPanel[3].add(colorPanel);				drawPanel=new DrawPanel();//创建画布		underDrawPanel=new UnderDrawPanel();  		underDrawPanel.setLayout(null);  //设置画布的布局管理器		underDrawPanel.add(drawPanel);		drawPanel.setBounds(new Rectangle(2, 2, draw_panel_width, draw_panel_height));				setPanel=new SetPanel();   //创建底层面板		jPanel[4].add(setPanel);				jPanel[0].setLayout( new BorderLayout() );		jPanel[0].add(underDrawPanel,BorderLayout.CENTER);		jPanel[0].add(jPanel[2],BorderLayout.WEST);		jPanel[0].add(jPanel[3],BorderLayout.SOUTH);		jPanel[0].add(jPanel[4],BorderLayout.EAST);				jLabel[0].setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));		underDrawPanel.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));		underDrawPanel.setBackground(new Color(128,128,128));		jPanel[3].setBorder(BorderFactory.createMatteBorder(1,0,0,0,new Color(172,168,153)));				c.add(jPanel[0],BorderLayout.CENTER);		c.add(jLabel[0],BorderLayout.SOUTH);				setSize(draw_panel_width,draw_panel_height);		setTitle("paintbrush");		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		show();	}		//保存	public void save(){		FileDialog fileDialog = new FileDialog( new Frame() , "请指定一个文件名", FileDialog.SAVE );		fileDialog.show();		if(fileDialog.getFile()==null) return;		drawPanel.filename = fileDialog.getDirectory()+fileDialog.getFile();	}		public void actionPerformed( ActionEvent e ){  		for(i=0;i<ButtonName.length;i++){			if(e.getSource()==jToggleButton[i]){				drawMethod=i;				if(drawMethod==5)					setPanel.pie_add_ctrl();				else					setPanel.pie_remove_ctrl();				if(drawMethod==7 || drawMethod==8)					setPanel.pencil_add_ctrl();				else					setPanel.pencil_remove_ctrl();				drawPanel.clear();				drawPanel.repaint();   				jMenuItem[1][2].setEnabled(false);   				jMenuItem[1][3].setEnabled(false);			}		}				if(e.getSource()==jMenuItem[1][0]){			drawPanel.undo();		}		else if(e.getSource()==jMenuItem[1][1]){			drawPanel.redo();		}		else if(e.getSource()==jMenuItem[1][2]){			drawPanel.cut();		}		else if(e.getSource()==jMenuItem[1][3]){			drawPanel.copy();		}		else if(e.getSource()==jMenuItem[1][4]){			drawPanel.paste();		}		else if(e.getSource()==jMenuItem[0][0]){//开新文件			underDrawPanel.remove(drawPanel);			drawPanel=null;			drawPanel=new DrawPanel();			underDrawPanel.add(drawPanel);			drawPanel.setBounds(new Rectangle(2, 2, draw_panel_width, draw_panel_height));			underDrawPanel.ctrl_area.setLocation(draw_panel_width+3,draw_panel_height+3);			underDrawPanel.ctrl_area2.setLocation(draw_panel_width+3,draw_panel_height/2+3);			underDrawPanel.ctrl_area3.setLocation(draw_panel_width/2+3,draw_panel_height+3);			repaint();		}		else if(e.getSource()==jMenuItem[0][1]){//打开旧文件			FileDialog fileDialog = new FileDialog( new Frame() , "选择一个文件", FileDialog.LOAD );			fileDialog.show();			if(fileDialog.getFile()==null) return;						underDrawPanel.removeAll();			drawPanel=null;			drawPanel=new DrawPanel();			underDrawPanel.add(drawPanel);			drawPanel.setBounds(new Rectangle(2, 2, draw_panel_width, draw_panel_height));						drawPanel.openfile(fileDialog.getDirectory()+fileDialog.getFile());		}		else if(e.getSource()==jMenuItem[0][2]){//储存文件			if(drawPanel.filename==null){				save();			}			else{				try{					int dotpos = drawPanel.filename.lastIndexOf('.');					ImageIO.write(drawPanel.bufImg, drawPanel.filename.substring(dotpos + 1), new File(drawPanel.filename));				}				catch(IOException even) {					JOptionPane.showMessageDialog(null, even.toString(),"无法储存文件", JOptionPane.ERROR_MESSAGE);				}			}		}		else if(e.getSource()==jMenuItem[0][3]){//另存新文件			save();			try{				int dotpos = drawPanel.filename.lastIndexOf('.');				ImageIO.write(drawPanel.bufImg, drawPanel.filename.substring(dotpos + 1), new File(drawPanel.filename));			}			catch(IOException even) {				JOptionPane.showMessageDialog(null, even.toString(),"无法储存问", JOptionPane.ERROR_MESSAGE);			}		}		else if(e.getSource()==jMenuItem[0][4]){//离开			System.exit(0);		}		else if(e.getSource()==jMenuItem[3][0]){//关于			JOptionPane.showMessageDialog(null, "程序名称:paintbrush ", "于 paintbrush", 1, new ImageIcon("img/paint.gif"));		}		for(i=0;i<2;i++){			if(jCheckBoxMenuItem[i].isSelected())				jPanel[i+2].setVisible( true );           	else           		jPanel[i+2].setVisible( false );       	}       	if(jCheckBoxMenuItem[3].isSelected()){       		setPanel.setVisible( true );       		jPanel[4].setVisible( true );       	}       	else{       		setPanel.setVisible( false );       		jPanel[4].setVisible( false );       	}		if(jCheckBoxMenuItem[2].isSelected())			jLabel[0].setVisible( true );       	else       		jLabel[0].setVisible( false );	}		public class UnderDrawPanel extends JPanel implements MouseListener, MouseMotionListener{		public int x,y;		float data[]={2};		public JPanel ctrl_area=new JPanel(),ctrl_area2=new JPanel(),ctrl_area3=new JPanel();				public UnderDrawPanel(){			this.setLayout(null);			this.add(ctrl_area);			this.add(ctrl_area2);			this.add(ctrl_area3);						ctrl_area.setBounds(new Rectangle(draw_panel_width+3, draw_panel_height+3, 5, 5));			ctrl_area.setBackground(new Color(0,0,0));			ctrl_area2.setBounds(new Rectangle(draw_panel_width+3, draw_panel_height/2, 5, 5));			ctrl_area2.setBackground(new Color(0,0,0));			ctrl_area3.setBounds(new Rectangle(draw_panel_width/2, draw_panel_height+3, 5, 5));			ctrl_area3.setBackground(new Color(0,0,0));    		ctrl_area.addMouseListener(this);    		ctrl_area.addMouseMotionListener(this);    		ctrl_area2.addMouseListener(this);    		ctrl_area2.addMouseMotionListener(this);    		ctrl_area3.addMouseListener(this);    		ctrl_area3.addMouseMotionListener(this);		}				public void mouseClicked(MouseEvent e){}		public void mousePressed(MouseEvent e){}		public void mouseReleased(MouseEvent e){			draw_panel_width=x;			draw_panel_height=y;						ctrl_area.setLocation(draw_panel_width+3,draw_panel_height+3);			ctrl_area2.setLocation(draw_panel_width+3,draw_panel_height/2+3);			ctrl_area3.setLocation(draw_panel_width/2+3,draw_panel_height+3);			drawPanel.setSize(x,y);			drawPanel.resize();			repaint();		}				public void mouseEntered(MouseEvent e){}		public void mouseExited(MouseEvent e){}		    	public void mouseDragged(MouseEvent e){    		if(e.getSource()==ctrl_area2){    			x = e.getX()+draw_panel_width;    			y = draw_panel_height;    		}    		else if(e.getSource()==ctrl_area3){    			x = draw_panel_width;    			y = e.getY()+draw_panel_height;    		}    		else{    			x = e.getX()+draw_panel_width;    			y = e.getY()+draw_panel_height;    		}    		repaint();    		jLabel[0].setText(x+","+y);    	}    	public void mouseMoved(MouseEvent e) {}    			public void paint(Graphics g) {			Graphics2D g2d = (Graphics2D) g;			super.paint(g2d);						g2d.setPaint( new Color(128,128,128) );			g2d.setStroke( new BasicStroke( 1,  BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER, 10, data, 0 ) );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -