@Override public JComponent getContent() { if (this.obj == null) { throw new IllegalStateException("No object set."); } // TODO: Make this nicer later. if (this.obj instanceof Chapter) { Chapter c = (Chapter) this.obj; JComponent t = UIUtils.getChapterInfoPreview(c, null, this.viewer); if (t == null) { // May be a fake chapter, return null. return null; } t.setSize(new Dimension(300, Short.MAX_VALUE)); return t; } else { String firstLine = "<b><i>No description.</i></b>"; String t = (obj.getDescription() != null ? obj.getDescription().getText() : null); if ((t != null) && (t.length() > 0)) { firstLine = new Paragraph(t, 0).getFirstSentence().getText(); } JEditorPane desc = UIUtils.createHelpTextPane(firstLine, null); FormLayout fl = new FormLayout("380px", "p"); PanelBuilder pb = new PanelBuilder(fl); CellConstraints cc = new CellConstraints(); pb.add(desc, cc.xy(1, 1)); desc.setAlignmentX(Component.LEFT_ALIGNMENT); JPanel p = pb.getPanel(); p.setOpaque(true); p.setBackground(UIUtils.getComponentColor()); return p; } }
/* * Create a BufferedImage for Swing components. * The entire component will be captured to an image. * * @param component Swing component to create image from * @param fileName name of file to be created or null * @return image the image for the given region * @exception IOException if an error occurs during writing */ public static BufferedImage createImage(JComponent component, String fileName) throws IOException { Dimension d = component.getSize(); if (d.width == 0) { d = component.getPreferredSize(); component.setSize(d); } Rectangle region = new Rectangle(0, 0, d.width, d.height); return ScreenCapture.createImage(component, region, fileName); }
private void addAndSet(JComponent j, int x, int y, int length, int width) { j.setLocation(x, y); j.setSize(length, width); this.add(j); }
/** * Paints the border for the specified component with the specified position and size. * * @param c the component for which this border is being painted * @param g the paint graphics * @param x the x position of the painted border * @param y the y position of the painted border * @param width the width of the painted border * @param height the height of the painted border */ public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { Border border = getBorder(); if (label == null) { if (border != null) { border.paintBorder(c, g, x, y, width, height); } return; } Rectangle grooveRect = new Rectangle( x + EDGE_SPACING, y + EDGE_SPACING, width - (EDGE_SPACING * 2), height - (EDGE_SPACING * 2)); Dimension labelDim = label.getPreferredSize(); int baseline = label.getBaseline(labelDim.width, labelDim.height); int ascent = Math.max(0, baseline); int descent = labelDim.height - ascent; int diff; Insets insets; if (border != null) { insets = border.getBorderInsets(c); } else { insets = new Insets(0, 0, 0, 0); } diff = Math.max(0, ascent / 2 + TEXT_SPACING - EDGE_SPACING); grooveRect.y += diff; grooveRect.height -= diff; compLoc.y = grooveRect.y + insets.top / 2 - (ascent + descent) / 2 - 1; int justification; if (c.getComponentOrientation().isLeftToRight()) { justification = LEFT; } else { justification = RIGHT; } switch (justification) { case LEFT: compLoc.x = grooveRect.x + TEXT_INSET_H + insets.left; break; case RIGHT: compLoc.x = (grooveRect.x + grooveRect.width - (labelDim.width + TEXT_INSET_H + insets.right)); break; } // If title is positioned in middle of border AND its fontsize // is greater than the border's thickness, we'll need to paint // the border in sections to leave space for the component's background // to show through the title. // if (border != null) { if (grooveRect.y > compLoc.y - ascent) { Rectangle clipRect = new Rectangle(); // save original clip Rectangle saveClip = g.getClipBounds(); // paint strip left of text clipRect.setBounds(saveClip); if (computeIntersection(clipRect, x, y, compLoc.x - 1 - x, height)) { g.setClip(clipRect); border.paintBorder( c, g, grooveRect.x, grooveRect.y, grooveRect.width, grooveRect.height); } // paint strip right of text clipRect.setBounds(saveClip); if (computeIntersection( clipRect, compLoc.x + labelDim.width + 1, y, x + width - (compLoc.x + labelDim.width + 1), height)) { g.setClip(clipRect); border.paintBorder( c, g, grooveRect.x, grooveRect.y, grooveRect.width, grooveRect.height); } // paint strip below text clipRect.setBounds(saveClip); if (computeIntersection( clipRect, compLoc.x - 1, compLoc.y + ascent + descent, labelDim.width + 2, y + height - compLoc.y - ascent - descent)) { g.setClip(clipRect); border.paintBorder( c, g, grooveRect.x, grooveRect.y, grooveRect.width, grooveRect.height); } // restore clip g.setClip(saveClip); } else { border.paintBorder(c, g, grooveRect.x, grooveRect.y, grooveRect.width, grooveRect.height); } label.setLocation(compLoc); label.setSize(labelDim); } }