Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883

    [JAVA] TitleBorder

    Devo mettere un new TitleBorder(title) ad un pannello

    il problema è che la stringa title deve essere visualizzata su piu'righe (io dovrei visualizzarlo su 3 righe)

    come posso fare? i caratteri \n vengono ignorati, ho provato ad utilizzare htlm nella stringa (con il tag
    ) ma non funziona

    allora ho pensato che si potrebbe scrivere una sottoclasse di TitleBorder e riscrivere il metodo paint, ma non lo so riscrivere in modo che il testo vada su tre righe.

    Vi posto il codice del metodo paint della classe TitleBorder, lo sapete modificare in modo che il testo possa essere visualizzato su piu' righe ?

    codice:
    /**
         * 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 (getTitle() == null || getTitle().equals("")) {
                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));
            Font font = g.getFont();
            Color color = g.getColor();
    
            g.setFont(getFont(c));
    
            FontMetrics fm = g.getFontMetrics();
            int         fontHeight = fm.getHeight();
            int         descent = fm.getDescent();
            int         ascent = fm.getAscent();
            int         diff;
            int         stringWidth = fm.stringWidth(getTitle());
            Insets      insets;
    
            if (border != null) {
                insets = border.getBorderInsets(c);
            } else {
                insets = new Insets(0, 0, 0, 0);
            }
    
            int titlePos = getTitlePosition();
            switch (titlePos) {
                case ABOVE_TOP:
                    diff = ascent + descent + (Math.max(EDGE_SPACING,
                                     TEXT_SPACING*2) - EDGE_SPACING);
                    grooveRect.y += diff;
                    grooveRect.height -= diff;
                    textLoc.y = grooveRect.y - (descent + TEXT_SPACING);
                    break;
                case TOP:
                case DEFAULT_POSITION:
                    diff = Math.max(0, ((ascent/2) + TEXT_SPACING) - EDGE_SPACING);
                    grooveRect.y += diff;
                    grooveRect.height -= diff;
                    textLoc.y = (grooveRect.y - descent) +
                    (insets.top + ascent + descent)/2;
                    break;
                case BELOW_TOP:
                    textLoc.y = grooveRect.y + insets.top + ascent + TEXT_SPACING;
                    break;
                case ABOVE_BOTTOM:
                    textLoc.y = (grooveRect.y + grooveRect.height) -
                    (insets.bottom + descent + TEXT_SPACING);
                    break;
                case BOTTOM:
                    grooveRect.height -= fontHeight/2;
                    textLoc.y = ((grooveRect.y + grooveRect.height) - descent) +
                            ((ascent + descent) - insets.bottom)/2;
                    break;
                case BELOW_BOTTOM:
                    grooveRect.height -= fontHeight;
                    textLoc.y = grooveRect.y + grooveRect.height + ascent +
                            TEXT_SPACING;
                    break;
            }
    
    	int justification = getTitleJustification();
    	if(isLeftToRight(c)) {
    	    if(justification==LEADING || 
    	       justification==DEFAULT_JUSTIFICATION) {
    	        justification = LEFT;
    	    }
    	    else if(justification==TRAILING) {
    	        justification = RIGHT;
    	    }
    	}
    	else {
    	    if(justification==LEADING ||
    	       justification==DEFAULT_JUSTIFICATION) {
    	        justification = RIGHT;
    	    }
    	    else if(justification==TRAILING) {
    	        justification = LEFT;
    	    }
    	}
    
            switch (justification) {
                case LEFT:
                    textLoc.x = grooveRect.x + TEXT_INSET_H + insets.left;
                    break;
                case RIGHT:
                    textLoc.x = (grooveRect.x + grooveRect.width) -
                            (stringWidth + TEXT_INSET_H + insets.right);
                    break;
                case CENTER:
                    textLoc.x = grooveRect.x +
                            ((grooveRect.width - stringWidth) / 2);
                    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 (((titlePos == TOP || titlePos == DEFAULT_POSITION) &&
    		  (grooveRect.y > textLoc.y - ascent)) ||
    		 (titlePos == BOTTOM && 
    		  (grooveRect.y + grooveRect.height < textLoc.y + descent))) {
    		  
                    Rectangle clipRect = new Rectangle();
                    
                    // save original clip
                    Rectangle saveClip = g.getClipBounds();
    
                    // paint strip left of text
                    clipRect.setBounds(saveClip);
                    if (computeIntersection(clipRect, x, y, textLoc.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, textLoc.x+stringWidth+1, y,
                                   x+width-(textLoc.x+stringWidth+1), height)) {
                        g.setClip(clipRect);
                        border.paintBorder(c, g, grooveRect.x, grooveRect.y,
                                      grooveRect.width, grooveRect.height);
                    }
    
                    if (titlePos == TOP || titlePos == DEFAULT_POSITION) {
                        // paint strip below text
                        clipRect.setBounds(saveClip);
                        if (computeIntersection(clipRect, textLoc.x-1, textLoc.y+descent, 
                                            stringWidth+2, y+height-textLoc.y-descent)) {
                            g.setClip(clipRect);
                            border.paintBorder(c, g, grooveRect.x, grooveRect.y,
                                      grooveRect.width, grooveRect.height);
                        }
    
                    } else { // titlePos == BOTTOM
    		  // paint strip above text
                        clipRect.setBounds(saveClip);
                        if (computeIntersection(clipRect, textLoc.x-1, y, 
                              stringWidth+2, textLoc.y - ascent - y)) {
                            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);
                }
            }
    
            g.setColor(getTitleColor());
            g.drawString(getTitle(), textLoc.x, textLoc.y);
    
            g.setFont(font);
            g.setColor(color);
        }

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    nessun aiuto?

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    help

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    qualche idea?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.