📄 jpaint.java
字号:
int w = Integer.parseInt(t.nextToken());
int h = Integer.parseInt(t.nextToken());
currentBackColor = new Color(Integer.parseInt(t.nextToken()));
polygon.clear();
Shape temp;
for(int i = 0; i < size; i++) {
temp = new Shape();
temp.readData(in);
polygon.add(temp);
}
setSize(w, h);
in.close();
} catch(IOException exception) {
exception.printStackTrace();
}
}
private class LabelPanel extends JPanel //设置显示坐标
{
JLabel label;
public LabelPanel()
{
label = new JLabel("Current X: " + currentX
+ " Current Y: " + currentY);
add(label);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
label.setText("Current X: " + currentX
+ " Current Y: " + currentY);
}
}
private class MouseHandler extends MouseAdapter
{
private int tempX;
private int tempY;
private Shape temp;
public void mousePressed(MouseEvent event)
{
tempX = event.getX();
tempY = event.getY();
currentX = tempX;
currentY = tempY;
int isLeft = event.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK;
int isRight = event.getModifiersEx() & InputEvent.BUTTON3_DOWN_MASK;
if(isLeft != 0 && paintEnabled)
{
switch(currentShape)
{
case Shape.LINE:
temp = new Line();
break;
case Shape.SQUARE:
temp = new Square();
break;
case Shape.ELLIPSE:
temp = new Ellipse();
break;
case Shape.ERASER:
temp = new Eraser();
break;
default:
temp = new Line();
}
temp.setStart(tempX, tempY);
temp.setEnd(tempX, tempY);
temp.color = currentColor;
temp.isFill = currentFill;
polygon.add(temp);
setCursor(Cursor.getPredefinedCursor(
Cursor.CROSSHAIR_CURSOR));
}
else if(isLeft != 0 && !paintEnabled)
{
int size = polygon.size();
setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
for(int i = 0; i < size; i++)
{
temp = (Shape)polygon.get(i);
if(temp.isContain(tempX, tempY))
temp.isSelected = true;
}
moveX = tempX;
moveY = tempY;
}
else if(isRight != 0)
{
for(int i = 0; i < polygon.size(); i++)
{
temp = (Shape)polygon.get(i);
if(temp.isContain(tempX, tempY))
{
polygon.remove(i);
i--;
}
}
repaint();
}
}
public void mouseReleased(MouseEvent event) {
tempX = event.getX();
tempY = event.getY();
currentX = tempX;
currentY = tempY;
int isLeft = event.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK;
if(isLeft != 0 && paintEnabled) {
temp = (Shape)polygon.get(polygon.size() - 1);
temp.setEnd(tempX, tempY);
}
if(!paintEnabled) {
int size = polygon.size();
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
for(int i = 0; i < size; i++) {
temp = (Shape)polygon.get(i);
temp.isSelected = false;
}
}
else
setCursor(Cursor.getDefaultCursor());
}
} // MouseHandler() end
private class MouseMotionHandler implements MouseMotionListener
{
private int tempX;
private int tempY;
private Shape temp;
int x,y;
//鼠标移动事件
public void mouseMoved(MouseEvent event) {
currentX = event.getX();
currentY = event.getY();
repaint();
}
//鼠标拖拽事件
public void mouseDragged(MouseEvent event)
{
tempX = event.getX();
tempY = event.getY();
currentX = tempX;
currentY = tempY;
int isLeft = event.getModifiersEx() & InputEvent.BUTTON1_DOWN_MASK;
int isRight = event.getModifiersEx() & InputEvent.BUTTON3_DOWN_MASK;
if(isLeft != 0 && paintEnabled) {
int size = polygon.size();
temp = (Shape)polygon.get(size - 1);
temp.setEnd(tempX, tempY);
} else if(isLeft != 0 && !paintEnabled) {
int size = polygon.size();
int x1, y1, x2, y2;
for(int i = 0; i < size; i++) {
temp = (Shape)polygon.get(i);
if(temp.isSelected) {
x1 = (int)temp.getStart().getX() + (tempX - moveX);
y1 = (int)temp.getStart().getY() + (tempY - moveY);
x2 = (int)temp.getEnd().getX() + (tempX - moveX);
y2 = (int)temp.getEnd().getY() + (tempY - moveY);
temp.setStart(x1, y1);
temp.setEnd(x2, y2);
}
moveX = tempX;
moveY = tempY;
}
}
repaint();
} // mouseDragged() end
} // MouseHandler() end
}
class PaintFrame extends JFrame {
PaintPanel paintPanel;
JMenuItem backItem;
JMenuItem foreItem;
JRadioButtonMenuItem draw;
JRadioButtonMenuItem fill;
private static int ID = -1;
public PaintFrame() {
ID++;
if(ID == 0)
setTitle("JPaint v1.0");
else
setTitle("JPaint v1.0(" + ID + ")");
setBounds(150, 150, 500, 400); //设置面板大小
ImageIcon img1=new ImageIcon(JPaint.class.getResource("17.png"));//设置图标
setIconImage(img1.getImage());
paintPanel = new PaintPanel();
getContentPane().add(paintPanel);
JMenuBar menuBar = makeMenuBar(); //建立菜单栏
setJMenuBar(menuBar);
backItem.addActionListener(new
ActionListener() {
public void actionPerformed(ActionEvent e) {
Color defaultColor = Color.WHITE;
Color selected = JColorChooser.showDialog(
PaintFrame.this, "Background Color", defaultColor);
paintPanel.setBackColor(selected);
}
});
//菜单项目监听
foreItem.addActionListener(new
ActionListener() {
public void actionPerformed(ActionEvent e) {
Color defaultColor = Color.BLACK;
Color selected = JColorChooser.showDialog(
PaintFrame.this, "Change ForeColor", defaultColor);
paintPanel.setForeColor(selected);
}
});
draw.addActionListener(new
ActionListener() {
public void actionPerformed(ActionEvent e) {
paintPanel.setDraw();
}
});
fill.addActionListener(new
ActionListener() {
public void actionPerformed(ActionEvent e) {
paintPanel.setFill();
}
});
}
private JMenuBar makeMenuBar() {
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("文件");
fileMenu.setMnemonic('F'); //设置快捷键
menuBar.add(fileMenu);
JMenuItem newItem = new JMenuItem("新建", 'N');//设置菜单选项对应的快捷键
newItem.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK));
newItem.addActionListener(new
ActionListener() {
public void actionPerformed(ActionEvent e) {
PaintFrame frame = new PaintFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//设置面板关闭方式
frame.show();
}
}); //新建文件
fileMenu.add(newItem);
JMenuItem openItem = new JMenuItem("打开", 'O'); //设置菜单选项对应的快捷键
openItem.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK));
openItem.addActionListener(new
ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
chooser.addChoosableFileFilter(new MyFilter());
int result = chooser.showOpenDialog(PaintFrame.this);
if(result == JFileChooser.APPROVE_OPTION) {
String file = chooser.getSelectedFile().getName();
paintPanel.readShapes(file);
}
}
}); //打开文件
fileMenu.add(openItem);
JMenuItem saveItem = new JMenuItem("保存", 'O'); //设置菜单选项对应的快捷键
saveItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_S, InputEvent.CTRL_MASK));
saveItem.addActionListener(new
ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
chooser.addChoosableFileFilter(new MyFilter());
int result = chooser.showSaveDialog(PaintFrame.this);
if(result == JFileChooser.APPROVE_OPTION) {
String file = chooser.getSelectedFile().getName();
paintPanel.writeShapes(file);
}
}
}); //保存文件
fileMenu.add(saveItem);
fileMenu.addSeparator();
JMenuItem exitItem = new JMenuItem("退出", 'x');
exitItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_X, InputEvent.CTRL_MASK));
exitItem.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
}); //退出
fileMenu.add(exitItem);
JMenu setMenu = new JMenu("设置");
setMenu.setMnemonic('S');
menuBar.add(setMenu);
backItem = new JMenuItem("背景色", 'B');
setMenu.add(backItem);
foreItem = new JMenuItem("前景色", 'C');
setMenu.add(foreItem);
ButtonGroup group = new ButtonGroup();
draw = new JRadioButtonMenuItem("画", true);
fill = new JRadioButtonMenuItem("填充", false);
group.add(draw);
group.add(fill);
JMenu style = new JMenu("格式");
style.add(draw);
style.add(fill);
setMenu.add(style);
JMenu helpMenu = new JMenu("帮助");
helpMenu.setMnemonic('H');
menuBar.add(helpMenu);
JMenuItem helpItem = new JMenuItem("帮助", 'H');
helpItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_H, InputEvent.CTRL_MASK));
helpItem.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
HelpFrame help = new HelpFrame();
help.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
help.show();
}
});
helpMenu.add(helpItem);
JMenuItem aboutItem = new JMenuItem("关于", 'A');
aboutItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_A, InputEvent.CTRL_MASK));
aboutItem.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
JOptionPane.showMessageDialog(
PaintFrame.this, " JPaint Version 0.1\n\n" +
"作者 : 李慧琼 20031190028\n 王乃蓁 20031190030 ");
}
});
helpMenu.add(aboutItem);
return menuBar;
}
private class MyFilter extends FileFilter {
public boolean accept(File f) {
return f.getName().toLowerCase().endsWith(".jpt")
|| f.isDirectory();
}
public String getDescription() {
return "JPaint file type";
}
}
private class HelpFrame extends JFrame {
public HelpFrame() {
setTitle("JPaint Help");
setSize(450, 520);
setResizable(false);
JTextArea text = new JTextArea(20, 42);
Font f = new Font("楷体", Font.PLAIN, 20); //设置字体和大小
text.setFont(f);
text.setForeground(Color.BLUE);
text.setLineWrap(true);
text.setWrapStyleWord(true);
text.setEditable(false);
text.append(" JPaint v0.1 帮助文档\n\n");
text.append(" JPaint 是一个用JAVA语言编写的简单画图程序," + " 文件后缀名为 *.jpt,\n");
text.append(" 选择不同按钮或通过菜单选项均可以改变颜色,图形式样."+"画图方法为鼠标操作,拖拽鼠标左键实现'画',点击鼠标右键可以清除所画图形.\n");
getContentPane().add(text);
}
}
}
public class JPaint {
public static void main(String[] args) {
PaintFrame frame = new PaintFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show(); //令可见
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -