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 + -
显示快捷键?