📄 gcanvas.java
字号:
* @param y Polyline y components. * @param image Image to render. */ void render (int[] x, int[] y, GImage image) { Graphics2D canvas = (Graphics2D) backBuffer_.getGraphics(); // The image rectangle x,y holds delta values for positioning int dx = image.getRectangle().x; int dy = image.getRectangle().y; int nPoints = x.length; for (int i = 0; i < nPoints; i++) canvas.drawImage (image.getImage(), x[i] + dx, y[i] + dy, this); } /** * Position the specified AWT component within this JPanel. * * @param component AWT component to position. */ void render (GComponent component) { Component c = component.getComponent(); c.setLocation (component.getRectangle().x, component.getRectangle().y); if (!isAncestorOf (c)) add (c); } /** * Utility method for computing the rectangle bounding box of * a rendered string using the specified font. * * @param string Sample string. * @param font Font to use. * @return Rectangle bounding box of rendered string. */ Rect getStringBox (String string, Font font) { Graphics2D graphics = (Graphics2D) getGraphics(); // For some reason the graphics is not always set if (graphics == null) return new Rect (0, 0, 0, 0); TextLayout textLayout = new TextLayout (string, font, graphics.getFontRenderContext()); Rectangle2D bounds = textLayout.getBounds(); int width = (int) Math.ceil (bounds.getWidth()); int height = (int) Math.ceil (bounds.getHeight()); return new Rect (0, 0, width, height); } /** * From the Printable interface. Print the present canvas. * * @param graphics The paper graphics. * @param pageFormat Page format (not used). * @param pageIndex Page index (not used). * @return Printable.PAGE_EXISTS. */ public int print (Graphics graphics, PageFormat pageFormat, int pageIndex) { if (pageIndex > 0) return Printable.NO_SUCH_PAGE; Graphics2D paper = (Graphics2D) graphics; paper.drawImage (backBuffer_, 0, 0, getWidth(), getHeight(), this); return Printable.PAGE_EXISTS; } /** * Save the current graphics as a gif file. * * @param file File to store in. */ void saveAsGif (File file) throws IOException { try { GifEncoder gifEncoder = new GifEncoder (backBuffer_); OutputStream stream = new FileOutputStream (file); gifEncoder.write (stream); stream.close(); } catch (AWTException exception) { throw new IOException ("GIF encoder AWT error"); } } /** * Print the canvas content. * * @return True if no exception was caught, false otherwise. */ boolean print() { try { PrinterJob printerJob = PrinterJob.getPrinterJob(); printerJob.setPrintable (this); printerJob.print(); return true; } catch (PrinterException exception) { return false; } } /** * Implied by LayoutManager * * @param name Name of component to add. * @param component Component to add. */ public void addLayoutComponent (String name, Component component) { } /** * Implied by LayoutManager. Layout the specified container. All components * are positined at thir specified x, y location as determined by * the GAnnotator. * * @param container Container to layout. */ public void layoutContainer (Container container) { Component[] components = container.getComponents(); for (int i = 0; i < components.length; i++) { Component component = components[i]; int x = component.getX(); int y = component.getY(); int width = component.getPreferredSize().width; int height = component.getPreferredSize().height; component.setBounds (x, y, width, height); } } /** * Implied by LayoutManager. Return minimum layout size. * * @param container Component to return minimum layout size of. * @return Size of canvas window. */ public Dimension minimumLayoutSize (Container container) { return new Dimension (getWidth(), getHeight()); } /** * Implied by LayoutManager. Return maximum layout size. * * @param container Component to return maximum layout size of. * @return Size of canvas window. */ public Dimension preferredLayoutSize (Container container) { return new Dimension (getWidth(), getHeight()); } /** * Implied by LayoutManager. * * @param component Component to remove. */ public void removeLayoutComponent (Component component) { } /** * Implied by MouseListener. Not used. * * @param event Mouse event trigging this method. */ public void mouseClicked (MouseEvent event) { } /** * Method called when the pointer enters this window. If an interaction * is installed, pass a FOCUS_IN event to it. * * @param event Mouse event trigging this method. */ public void mouseEntered (MouseEvent event) { window_.mouseEntered (event.getX(), event.getY()); } /** * Method called when the pointer exits this window. If an interaction * is installed, pass a FOCUS_OUT event to it. * * @param event Mouse event trigging this method. */ public void mouseExited (MouseEvent event) { window_.mouseExited (event.getX(), event.getY()); } /** * Method called when a mouse pressed event occurs in this window. * If an interaction is installed, pass a BUTTON*_DOWN event to it. * * @param event Mouse event trigging this method. */ public void mousePressed (MouseEvent event) { int modifiers = event.getModifiers(); int buttonEvent; if (modifiers == event.BUTTON1_MASK) buttonEvent = GWindow.BUTTON1_DOWN; else if (modifiers == event.BUTTON2_MASK) buttonEvent = GWindow.BUTTON2_DOWN; else buttonEvent = GWindow.BUTTON3_DOWN; window_.mousePressed (buttonEvent, event.getX(), event.getY()); } /** * Method called when a mouse release event occurs in this window. * If an interaction is installed, pass a BUTTON*_UP event to it. * * @param event Mouse event trigging this method. */ public void mouseReleased (MouseEvent event) { int modifiers = event.getModifiers(); int buttonEvent; if (modifiers == event.BUTTON1_MASK) buttonEvent = GWindow.BUTTON1_UP; else if (modifiers == event.BUTTON2_MASK) buttonEvent = GWindow.BUTTON2_UP; else buttonEvent = GWindow.BUTTON3_UP; window_.mouseReleased (buttonEvent, event.getX(), event.getY()); } /** * Method called when the mouse is dragged (moved with button pressed) in * this window. If an interaction is installed, pass a BUTTON*_DRAG * event to it. * * @param event Mouse event trigging this method. */ public void mouseDragged (MouseEvent event) { int modifiers = event.getModifiers(); int buttonEvent; if (modifiers == event.BUTTON1_MASK) buttonEvent = GWindow.BUTTON1_DRAG; else if (modifiers == event.BUTTON2_MASK) buttonEvent = GWindow.BUTTON2_DRAG; else buttonEvent = GWindow.BUTTON3_DRAG; window_.mouseDragged (buttonEvent, event.getX(), event.getY()); } /** * Method called when the mouse is moved inside this window. * If an interaction is installed, pass a MOTION event to it. * * @param event Mouse event trigging this method. */ public void mouseMoved (MouseEvent event) { window_.mouseMoved (event.getX(), event.getY()); } /** * Implied by ComponentListener. Not used. * * @param event Event trigging this method. */ public void componentHidden (ComponentEvent event) {} /** * Implied by ComponentListener. Not used. * * @param event Event trigging this method. */ public void componentMoved (ComponentEvent event) {} /** * Implied by ComponentListener. Not used. * * @param event Event trigging this method. */ public void componentShown (ComponentEvent event) {} /** * Called when the AWT component is resized. * * @param event Resize event. */ public void componentResized (ComponentEvent event) { createBackBuffer(); cleared_ = new Rect (0, 0, getWidth(), getHeight()); window_.resize(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -