画笔程序说明
//In the last version I have finish the function to write a line ... //This version 0.2 will add more fun things... import java.awt.*; import javax.swing.*; import java.awt.event.*; public class DrawPad extends Frame { IDrawPad idp; JButton b1; JButton b2; JPanel jpl; public void init() { idp=new IDrawPad(this); jpl=new JPanel(new GridLayout(1,2,10,10)); b1=new JButton("Black"); b2=new JButton("Other"); //add(idp); add(idp,BorderLayout.CENTER); add(jpl,BorderLayout.NORTH); jpl.add(b1); jpl.add(b2); b1.addActionListener(idp); idp.init(); idp.setBackground(Color.magenta); this.setBackground(Color.white); this.setVisible(true); addWindowListener(new WindowAdapter(){ @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String args[]) { new DrawPad().init(); } } class IDrawPad extends JPanel implements ActionListener{ DrawPad dp; IDrawPad(DrawPad dp) { this.dp=dp; } Color c=new Color(0, 150, 150); Point Frond=new Point(0,0); Point Back=new Point(0,0); Image tem; int i=1; boolean s_s; @SuppressWarnings("deprecation") public void actionPerformed(ActionEvent e) { if(i%4==3) { dp.b1.setLabel("CYAN"); c=Color.cyan; dp.b1.setBackground(c); i++; //System.out.println(i); } else if(i%4==2){ dp.b1.setLabel("Black"); c=Color.black; dp.b1.setBackground(c); i++; //System.out.println(i); } else if(i%4==1) { dp.b1.setLabel("RED"); c=Color.red; dp.b1.setBackground(c); i++; //System.out.println(i); } else if(i%4==0) { dp.b1.setLabel("BLUE"); c=Color.blue; dp.b1.setBackground(c); i++; //System.out.println(i); } } public void init() { setBounds(100,100,700,550); setBackground(Color.orange); setVisible(true); this.addMouseMotionListener(new MouseE()); this.addMouseListener(new MouseE()); } public void update(Graphics g) { if(tem==null) { tem=this.createImage(700, 550); } Graphics tg=tem.getGraphics(); paint(tg); g.drawImage(tem, 0, 0, null); } public void paint(Graphics g) { g.setColor(c); g.drawLine(Back.x, Back.y, Frond.x, Frond.y); Back=Frond; } } class MouseE extends MouseMotionAdapter implements MouseListener { IDrawPad y; @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent e) { y=(IDrawPad)e.getSource(); //System.out.println(y.Back); y.Back=e.getPoint(); } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } public void mouseDragged(MouseEvent e) { y=(IDrawPad)e.getSource(); y.Frond=e.getPoint(); y.repaint(); } }
1.在最初,我直接在DrawPad上面作画,然后不断的update()这个画面....这样这个画面其实都是一个画板.但是实际中,我们只需要在一个画板区域作画...其他地方放置一个按键等功能...
2.所以我们需要在主窗口中添加一个可以画画的组件.也就是拥有paint()方法的一个组件...我们发现JPanel中有这个方法....所以我们新建一个IDrawPad从JPanel中继承...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端