defaultlookandfeel.java.svn-base

来自「j2me设计的界面包」· SVN-BASE 代码 · 共 1,456 行 · 第 1/4 页

SVN-BASE
1,456
字号
    public void drawList(Graphics g, List l) {
    }

    /**
     * @inheritDoc
     */
    public void drawMonthView(Graphics g, com.sun.lwuit.Calendar cal, Component mv) {

        drawBorder(g, mv, 0x020202, 0x080808, 2);
        setFG(g, mv);

        Font f = mv.getStyle().getFont();
        int fh = f.getHeight();

        int w = mv.getWidth();
        int h = mv.getHeight();
        int labelH = (fh + DAY_SPACE_H);
        int ch = h - labelH;

        int dayWidth = (w / 7);
        int dayHeight = (ch / 6);

        long sd = cal.getSelectedDay();
        Date date = new Date();

        int fix = f.stringWidth("22") / 2;


        g.setColor(mv.getStyle().getBgSelectionColor());
        g.fillRect(mv.getX() + 2, mv.getY() + 2, mv.getWidth() - 4, mv.getStyle().getFont().getHeight());

        g.setColor(mv.getStyle().getFgSelectionColor());
        g.setFont(mv.getStyle().getFont());

        String[] days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", 
        "Friday", "Saturday"};
        String[] labels = {"Su", "M", "Tu", "W", "Th", "F", "Sa"};
        
        Style dayStyle = new Style(mv.getStyle());
        dayStyle.setFgColor(mv.getStyle().getFgSelectionColor());
        dayStyle.setPadding(0, 0, 0, 0);
        dayStyle.setMargin(0, 0, 0, 0);
        dayStyle.setBgTransparency(0);
        
        Label tmp = new Label();
        tmp.setStyle(dayStyle);
        tmp.setAlignment(Label.CENTER);
        tmp.setPreferredSize(new Dimension(dayWidth, dayHeight));
        for (int i = 0; i < labels.length; i++) {
            String day = UIManager.getInstance().localize(days[i], labels[i]);
            tmp.setText(day);
            int dx = (dayWidth * i);
            tmp.setX(mv.getX() + dx);
            tmp.setY(mv.getY());
            tmp.setSize(tmp.getPreferredSize());
            drawLabel(g, tmp);
        }
        paintDates(g, date, mv, sd, f, dayWidth, dayHeight,
                labelH, fix, fh, sd);

    }

    /**
     * @inheritDoc
     */
    public void drawTextArea(Graphics g, TextArea ta) {
        setFG(g, ta);
        int line = ta.getLines();
        int oX = g.getClipX();
        int oY = g.getClipY();
        int oWidth = g.getClipWidth();
        int oHeight = g.getClipHeight();
        Font f = ta.getStyle().getFont();
        int fontHeight = f.getHeight();
        for (int i = 0; i < line; i++) {
            int x = ta.getX() + ta.getStyle().getPadding(Component.LEFT);
            int y = ta.getY() + ta.getStyle().getPadding(Component.TOP) +
                    (ta.getRowsGap() + fontHeight) * i;
            if(Rectangle.intersects(x, y, ta.getWidth(), fontHeight, oX, oY, oWidth, oHeight)) {
                String rowText = (String) ta.getTextAt(i);
                //display ******** if it is a password field
                String displayText = "";
                if ((ta.getConstraint() & TextArea.PASSWORD) != 0) {
                    for (int j = 0; j < rowText.length(); j++) {
                        displayText += "*";
                    }
                } else {
                    displayText = rowText;
                }

            
                g.drawString(displayText, x, y);
            }
        }
    }

    /**
     * @inheritDoc
     */
    public Dimension getButtonPreferredSize(Button b) {
        return getPreferredSize(b, new Image[]{b.getIcon(), b.getRolloverIcon(), b.getPressedIcon()}, null);
    }

    /**
     * @inheritDoc
     */
    public Dimension getCheckBoxPreferredSize(CheckBox cb) {
        if (chkBoxImages != null) {
            return getPreferredSize(cb, new Image[]{cb.getIcon(), cb.getRolloverIcon(), cb.getPressedIcon()}, chkBoxImages[0]);
        }
        Dimension d = getPreferredSize(cb, new Image[]{cb.getIcon(), cb.getRolloverIcon(), cb.getPressedIcon()}, null);
        d.setWidth(d.getWidth() + cb.getStyle().getFont().getHeight());
        return d;
    }

    /**
     * @inheritDoc
     */
    public Dimension getLabelPreferredSize(Label l) {
        return getPreferredSize(l, new Image[]{l.getIcon()}, null);
    }

    /**
     * @inheritDoc
     */
    private Dimension getPreferredSize(Label l, Image[] icons, Image stateImage) {
        int prefW = 0;
        int prefH = 0;

        Style style = l.getStyle();
        int gap = l.getGap();
        for (int i = 0; i < icons.length; i++) {
            Image icon = icons[i];
            if (icon != null) {
                prefW = Math.max(prefW, icon.getWidth());
                prefH = Math.max(prefH, icon.getHeight());
            }
        }
        String text = l.getText();
        Font font = style.getFont();
        if (font == null) {
            System.out.println("Missing font for " + l);
            font = Font.getDefaultFont();
        }
        if (text != null && text.length() > 0) {
            //add the text size
            switch (l.getTextPosition()) {
                case Label.LEFT:
                case Label.RIGHT:
                    prefW += font.stringWidth(text);
                    prefH = Math.max(prefH, font.getHeight());
                    break;
                case Label.BOTTOM:
                case Label.TOP:
                    prefW = Math.max(prefW, font.stringWidth(text));
                    prefH += font.getHeight();
                    break;
            }
        }
        //add the state image(relevant for CheckBox\RadioButton)
        if (stateImage != null) {
            prefW += (stateImage.getWidth() + gap);
            prefH = Math.max(prefH, stateImage.getHeight());
        }


        if (icons[0] != null && text != null && text.length() > 0) {
            switch (l.getTextPosition()) {
                case Label.LEFT:
                case Label.RIGHT:
                    prefW += gap;
                    break;
                case Label.BOTTOM:
                case Label.TOP:
                    prefH += gap;
                    break;
            }
        }

        if (prefH != 0) {
            prefH += (style.getPadding(Component.TOP) + style.getPadding(Component.BOTTOM));
        }
        if (prefW != 0) {
            prefW += (style.getPadding(Component.RIGHT) + style.getPadding(Component.LEFT));
        }
        return new Dimension(prefW, prefH);
    }

    /**
     * @inheritDoc
     */
    public Dimension getListPreferredSize(List l) {
        int width = 0;
        int height = 0;
        int selectedHeight;
        int selectedWidth;
        ListModel model = l.getModel();
        int numOfcomponents = model.getSize();
        Object prototype = l.getRenderingPrototype();
        if(prototype != null) {
            ListCellRenderer renderer = l.getRenderer();
            Component cmp = renderer.getListCellRendererComponent(l, prototype, 0, false);
            height = cmp.getPreferredH();
            width = cmp.getPreferredW();
            cmp = renderer.getListCellRendererComponent(l, prototype, 0, true);

            selectedHeight = Math.max(height, cmp.getPreferredH());
            selectedWidth = Math.max(width, cmp.getPreferredW());
        } else {
            int hightCalcComponents = Math.min(5, numOfcomponents);
            ListCellRenderer renderer = l.getRenderer();
            for (int i = 0; i < hightCalcComponents; i++) {
                Object value = model.getItemAt(i);
                Component cmp = renderer.getListCellRendererComponent(l, value, i, false);

                height = Math.max(height, cmp.getPreferredH());
                width = Math.max(width, cmp.getPreferredW());
            }
            selectedHeight = height;
            selectedWidth = width;
            if (numOfcomponents > 0) {
                Object value = model.getItemAt(0);
                Component cmp = renderer.getListCellRendererComponent(l, value, 0, true);

                selectedHeight = Math.max(height, cmp.getPreferredH());
                selectedWidth = Math.max(width, cmp.getPreferredW());
            }
        }
        int verticalPadding = l.getStyle().getPadding(Component.TOP) + l.getStyle().getPadding(Component.BOTTOM);
        int horizontalPadding = l.getStyle().getPadding(Component.RIGHT) + l.getStyle().getPadding(Component.LEFT);

        if (numOfcomponents == 0) {
            return new Dimension(horizontalPadding, verticalPadding);
        }

        if (l.getOrientation() == List.VERTICAL) {
            return new Dimension(selectedWidth + horizontalPadding, selectedHeight + (height + l.getItemGap()) * (numOfcomponents - 1) + verticalPadding);
        } else {
            return new Dimension(selectedWidth + (width + l.getItemGap()) * (numOfcomponents - 1) + horizontalPadding, selectedHeight + verticalPadding);
        }
    }

    /**
     * @inheritDoc
     */
    public Dimension getMonthViewPreferredSize(Component mv) {
        Font f = mv.getStyle().getFont();
        int fh = f.getHeight();
        int dayWidth = f.stringWidth("22");

        int w = (dayWidth + DAY_SPACE_W) * 7;
        int h = (fh + DAY_SPACE_H) * 5;

        return new Dimension(w + mv.getStyle().getPadding(Component.RIGHT) + mv.getStyle().getPadding(Component.LEFT), h + mv.getStyle().getPadding(Component.TOP) + mv.getStyle().getPadding(Component.BOTTOM));
    }

    /**
     * @inheritDoc
     */
    public Dimension getRadioButtonPreferredSize(RadioButton rb) {
        if (rButtonImages != null) {
            return getPreferredSize(rb, new Image[]{rb.getIcon(), rb.getRolloverIcon(), rb.getPressedIcon()}, rButtonImages[0]);
        }
        Dimension d = getPreferredSize(rb, new Image[]{rb.getIcon(), rb.getRolloverIcon(), rb.getPressedIcon()}, null);
        d.setWidth(d.getWidth() + rb.getStyle().getFont().getHeight());
        return d;
    }

    /*public Dimension getSpinnerPreferredSize(Spinner sp) {
    return null;
    }*/
    /**
     * @inheritDoc
     */
    public Dimension getTextAreaPreferredSize(TextArea ta) {
        int prefW = 0;
        int prefH = 0;
        Font f = ta.getStyle().getFont();

        //if this is a text field the preferred size should be the text width
        if (ta.getRows() == 1) {
            prefW = f.stringWidth(ta.getText());
        } else {
            prefW = f.stringWidth("W") * ta.getColumns();
        }
        int rows = ta.getRows();
        prefH = (f.getHeight() + 2) * rows;
        int columns = ta.getColumns();
        String str = "";
        for (int iter = 0; iter < columns; iter++) {
            str += 'W';
        }
        prefW = Math.max(prefW, f.stringWidth(str));
        prefH = Math.max(prefH, rows * f.getHeight());

        return new Dimension(prefW + ta.getStyle().getPadding(Component.RIGHT) + ta.getStyle().getPadding(Component.LEFT), prefH + ta.getStyle().getPadding(Component.TOP) + ta.getStyle().getPadding(Component.BOTTOM));
    }

    private void drawComponent(Graphics g, Label l, Image icon, Image stateIcon, int preserveSpaceForState) {
        setFG(g, l);

        int gap = l.getGap();
        int stateIconSize = 0;
        int stateIconYPosition = 0;
        String text = l.getText();
        Style style = l.getStyle();
        Font font = style.getFont();
        int fontHeight = 0;
        if (text == null) {
            text = "";
        }
        if(text.length() > 0){
            fontHeight = font.getHeight();
        }
        
        if (stateIcon != null) {
            stateIconSize = stateIcon.getWidth(); //square image width == height
            stateIconYPosition = l.getY() + l.getStyle().getPadding(Component.TOP) + (l.getHeight() - l.getStyle().getPadding(Component.TOP) - l.getStyle().getPadding(Component.BOTTOM)) / 2 - stateIconSize / 2;
            preserveSpaceForState = stateIconSize + gap;
            g.drawImage(stateIcon, l.getX() + l.getStyle().getPadding(Component.LEFT), stateIconYPosition);
        }

        //default for bottom left alignment
        int x = l.getX() + l.getStyle().getPadding(Component.LEFT) + preserveSpaceForState;
        int y = l.getY() + l.getStyle().getPadding(Component.TOP);

        //set initial x,y position according to the alignment and textPosition
        if (l.getAlignment() == Component.LEFT) {
            switch (l.getTextPosition()) {
                case Label.LEFT:
                case Label.RIGHT:
                    y = y + (l.getHeight() - (l.getStyle().getPadding(Component.TOP) + l.getStyle().getPadding(Component.BOTTOM) + Math.max(((icon != null) ? icon.getHeight() : 0), l.getStyle().getFont().getHeight()))) / 2;
                    break;
                case Label.BOTTOM:
                case Label.TOP:
                    y = y + (l.getHeight() - (l.getStyle().getPadding(Component.TOP) + l.getStyle().getPadding(Component.BOTTOM) + ((icon != null) ? icon.getHeight() + gap : 0) + l.getStyle().getFont().getHeight())) / 2;
                    break;
            }
        } else if (l.getAlignment() == Component.CENTER) {
            switch (l.getTextPosition()) {
                case Label.LEFT:
                case Label.RIGHT:
                    x = x + (l.getWidth() - (preserveSpaceForState +
                            style.getPadding(Component.LEFT) +
                            style.getPadding(Component.RIGHT) +
                            ((icon != null) ? icon.getWidth() : 0) +
                            font.stringWidth(text))) / 2;
                    x = Math.max(x, l.getX() + style.getPadding(Component.LEFT) + preserveSpaceForState);
                    y = y + (l.getHeight() - (style.getPadding(Component.TOP) +
                            style.getPadding(Component.BOTTOM) +
                            Math.max(((icon != null) ? icon.getHeight() : 0),
                            fontHeight))) / 2;
                    break;
                case Label.BOTTOM:
                case Label.TOP:
                    x = x + (l.getWidth() - (preserveSpaceForState + style.getPadding(Component.LEFT) +
                            style.getPadding(Component.RIGHT) +
                            Math.max(((icon != null) ? icon.getWidth() : 0),
                            font.stringWidth(text)))) / 2;
                    x = Math.max(x, l.getX() + style.getPadding(Component.LEFT) + preserveSpaceForState);
                    y = y + (l.getHeight() - (style.getPadding(Component.TOP) +
                            style.getPadding(Component.BOTTOM) +
                            ((icon != null) ? icon.getHeight() + gap : 0) +
                            fontHeight)) / 2;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?