主函数:程序的入口:
package guidemo;
public class Demo {
public static void main(String[] args) {
GuiWindow gwin = new GuiWindow();
gwin.init();
}
}
窗口:JFrame:
package guidemo;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
public class GuiWindow extends JFrame {
private int w = 400;
private int h = 350;
Cav cav = new Cav();
public void init(){
setTitle("Gui手绘");
setSize(w,h);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cav.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
if(e.isPopupTrigger()){
cav.getJpm().show(cav,e.getX(),e.getY());
}
cav.setPreX(-1);
cav.setPreY(-1);
}
});
System.out.println(cav.getPreX());
System.out.println(cav.getPreY());
cav.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
if(cav.getPreX()>0 && cav.getPreY()>0) {
cav.getG().setColor(cav.getThis_color());
cav.getG().drawLine(cav.getPreX(), cav.getPreY(), e.getX(), e.getY());
// System.out.println("yes");
}
cav.setPreX(e.getX());
cav.setPreY(e.getY());
cav.repaint();
}
});
add(cav);
setPreferredSize(new Dimension(400,350));
pack();
setVisible(true);
}
}
画布:Canvas:
package guidemo;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
public class Cav extends Canvas {
PopupMenu jpm = new PopupMenu();
MenuItem mi1 = new MenuItem("红色");
MenuItem mi2 = new MenuItem("蓝色");
MenuItem mi3 = new MenuItem("绿色");
private Color this_color = Color.BLACK;
private int preX = -1;
private int preY = -1;
public int getPreX() {
return preX;
}
public int getPreY() {
return preY;
}
public void setPreX(int preX) {
this.preX = preX;
}
public void setPreY(int preY) {
this.preY = preY;
}
public Color getThis_color() {
return this_color;
}
public Graphics getG() {
return g;
}
BufferedImage bufferedImage = new BufferedImage(400, 350, BufferedImage.TYPE_3BYTE_BGR);
Graphics g = bufferedImage.getGraphics();
public PopupMenu getJpm() {
return jpm;
}
@Override
public void paint(Graphics g) {
g.drawImage(bufferedImage,0,0,null);
}
public Cav(){
jpm.add(mi1);
jpm.add(mi2);
jpm.add(mi3);
add(jpm);
ActionListener act = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String actionCommand = e.getActionCommand();
switch (actionCommand){
case "红色":
this_color = Color.red;
System.out.println("red");
break;
case "蓝色":
this_color = Color.blue;
System.out.println("blue");
break;
case "绿色":
this_color = Color.green;
System.out.println("green");
break;
}
}
};
mi1.addActionListener(act);
mi2.addActionListener(act);
mi3.addActionListener(act);
g.setColor(Color.white);
g.fillRect(0,0,400,350);
}
}
最终效果: