📄 row.java
字号:
package com.ismyway.fairyui;
import javax.microedition.lcdui.Graphics;
import com.ismyway.anyview.others.Settings;
import com.ismyway.util.ArrayList;
import com.ismyway.util.Theme;
/**
* ROW中只能包含DisplayableBlock元素,添加规则如下:
* 每个DisplayableBlock与左/右边距及其它DisplayableBlock的间距由ROW来控制
* 即使DisplayableBlock没有处理边距,也保证DisplayableBlock不会太挤
* 对于DisplayableBlock来说,自己可以适当处理边距,但并不强求
* @author leftmoon
*
*/
public class Row extends Component {
protected int filledColor = Theme.Background;
public Row() {
}
public void add(DisplayableBlock dis) {
dis.setParent(this);
components.add(dis);
}
public boolean keyReleased(int key) {
return false;
}
public boolean keyRepeated(int key) {
return false;
}
public void paint(Graphics g, int adjustx, int adjusty) {
g.setColor(filledColor);
g.fillRect(getInnerLeft() - adjustx, getInnerTop() - adjusty, getWidth(), getHeight());
//int start = findSuitableRow(getTop() + adjusty);
// if (start != 0) {
// System.out.println("start = " + start);
// }
for (int i = 0; i < components.size(); i++) {
DisplayableBlock c = (DisplayableBlock) components.get(i);
if (c.getTop() + c.getHeight() < getContentPanel().getTop() + adjusty) {
continue;
}
if (c.getTop() > getContentPanel().getTop() + getContentPanel().getHeight() + adjusty) {
break;
}
// System.out.println("[" + i + "]" + c.getClass().getName() + " paint................");
// if (c.getTop() - adjusty > panelHeight) {
// //System.out.println("row返回:" + i);
// return;
// }
c.paint(g, adjustx, adjusty);
}
if (border) {
g.setColor(Theme.TextColor);
g.setStrokeStyle(borderStyle);
g.drawRect(getInnerLeft() - adjustx, getInnerTop() - adjusty, getWidth(), getHeight());
}
}
// public int findSuitableRow(int height) { //二分法查找
// int index = 0; //相当于指针的东西
// int iStart = 0; //
// int iEnd = components.size() - 1;
// while (true) {
// index = (iStart + iEnd) / 2;
// Component row = (Component) components.elementAt(index);
// if (row.getTop() + row.getHeight() < height) {
// iStart = index;
// } else if (row.getTop() > height + container.viewportHeight) {
// iEnd = index;
// } else {
// break;
// }
// }
// return index;
// }
public boolean pointerEvent(int x, int y) {
return false;
}
/**
*XXX 所有的row都不需要也不允许自己设置宽,由panel来指定row的宽度
*/
public void validate() {
//int left = Settings.VECPADDING;
int width = getWidth() - Settings.VECPADDING * 2;
int bottom = 0;
int[] rect = { Settings.VECPADDING, 0, getWidth() - Settings.VECPADDING * 2, 1 };
int maxBottom = 0;
for (int i = 0; i < components.size(); i++) {
DisplayableBlock c = (DisplayableBlock) components.get(i);
c.putInSequence(rect, width);
bottom = rect[1] + rect[3];
if (maxBottom < bottom) {
maxBottom = bottom;
}
rect[0] += Settings.VECPADDING;
rect[2] -= Settings.VECPADDING;
// System.out.println("rect[0] = " + rect[0] + ", rect[1] = " + rect[1] + ", rect[2] = "
// + rect[2] + ", rect[3] = " + rect[3]);
// if (debug) {
// System.out.println("[" + i + "]" + c.getTop() + "................");
// }
}
setHeight(maxBottom);
}
public boolean isTraversable() {
for (int i = 0; i < components.size(); i++) {
DisplayableBlock c = (DisplayableBlock) components.get(i);
if (c.isTraversable()) {
return true;
}
}
return false;
}
public void resetPointer(ArrayList hotpots) {
for (int i = 0; i < components.size(); i++) {
DisplayableBlock c = (DisplayableBlock) components.get(i);
if (c.isTraversable()) {
hotpots.add(c);
}
}
}
public int getFilledColor() {
return filledColor;
}
public void setFilledColor(int filledColor) {
this.filledColor = filledColor;
}
public boolean isAnimated(int viewportHeight, int panelHeight) {
for (int i = 0; i < components.size(); i++) {
DisplayableBlock disp = (DisplayableBlock) components.get(i);
if (disp.getTop() + disp.getHeight() < viewportHeight) {
continue;
}
if (disp.getTop() > viewportHeight + panelHeight) {
break;
}
if (disp.isAnimated()) {
return true;
}
}
return false;
}
public boolean clock(int viewportHeight, int panelHeight) {
boolean repaint = false;
for (int i = 0; i < components.size(); i++) {
DisplayableBlock disp = (DisplayableBlock) components.get(i);
if (disp.getTop() + disp.getHeight() < viewportHeight) {
continue;
}
if (disp.getTop() > viewportHeight + panelHeight) {
break;
}
repaint |= disp.clock();
}
return repaint;
}
public void clear() {
synchronized (components) {
components.clear();
}
}
public boolean isPointerIn(int x, int y) {
return false;
}
public boolean pointerDragged(int x, int y) {
return false;
}
public boolean pointerReleased(int x, int y) {
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -