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.*;
public 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)"},
{"关于七喜猫猫画板(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];//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,并产生MenuItem、并设置快捷键
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 ) );
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("七喜猫猫画板");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
show();
}
@SuppressWarnings("deprecation")
public void save(){
FileDialog fileDialog = new FileDialog( new Frame() , "请指定一个文件名", FileDialog.SAVE );
fileDialog.show();
if(fileDialog.getFile()==null) return;
drawPanel.filename = fileDialog.getDirectory()+fileDialog.getFile();
}
@SuppressWarnings("deprecation")
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.
没有合适的资源?快使用搜索试试~ 我知道了~
num_01.rar_java画板的实现_thoucw6
共51个文件
gif:32个
class:12个
classpath:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 121 浏览量
2022-09-24
23:10:51
上传
评论
收藏 69KB RAR 举报
温馨提示
在现今生活中,电脑工具的使用是越来越频繁,为此各种各样的专业工具被开发。基于java的面板开发代码供大家交流学习
资源推荐
资源详情
资源评论
收起资源包目录
num_01.rar (51个子文件)
num_01
001
bin
Painter$UnderDrawPanel.class 4KB
img
icon4.gif 835B
tool4.gif 140B
tool1.gif 120B
icon2.gif 868B
tool11.gif 127B
icon1.gif 836B
tool7.gif 890B
paint.gif 2KB
tool6.gif 893B
tool5.gif 123B
tool3.gif 138B
icon3.gif 948B
tool10.gif 130B
tool8.gif 134B
tool2.gif 138B
tool9.gif 140B
Painter$SetPanel.class 6KB
Painter$ColorPanel.class 10KB
Painter.class 13KB
.project 391B
Painter$DrawPanel.class 18KB
.classpath 190B
Painter$Gradient.class 1KB
src
Painter$UnderDrawPanel.class 3KB
img
icon4.gif 835B
tool4.gif 140B
tool1.gif 120B
icon2.gif 868B
tool11.gif 127B
icon1.gif 836B
tool7.gif 890B
paint.gif 2KB
tool6.gif 893B
tool5.gif 123B
tool3.gif 138B
icon3.gif 948B
tool10.gif 130B
tool8.gif 134B
tool2.gif 138B
tool9.gif 140B
Painter$SetPanel.class 6KB
Painter$ColorPanel.class 9KB
Painter.class 12KB
.project 391B
Painter$DrawPanel.class 17KB
.classpath 190B
Painter.java 49KB
Painter$Gradient.class 1KB
.project 379B
.classpath 232B
共 51 条
- 1
资源评论
小贝德罗
- 粉丝: 71
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功