📄 toolpanel.java
字号:
/**
* @(#)ToolPanel.java
*/
package project.paint;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
public class ToolPanel extends JToolBar implements ActionListener {
public String[] sTexts={"移动","铅笔","填充","橡皮","旋转","直线","矩形","圆角矩形","椭圆"};
public String[] sCmds={"move","pencil","colorfill","erase","rotate","line","rect","roundrect","oval"};
public ImageIcon[] imgIcons=new ImageIcon[sCmds.length];
PaintPanel instance;
JPanel pnTool;
JToggleButton[] btn=new JToggleButton[sCmds.length];
JPanel pnButton;
StrokePanel pnStroke;
SquarePanel pnSquare;
WelcomePanel welcomePanel;
PaintModePanel paintModePanel;
public ToolPanel(PaintPanel o) {
super(JToolBar.VERTICAL);
if (o==null)
return;
instance = o;
for (int i=0; i<btn.length; i++) {
try {
imgIcons[i]=new ImageIcon(Project.class.getResource("/project/paint/icons/"+sCmds[i]+".gif")); //TsPaint.class.getResource(
}
catch (Exception e) {
System.out.println ("==============================");
System.out.println ("Toolpanel(Object)方法出现异常:");
}
btn[i]=new JToggleButton("",imgIcons[i]);
btn[i].setToolTipText(sTexts[i]);
btn[i].setActionCommand(sCmds[i]);
}
pnButton=new JPanel(null);
for (int i=0; i<btn.length; i++) {
btn[i].setBounds((i%2)*27+2,(i/2)*30+2,25,25);
pnButton.add(btn[i]);
}
pnStroke=new StrokePanel(6);
pnStroke.setLocation(4,(btn.length/2)*30+30);
pnStroke.setVisible(false);
pnButton.add(pnStroke);
pnSquare=new SquarePanel(BaseObject.RECTANGLE);
pnSquare.setLocation(4,pnStroke.getLocation().y+pnStroke.getHeight()+10);
pnSquare.setVisible(false);
pnButton.add(pnSquare);
paintModePanel=new PaintModePanel();
paintModePanel.setLocation(4,pnStroke.getLocation().y);
//paintModePanel.setVisible(false);
pnButton.add(paintModePanel);
welcomePanel=new WelcomePanel();
welcomePanel.setLocation(pnStroke.getLocation());
welcomePanel.setVisible(false);
pnButton.add(welcomePanel);
pnButton.setPreferredSize(new Dimension(58,(btn.length/2)*30+pnStroke.getHeight()+pnSquare.getHeight()+20));
add(pnButton);
Object[] objComponents=pnButton.getComponents();
for (int i=0; i<objComponents.length; i++) {
if (objComponents[i] instanceof JToggleButton) {
JToggleButton btn=((JToggleButton)objComponents[i]);
btn.setFocusable(false);
btn.addActionListener(this);
}
}
setToggleButton(0);
}
public void actionPerformed(ActionEvent e) {
String s=e.getActionCommand();
if ("OpenFile".equals(s)) {
instance.openFile(null);
}
else if ("SaveAsFile".equals(s)) {
instance.saveFile(true);
}
else if ("SaveFile".equals(s)) {
instance.saveFile(false);
}
else if ("NewFile".equals(s)) {
instance.initParam();
instance.fileName=null;
}
else if("Export".equals(s)){
instance.saveFile2(instance.c);
}
else if ("Exit".equals(s)) {
System.exit(0);
}
else if ("AboutMe".equals(s)) {
JOptionPane.showMessageDialog(null," Copyright(c) 2008","关于 "+Project.TITLE,JOptionPane.INFORMATION_MESSAGE);
}
else if ("SetBackColor".equals(s)) {
Color c=JColorChooser.showDialog(instance,"背景色",instance.backColor);
if (c!=null) {
instance.backColor=c;
instance.c.setBackground(c);
instance.repaint();
}
}
else if ("SetStroke".equals(s)) {
String input=JOptionPane.showInputDialog(instance,"输入粗细数值 (>0)",instance.stroke);
if (input==null) return;
float stroke=1.0f;
try {
stroke=Float.parseFloat(input);
}
catch (Exception ee) {
System.out.println (ee);
}
setStroke(stroke);
pnStroke.setStroke(stroke);
}
else if ("SetCanvas".equals(s)) {
String inputW=JOptionPane.showInputDialog(instance,"输入画布宽 (>0)",instance.width);
if (inputW==null) return;
String inputH=JOptionPane.showInputDialog(instance,"输入画布高 (>0)",instance.height);
if (inputH==null) return;
int width=instance.width;
int height=instance.height;
try {
width=Integer.parseInt(inputW);
height=Integer.parseInt(inputH);
}
catch (Exception ee) {
System.out.println (ee);
}
instance.width=width;
instance.height=height;
instance.c.setSize(width,height);
instance.repaint();
}
else if ("Undo".equals(s)) {
if (instance.undoGraphics.size()==0) return;
instance.graphics.add(instance.undoGraphics.getLast());
instance.undoGraphics.removeLast();
if (instance.undoGraphics.size()==0) {
instance.setUndoable(false);
}
instance.repaint();
}
else if ("DelObject".equals(s)) {
deleteObject();
}
else if("Clone".equals(s)){
try {
cloneObject();
// cloneObject();
} catch (CloneNotSupportedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
else {
//改变按钮选择 state
instance.isFilling=false;
if ("move".equals(s)) {
instance.setType(-1);
setToggleButton(0);
}
else if ("pencil".equals(s)) {
instance.setType(BaseObject.PENCIL);
setToggleButton(1);
}
else if ("colorfill".equals(s))
{
instance.setType(BaseObject.FILL);
instance.isFilling=true;
setToggleButton(2);
}
else if("erase".equals(s))
{
instance.setType(BaseObject.ERASE);
setToggleButton(3);
}
else if("rotate".equals(s))
{
instance.setType(BaseObject.ROTATE);
instance.isRotating=true;
setToggleButton(4);
}
else if ("line".equals(s)) {
instance.setType(BaseObject.LINE);
setToggleButton(5);
}
else if ("rect".equals(s)) {
instance.isFill=false;
instance.setType(BaseObject.RECTANGLE);
setToggleButton(6);
}
else if ("roundrect".equals(s)) {
instance.isFill=false;
instance.setType(BaseObject.ROUNDRECT);
setToggleButton(7);
}
else if ("oval".equals(s)) {
instance.isFill=false;
instance.setType(BaseObject.OVAL);
setToggleButton(8);
}
}
}
/**
* 删除当前选中物体
*/
public void deleteObject() {
if (instance.nowObject>=0) {
instance.undoGraphics.add(instance.graphics.remove(instance.nowObject));
instance.setUndoable(true);
instance.instance.setState("已删除物体 "+String.valueOf(instance.nowObject)+" !");
instance.nowObject=-1;
instance.nowGraphics=-1;
instance.redraw();
instance.setDelable(false);
}
}
public void cloneObject() throws CloneNotSupportedException {
if(instance.nowObject>=0){
BaseObject t;
if (instance.graphics.get(instance.nowObject).type==BaseObject.LINE) {
//t=new ObjLine();
t=(ObjLine)instance.graphics.get(instance.nowObject).clone();
}
else if (instance.graphics.get(instance.nowObject).type==BaseObject.RECTANGLE) {
//t=new ObjRectangle();
t=(ObjRectangle)instance.graphics.get(instance.nowObject).clone();
}
else if (instance.graphics.get(instance.nowObject).type==BaseObject.ROUNDRECT) {
//t=new ObjRoundRect();
t=(ObjRoundRect)instance.graphics.get(instance.nowObject).clone();
}
else if (instance.graphics.get(instance.nowObject).type==BaseObject.OVAL) {
//t=new ObjOval();
t=(ObjOval)instance.graphics.get(instance.nowObject).clone();
}
else if (instance.graphics.get(instance.nowObject).type==BaseObject.PENCIL) {
//t=new ObjPolyline();
t=(ObjPolyline)instance.graphics.get(instance.nowObject).clone();
}
else { //if (nowType==G2d.POLYGON) {
//t=new ObjPolygon();
t=(ObjPolygon)instance.graphics.get(instance.nowObject).clone();
}
instance.graphics.add(t);
}
}
/**
* 设置画笔粗细
* @param f 画笔粗细
*/
public void setStroke(float f) {
instance.stroke=f;
}
/**
* 设置是否绘制正二维图形
* @param square 是否绘制正二维图形
*/
public void setSquare(boolean square) {
instance.isSquare=square;
}
/**
* 设置渐变填充样式
* @param type 渐变样式,0-不渐变,1-水平渐变,2-垂直渐变,3-对角渐变
* @see BaseObject#gradientPaint
* @see BaseObject#setGradientPaint(Point,Point)
*/
public void setPaintMode(int type) {
instance.gradientPaint=type;
}
private void setToggleButton(int index) {
for (int i=0; i<btn.length; i++)
btn[i].setSelected(false);
btn[index].setSelected(true);
String s=sCmds[index];
welcomePanel.setVisible(false);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -