包装测试; 导入 java.awt.*; 导入 java.awt.event.*; 导入 java.awt.geom.Ellipse2D; 导入 java.awt.image.BufferedImage; 导入 javax.swing.*; 公共类 test_bmp 扩展 JPanel 实现 MouseListener,MouseMotionListener,ActionListener { 静态 BufferedImage 图像; 颜色颜色; 点开始=新点(); 点结束 =new Point(); JButton 椭圆=新 JButton("椭圆"); JButton 矩形=新 JButton("矩形"); JButton line=new JButton("Line"); 选择字符串; 公共 test_bmp() { 颜色=颜色.黑色; setBorder(BorderFactory.createLineBorder(Color.black)); addMouseListener(this); addMouseMotionListener(this); } 公共无效paintComponent(图形g) { //super.paintComponent(g); g.drawImage(图像, 0, 0, 这个); Graphics2D g2 = (Graphics2D)g; g2.setPaint(Color.black); 如果(选择==“椭圆”) { g2.drawOval(start.x, start.y, (end.x-start.x),(end.y-start.y)); System.out.println("开始:"+start.x+","+start.y); System.out.println("结束:"+end.x+","+end.y); } 如果(选择==“行”) g2.drawLine(start.x,start.y,end.x,end.y); } //在缓冲图像上绘制 公共无效绘制() { Graphics2D g2 = image.createGraphics(); g2.setPaint(颜色); System.out.println("画"); 如果(选择==“行”) g2.drawLine(start.x, start.y, end.x, end.y); 如果(选择==“椭圆”) { g2.drawOval(start.x, start.y, (end.x-start.x),(end.y-start.y)); System.out.println("开始:"+start.x+","+start.y); System.out.println("结束:"+end.x+","+end.y); } 重绘(); g2.dispose(); } 公共JPanel addButtons() { JPanel 按钮面板=新 JPanel(); buttonpanel.setBackground(color.lightGray); buttonpanel.setLayout(new BoxLayout(buttonpanel,BoxLayout.Y_AXIS)); elipse.addActionListener(this); 矩形.addActionListener(this); line.addActionListener(this); buttonpanel.add(椭圆); buttonpanel.add(Box.createRigidArea(new Dimension(15,15))); buttonpanel.add(矩形); buttonpanel.add(Box.createRigidArea(new Dimension(15,15))); buttonpanel.add(line); 返回按钮面板; } 公共静态无效主(字符串参数 []) { test_bmp 应用程序=新的 test_bmp(); //主窗口 JFrame frame=new JFrame("白板"); frame.setLayout(new BorderLayout()); frame.add(application.addButtons(),BorderLayout.WEST); 框架。添加(应用程序); //窗口大小 frame.setSize(600,400); frame.setLocation(0,0); frame.setVisible(true); int w = frame.getWidth(); int h = frame.getHeight(); image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics2D g2 = image.createGraphics(); g2.setPaint(Color.white); g2.fillRect(0,0,w,h); g2.dispose(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } @覆盖 公共无效mouseClicked(MouseEvent arg0){ // TODO 自动生成的方法存根 } @覆盖 公共无效鼠标输入(鼠标事件 arg0){ // TODO 自动生成的方法存根 } @覆盖 公共无效mouseExited(MouseEvent arg0){ // TODO 自动生成的方法存根 } @覆盖 public void mousePressed(MouseEvent 事件) { 开始 = event.getPoint(); } @覆盖 public void mouseReleased(MouseEvent 事件) { 结束 = event.getPoint(); 画(); } @覆盖 公共无效鼠标拖动(鼠标事件e) { 结束=e.getPoint(); 重绘(); } @覆盖 公共无效鼠标移动(鼠标事件 arg0){ // TODO 自动生成的方法存根 } @覆盖 公共无效actionPerformed(ActionEvent e) { 如果(e.getSource()==椭圆) 选择=“椭圆”; 如果(例如getSource()==线) 选定="行"; 画(); } }
我需要创建一个绘画应用程序。当我通过从左到右拖动鼠标来绘制椭圆时,它什么也不显示。为什么?我应该在这里使用任何其他功能吗?