帆软帮助文档代码合集。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

105 lines
4.0 KiB

// 导出打印单选按钮及复选框
package com.fr.function;
import com.fr.base.AbstractPainter;
import com.fr.base.BaseUtils;
import com.fr.base.GraphHelper;
import com.fr.base.Style;
import com.fr.general.FArray;
import com.fr.general.FRFont;
import com.fr.script.AbstractFunction;
import com.fr.stable.Primitive;
import com.fr.stable.StringUtils;
import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
public class Widget2Image extends AbstractFunction {
public Object run(Object[] args) {
if (args.length < 3)
return Primitive.NULL;
// 第一个参数:控件类型,不区分大小写
String type = args[0].toString().toLowerCase();
if (!("checkbox".equals(type) || "radiobutton".equals(type)))
return Primitive.ERROR_VALUE;
// 第二个参数:控件按钮个数
int num = Integer.parseInt(args[1].toString());
// 第三个参数:按钮组的值,哪些被选中
String selection = args[2].toString();
// 第四个参数:可选参数,按钮组对应的显示值数组
FArray textArray = new FArray();
if (args.length == 4 && args[3] instanceof FArray) {
textArray = (FArray) args[3];
}
return new WidgetPaint(type, num, selection, textArray);
}
public static class WidgetPaint extends AbstractPainter {
public static String CHECK_ON = "/com/fr/web/images/checkon.gif";
public static String CHECK_OFF = "/com/fr/web/images/checkoff.gif";
public static String RADIO_ON = "/com/fr/web/images/radioon.gif";
public static String RADIO_OFF = "/com/fr/web/images/radiooff.gif";
public static FRFont DEFUALT_FONT = FRFont.getInstance();
public static FontMetrics FontMetrics = GraphHelper
.getFontMetrics(DEFUALT_FONT);
private String type;
private int num;
private String selection;
private FArray textArray;
{
DEFUALT_FONT = DEFUALT_FONT.applyForeground(Color.BLACK);
}
public WidgetPaint(String type, int num, String selection,
FArray textArray) {
this.type = type;
this.num = num;
this.selection = selection;
this.textArray = textArray;
}
private String resolveText(int i) {
if (i < this.textArray.length()) {
return this.textArray.elementAt(i).toString();
}
return StringUtils.EMPTY;
}
public void paint(Graphics g, int width, int height, int resolution,
Style style) {
String OFF = CHECK_OFF;
String ON = CHECK_ON;
if ("radiobutton".equals(type)) {
OFF = RADIO_OFF;
ON = RADIO_ON;
}
Image[] checkOFFON = {BaseUtils.readImage(OFF),
BaseUtils.readImage(ON)};
int[] imgWidths = {checkOFFON[0].getWidth(null),
checkOFFON[1].getWidth(null)};
int[] imgHeights = {checkOFFON[0].getHeight(null),
checkOFFON[1].getHeight(null)};
Graphics2D g2d = (Graphics2D) g;
g2d.setFont(FRFont.getInstance());
g2d.setPaint(Color.BLACK);
int x = 2;
int y = (height - imgHeights[0]) / 2;
String select = selection;
for (int i = 0; i < num; i++) {
int bit = Integer.parseInt(select.substring(i, i + 1));
g2d.drawImage(checkOFFON[bit], x, y, imgWidths[bit],
imgHeights[bit], null);
x += imgWidths[bit] + 2;
String text = resolveText(i);
g2d.setBackground(Color.BLACK);
g2d.drawString(text, (float) x, (float) (y + FontMetrics
.getAscent()));
x += FontMetrics.stringWidth(text) + 2;
}
}
}
}