Browse Source

Merge pull request #606 in BA/design from ~PLOUGH/design:dev to dev

* commit 'af009c3c7866e6b4ecbf8027cd63d167630d996c':
  无JIRA任务。调整代码。
  REPORT-1096 不继承UIButton
  无JIRA任务。调整代码。
  无JIRA任务。整理代码
  REPORT-1096 在“纸张背景”窗口中增加取色器按钮
  REPORT-1096 自定义界面的颜色随鼠标位置动态变化;修改取色框的UI
  REPORT-1096 完成基本功能
  无JIRA任务,给CustomChooserPanel.java 调整缩进
  REPORT-1096 将取色按钮封装为一个类
  REPORT-1096 实现第一个界面(下拉颜色选择框)里的取色器功能
master
superman 8 years ago
parent
commit
20ba29667a
  1. 7
      designer/src/com/fr/design/actions/report/ReportBackgroundAction.java
  2. BIN
      designer_base/src/com/fr/design/images/gui/colorPicker/colorPicker16.png
  3. BIN
      designer_base/src/com/fr/design/images/gui/colorPicker/colorPicker18.png
  4. BIN
      designer_base/src/com/fr/design/images/gui/colorPicker/colorPickerFrame.png
  5. 2
      designer_base/src/com/fr/design/locale/designer.properties
  6. 2
      designer_base/src/com/fr/design/locale/designer_en_US.properties
  7. 3
      designer_base/src/com/fr/design/locale/designer_ja_JP.properties
  8. 4
      designer_base/src/com/fr/design/locale/designer_ko_KR.properties
  9. 2
      designer_base/src/com/fr/design/locale/designer_zh_CN.properties
  10. 2
      designer_base/src/com/fr/design/locale/designer_zh_TW.properties
  11. 202
      designer_base/src/com/fr/design/style/color/ColorPicker.java
  12. 6
      designer_base/src/com/fr/design/style/color/ColorSelectDialog.java
  13. 28
      designer_base/src/com/fr/design/style/color/ColorSelectPane.java
  14. 1904
      designer_base/src/com/fr/design/style/color/CustomChooserPanel.java
  15. 19
      designer_base/src/com/fr/design/style/color/NewColorSelectPane.java
  16. 46
      designer_base/src/com/fr/design/style/color/PickColorButtonFactory.java

7
designer/src/com/fr/design/actions/report/ReportBackgroundAction.java

@ -5,6 +5,7 @@ package com.fr.design.actions.report;
import com.fr.base.BaseUtils;
import com.fr.design.actions.ReportComponentAction;
import com.fr.design.dialog.BasicDialog;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.ReportComponent;
import com.fr.design.menu.KeySetUtils;
@ -36,14 +37,16 @@ public class ReportBackgroundAction extends ReportComponentAction<ReportComponen
}
final ReportBackgroundPane bPane = new ReportBackgroundPane();
bPane.populate(ReportUtils.getReportSettings(reportPane.getTemplateReport()));
bPane.showWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() {
BasicDialog bDialog = bPane.showWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() {
@Override
public void doOk() {
bPane.update(reportPane.getTemplateReport().getReportSettings());
reportPane.fireTargetModified();
}
}).setVisible(true);
});
bDialog.setModal(false);
bDialog.setVisible(true);
return false;
}
}

BIN
designer_base/src/com/fr/design/images/gui/colorPicker/colorPicker16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 B

BIN
designer_base/src/com/fr/design/images/gui/colorPicker/colorPicker18.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 B

BIN
designer_base/src/com/fr/design/images/gui/colorPicker/colorPickerFrame.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

2
designer_base/src/com/fr/design/locale/designer.properties

@ -487,3 +487,5 @@ FR-Designer-LayerPageReport_PageQuery=
FR-Designer-LayerPageReport_Define_PageQuerySQL=
FR-Designer_Event=
FR-Designer_Properties=
FR-Designer_Button_OK=OK
FR-Designer_Button_Cancel=Cancel

2
designer_base/src/com/fr/design/locale/designer_en_US.properties

@ -487,3 +487,5 @@ FR-Designer_Is_Share_DBTableData=Shared data set
FR-Designer_Event=Event
FR-Designer_Properties=Properties
FR-Designer_Properties_Mobile=MobileProperties
FR-Designer_Button_OK=OK
FR-Designer_Button_Cancel=Cancel

3
designer_base/src/com/fr/design/locale/designer_ja_JP.properties

@ -466,3 +466,6 @@ FR-Designer_Is_Share_DBTableData=\u5171\u6709\u30C7\u30FC\u30BF\u30BB\u30C3\u30C
FR-Designer_Event=\
FR-Designer_Properties=FR-Designer_Properties=\
\
FR-Designer_Button_OK=FR-Designer_Button_OK=\u78BA\u5B9A
FR-Designer_Button_Cancel=\u30AD\u30E3\u30F3\u30BB\u30EB
\

4
designer_base/src/com/fr/design/locale/designer_ko_KR.properties

@ -460,4 +460,6 @@ FR-Designer_Is_Share_DBTableData=\uB370\uC774\uD130\uC138\uD2B8\uACF5\uC720
FR-Designer-LayerPageReport_PageQuery=\uD398\uC774\uC9C0\uB098\uB204\uAE30\uCC3E\uC544\uBCF4\uAE30
FR-Designer-LayerPageReport_Define_PageQuerySQL=\uC815\uC758\uD398\uC774\uC9C0\uB098\uB204\uAE30\uCC3E\uC544\uBCF4\uAE30sql
FR-Designer_Event=\
FR-Designer_Properties=\
FR-Designer_Properties=\uFFFD
FR-Designer_Button_OK=\uD655\uC778FR-Designer_Button_Cancel=\uCDE8\uC18C
\

2
designer_base/src/com/fr/design/locale/designer_zh_CN.properties

@ -491,3 +491,5 @@ FR-Designer_Is_Share_DBTableData=\u5171\u4EAB\u6570\u636E\u96C6
FR-Designer_Event=\u4E8B\u4EF6
FR-Designer_Properties=\u5C5E\u6027
FR-Designer_Properties_Mobile=\u624B\u673A\u5C5E\u6027
FR-Designer_Button_OK=\u786E\u5B9A
FR-Designer_Button_Cancel=\u53D6\u6D88

2
designer_base/src/com/fr/design/locale/designer_zh_TW.properties

@ -479,3 +479,5 @@ FR-Designer_Is_Share_DBTableData=\u662F\u5426\u5171\u4EAB\u8CC7\u6599\u96C6
FR-Designer_Properties=\u5C6C\u6027
FR-Designer_Event=\u4E8B\u4EF6
FR-Designer_Properties_Mobile=\u624B\u6A5F\u5C6C\u6027
FR-Designer_Button_OK=\u78BA\u5B9A
FR-Designer_Button_Cancel=\u53D6\u6D88

202
designer_base/src/com/fr/design/style/color/ColorPicker.java

@ -0,0 +1,202 @@
package com.fr.design.style.color;
/**
* Created by plough on 2016/12/22.
*/
import com.fr.base.BaseUtils;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import javax.swing.*;
/**
* 取色框
*/
public class ColorPicker extends JDialog implements ActionListener
{
private Container container = getContentPane(); // 主容器
private int setCoordinateX; // 取色框x坐标
private int setCoordinateY; // 取色框y坐标
private int colorPickerSize = 190; // 取色框尺寸
private int scaleFactor = 16; // 放大倍数
private ColorPickerPanel colorPickerPanel = new ColorPickerPanel(scaleFactor); // 取色框内容面板
private Timer timer; // 用于定时重绘
private int FPS = 45; // 重绘取色器的频率
private int timeCycle = 1000 / FPS; // 时钟周期
private ColorSelectable colorSelectable;
private Point mousePos; // 鼠标的绝对坐标
private Color colorToSet; // 暂存要设置的颜色值
private Boolean setColorRealTime; // 实时设定颜色值
/**
* 构造函数创建一个取色框窗体
*/
public ColorPicker(ColorSelectable colorSelectable, Boolean setColorRealTime)
{
setUndecorated(true); // 去掉窗体边缘
setResizable(false);
Shape shape = new Ellipse2D.Double(0, 0, colorPickerSize, colorPickerSize);
setShape(shape);
container.add(colorPickerPanel);
addMouseListener(new MouseFunctions());
updateSize(colorPickerSize);
this.colorSelectable = colorSelectable;
this.setColorRealTime = setColorRealTime;
this.setAlwaysOnTop(true);
this.setVisible(true);
this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
}
public void start() {
timer = new Timer(timeCycle, this);
timer.start();
hideCursor();
// System.out.println(KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow());
}
/**
* 执行Timer要执行的部分
*/
@Override
public void actionPerformed(ActionEvent e) {
updateLocation();
colorToSet = colorPickerPanel.getPixelColor(mousePos);
if (setColorRealTime && !colorSelectable.getColor().equals(colorToSet)) {
colorSelectable.setColor(colorToSet);
}
}
public void updateLocation() {
mousePos = MouseInfo.getPointerInfo().getLocation();
setCoordinateX = mousePos.x - getSize().width/2;
setCoordinateY = mousePos.y- getSize().height/2;
colorPickerPanel.setMagnifierLocation(setCoordinateX,
setCoordinateY);
setLocation(setCoordinateX, setCoordinateY);
}
/**
* 更新窗体
*
* @param colorPickerSize 取色框尺寸
*/
public void updateSize(int colorPickerSize)
{
colorPickerPanel.setColorPickerSize(colorPickerSize);
setSize(colorPickerSize, colorPickerSize);
validate(); // 更新所有子控件
}
public void pickComplete() {
timer.stop();
colorSelectable.setColor(colorToSet);
this.dispose();
}
// 隐藏鼠标光标
public void hideCursor() {
Image imageCursor = Toolkit.getDefaultToolkit().getImage("");
Cursor cu = Toolkit.getDefaultToolkit().createCustomCursor(imageCursor, new Point(0,0), "cursor");
setCursor(cu);
}
private class MouseFunctions extends MouseAdapter
{
public void mousePressed(MouseEvent e)
{
pickComplete();
}
}
}
class ColorPickerPanel extends JPanel
{
private BufferedImage screenImage;
private Image colorPickerFrame; // 取色框的边框图案
private int colorPickerSize; // 取色框尺寸
private int locationX; // 取色框 x 坐标
private int locationY; // 取色框 y 坐标
private int scaleFactor; // 放大倍数
private Robot robot;
// getPixelColor 常数
private static int SHIFT_STEP = 8; // 比特位右移步长
private static int AND_R = 0xff0000;
private static int AND_G = 0xff00;
private static int AND_B = 0xff;
/**
* 带参数的构造函数
* @param scaleFactor 放大倍数
*/
public ColorPickerPanel(int scaleFactor)
{
try
{
robot = new Robot();
}
catch (AWTException e)
{
}
// 截屏幕
screenImage = robot.createScreenCapture(new Rectangle(0, 0, Toolkit
.getDefaultToolkit().getScreenSize().width, Toolkit
.getDefaultToolkit().getScreenSize().height));
colorPickerFrame = BaseUtils.readImage("/com/fr/design/images/gui/colorPicker/colorPickerFrame.png");
this.scaleFactor = scaleFactor;
}
/**
* 设置取色框的位置
* @param locationX x坐标
* @param locationY y坐标
*/
public void setMagnifierLocation(int locationX, int locationY)
{
this.locationX = locationX;
this.locationY = locationY;
repaint(); // 注意重画控件
}
public Color getPixelColor(Point mousePos) {
int rgb = screenImage.getRGB(mousePos.x, mousePos.y);
int R = (rgb & AND_R) >> SHIFT_STEP * 2;
int G = (rgb & AND_G) >> SHIFT_STEP;
int B = (rgb & AND_B);
return new Color(R, G, B);
}
public void setColorPickerSize(int colorPickerSize)
{
this.colorPickerSize = colorPickerSize;
}
public void paintComponent(Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
double pixelCount = (double)colorPickerSize / scaleFactor; // 取色器一条边上的放大后的像素点个数(可以是小数)
// 关键处理代码
g2d.drawImage(
screenImage, // 要画的图片
0, // 目标矩形的第一个角的x坐标
0, // 目标矩形的第一个角的y坐标
colorPickerSize, // 目标矩形的第二个角的x坐标
colorPickerSize, // 目标矩形的第二个角的y坐标
locationX + (int)((colorPickerSize - pixelCount) * 0.5) + 1, // 源矩形的第一个角的x坐标
locationY + (int)((colorPickerSize - pixelCount) * 0.5) + 1, // 源矩形的第一个角的y坐标
locationX + (int)((colorPickerSize + pixelCount) * 0.5) + 1, // 源矩形的第二个角的x坐标
locationY + (int)((colorPickerSize + pixelCount) * 0.5) + 1, // 源矩形的第二个角的y坐标
this
);
g2d.drawImage(colorPickerFrame, 0, 0, this);
}
}

6
designer_base/src/com/fr/design/style/color/ColorSelectDialog.java

@ -91,8 +91,8 @@ public class ColorSelectDialog extends MiddleChartDialog{
this.add(buttonPane, BorderLayout.SOUTH);
ok = new UIButton(Inter.getLocText("OK"));
cancel = new UIButton(Inter.getLocText("Cancel"));
ok = new UIButton(Inter.getLocText("FR-Designer_Button_OK"));
cancel = new UIButton(Inter.getLocText("FR-Designer_Button_Cancel"));
buttonPane.add(ok);
buttonPane.add(cancel);
@ -137,7 +137,7 @@ public class ColorSelectDialog extends MiddleChartDialog{
public static void showDialog(Frame owner,ColorSelectDetailPane pane,Color initialColor,ColorSelectable selectePane){
ColorTracker okListener = new ColorTracker(pane);
ColorSelectDialog dialog = new ColorSelectDialog(owner,pane,initialColor,okListener,selectePane);
dialog.setModal(true);
// dialog.setModal(true);
dialog.show();
}

28
designer_base/src/com/fr/design/style/color/ColorSelectPane.java

@ -3,10 +3,7 @@
*/
package com.fr.design.style.color;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.GridLayout;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
@ -71,10 +68,8 @@ public class ColorSelectPane extends TransparentPane implements ColorSelectable
// center
JPanel centerPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane();
this.add(centerPane, BorderLayout.CENTER);
// 最近使用
UsedColorPane pane = new UsedColorPane(1, 8, ColorSelectConfigManager.getInstance().getColors(),this);
centerPane.add(pane.getPane());
centerPane.add(getRow1Pane());
JPanel menuColorPane1 = new JPanel();
centerPane.add(menuColorPane1);
@ -104,6 +99,23 @@ public class ColorSelectPane extends TransparentPane implements ColorSelectable
centerPane.add(centerPane1);
}
// 第一行,1个取色按钮 + 7个最近使用的颜色
private JPanel getRow1Pane() {
JPanel row1Pane = new JPanel(FRGUIPaneFactory.createBorderLayout());
row1Pane.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 0));
row1Pane.setPreferredSize(new Dimension(135, 24)); // 宽度为 16 * 8 + 7
// 取色按钮
UIButton pickColorButton = PickColorButtonFactory.getPickColorButton(this, PickColorButtonFactory.IconType.ICON16, true);
row1Pane.add(pickColorButton, BorderLayout.WEST);
// 最近使用
UsedColorPane usedColorPane = new UsedColorPane(1, 7, ColorSelectConfigManager.getInstance().getColors(),this);
usedColorPane.getPane().setBorder(BorderFactory.createEmptyBorder(0, 1, 0, 8));
row1Pane.add(usedColorPane.getPane());
return row1Pane;
}
protected Color[] getColorArray(){
return ColorFactory.MenuColors;
}

1904
designer_base/src/com/fr/design/style/color/CustomChooserPanel.java

File diff suppressed because it is too large Load Diff

19
designer_base/src/com/fr/design/style/color/NewColorSelectPane.java

@ -78,10 +78,21 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
// center
JPanel centerPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane();
this.add(centerPane, BorderLayout.CENTER);
// 第一行,1个取色按钮 + 7个最近使用的颜色
JPanel row1Pane = new JPanel(FRGUIPaneFactory.createBorderLayout());
row1Pane.setBorder(BorderFactory.createEmptyBorder(8, 8, 0, 0));
row1Pane.setPreferredSize(new Dimension(135, 16)); // 宽度为 16 * 8 + 7
centerPane.add(row1Pane);
// 取色按钮
UIButton pickColorButton = PickColorButtonFactory.getPickColorButton(this, PickColorButtonFactory.IconType.ICON16);
row1Pane.add(pickColorButton, BorderLayout.WEST);
// 最近使用
usedColorPane = new UsedColorPane(1, 8, ColorSelectConfigManager.getInstance().getColors(),this);
centerPane.add(usedColorPane.getPane());
usedColorPane = new UsedColorPane(1, 7, ColorSelectConfigManager.getInstance().getColors(),this);
usedColorPane.getPane().setBorder(BorderFactory.createEmptyBorder(0, 1, 0, 8));
row1Pane.add(usedColorPane.getPane());
JPanel menuColorPane1 = new JPanel();
centerPane.add(menuColorPane1);
@ -204,4 +215,6 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable {
usedColorPane.updateUsedColor();
}
}

46
designer_base/src/com/fr/design/style/color/PickColorButtonFactory.java

@ -0,0 +1,46 @@
package com.fr.design.style.color;
import com.fr.base.BaseUtils;
import com.fr.design.gui.ibutton.UIButton;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* Created by plough on 2016/12/22.
*/
public class PickColorButtonFactory {
public static UIButton getPickColorButton(ColorSelectable colorSelectable, IconType iconType) {
return getPickColorButton(colorSelectable, iconType, false);
}
public static UIButton getPickColorButton(final ColorSelectable colorSelectable, IconType iconType, final Boolean setColorRealTime) {
UIButton pickColorButton = new UIButton();
if (iconType == IconType.ICON16) {
pickColorButton.setIcon(BaseUtils.readIcon("/com/fr/design/images/gui/colorPicker/colorPicker16.png"));
pickColorButton.setPreferredSize(new Dimension(16, 16));
} else {
pickColorButton.setIcon(BaseUtils.readIcon("/com/fr/design/images/gui/colorPicker/colorPicker18.png"));
pickColorButton.setPreferredSize(new Dimension(18, 18));
}
pickColorButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
pickColorButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ColorPicker colorPicker = new ColorPicker(colorSelectable, setColorRealTime);
colorPicker.start();
}
});
return pickColorButton;
}
// 取色器按钮使用的图标
public enum IconType {
ICON16, ICON18
}
}
Loading…
Cancel
Save