Browse Source

Merge pull request #1172 in DESIGN/design from ~HADES/design:bugfix/10.0 to bugfix/10.0

* commit '514844ae5f9f767f7ecfb9b83492104c7ec58524':
  update
  REPORT-21486 设计器 取色器 双屏情况下 在交换屏幕位置后 仍有一些二问题 && REPORT-22214 禁止修改控件js事件名
bugfix/10.0
Hades 5 years ago
parent
commit
1da444f150
  1. 96
      designer-base/src/main/java/com/fr/design/style/color/ColorPicker.java
  2. 14
      designer-base/src/main/java/com/fr/design/utils/gui/GUICoreUtils.java
  3. 1
      designer-form/src/main/java/com/fr/design/designer/properties/EventPropertyTable.java

96
designer-base/src/main/java/com/fr/design/style/color/ColorPicker.java

@ -4,7 +4,8 @@ package com.fr.design.style.color;
* Created by plough on 2016/12/22. * Created by plough on 2016/12/22.
*/ */
import com.fr.base.BaseUtils; import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.IOUtils;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import javax.swing.*; import javax.swing.*;
@ -19,8 +20,7 @@ import java.awt.image.BufferedImage;
/** /**
* 取色框 * 取色框
*/ */
public class ColorPicker extends JDialog implements ActionListener public class ColorPicker extends JDialog implements ActionListener {
{
private Container container = getContentPane(); // 主容器 private Container container = getContentPane(); // 主容器
private int setCoordinateX; // 取色框x坐标 private int setCoordinateX; // 取色框x坐标
private int setCoordinateY; // 取色框y坐标 private int setCoordinateY; // 取色框y坐标
@ -42,8 +42,7 @@ public class ColorPicker extends JDialog implements ActionListener
/** /**
* 构造函数创建一个取色框窗体 * 构造函数创建一个取色框窗体
*/ */
public ColorPicker(ColorSelectable colorSelectable, Boolean setColorRealTime) public ColorPicker(ColorSelectable colorSelectable, Boolean setColorRealTime) {
{
setUndecorated(true); // 去掉窗体边缘 setUndecorated(true); // 去掉窗体边缘
setResizable(false); setResizable(false);
Shape shape = new Ellipse2D.Double(0, 0, colorPickerSize, colorPickerSize); Shape shape = new Ellipse2D.Double(0, 0, colorPickerSize, colorPickerSize);
@ -77,7 +76,6 @@ public class ColorPicker extends JDialog implements ActionListener
} }
colorPickerPanel.captureScreen(); colorPickerPanel.captureScreen();
} }
// System.out.println(KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow());
} }
/** /**
@ -94,11 +92,33 @@ public class ColorPicker extends JDialog implements ActionListener
public void updateLocation() { public void updateLocation() {
mousePos = MouseInfo.getPointerInfo().getLocation(); mousePos = MouseInfo.getPointerInfo().getLocation();
setCoordinateX = mousePos.x - getSize().width/2; updateCoordinate();
setCoordinateY = mousePos.y- getSize().height/2; setLocation(setCoordinateX, setCoordinateY);
updateMousePos();
updateCoordinate();
colorPickerPanel.setMagnifierLocation(setCoordinateX, colorPickerPanel.setMagnifierLocation(setCoordinateX,
setCoordinateY); setCoordinateY);
setLocation(setCoordinateX, setCoordinateY);
}
private void updateCoordinate() {
setCoordinateX = mousePos.x - getSize().width / 2;
setCoordinateY = mousePos.y - getSize().height / 2;
}
/**
* 兼容多屏下鼠标位置的计算
*/
private void updateMousePos() {
Rectangle bounds = GUICoreUtils.getRectScreen();
mousePos.x -= bounds.x;
mousePos.y -= bounds.y;
if (mousePos.x < 0) {
mousePos.x *= -1;
}
if (mousePos.y < 0) {
mousePos.y *= -1;
}
} }
/** /**
@ -106,8 +126,7 @@ public class ColorPicker extends JDialog implements ActionListener
* *
* @param colorPickerSize 取色框尺寸 * @param colorPickerSize 取色框尺寸
*/ */
public void updateSize(int colorPickerSize) public void updateSize(int colorPickerSize) {
{
colorPickerPanel.setColorPickerSize(colorPickerSize); colorPickerPanel.setColorPickerSize(colorPickerSize);
setSize(colorPickerSize, colorPickerSize); setSize(colorPickerSize, colorPickerSize);
validate(); // 更新所有子控件 validate(); // 更新所有子控件
@ -124,20 +143,19 @@ public class ColorPicker extends JDialog implements ActionListener
// 隐藏鼠标光标 // 隐藏鼠标光标
public void hideCursor() { public void hideCursor() {
Image imageCursor = Toolkit.getDefaultToolkit().getImage(""); Image imageCursor = Toolkit.getDefaultToolkit().getImage("");
Cursor cu = Toolkit.getDefaultToolkit().createCustomCursor(imageCursor, new Point(0,0), "cursor"); Cursor cu = Toolkit.getDefaultToolkit().createCustomCursor(imageCursor, new Point(0, 0), "cursor");
setCursor(cu); setCursor(cu);
} }
private class MouseFunctions extends MouseAdapter private class MouseFunctions extends MouseAdapter {
{ @Override
public void mousePressed(MouseEvent e) { public void mousePressed(MouseEvent e) {
pickComplete(e.getButton() == e.BUTTON1); // 左键确定 pickComplete(e.getButton() == MouseEvent.BUTTON1); // 左键确定
} }
} }
} }
class ColorPickerPanel extends JPanel class ColorPickerPanel extends JPanel {
{
private BufferedImage screenImage; private BufferedImage screenImage;
private Image colorPickerFrame; // 取色框的边框图案 private Image colorPickerFrame; // 取色框的边框图案
private int colorPickerSize; // 取色框尺寸 private int colorPickerSize; // 取色框尺寸
@ -154,11 +172,11 @@ class ColorPickerPanel extends JPanel
/** /**
* 带参数的构造函数 * 带参数的构造函数
* @param scaleFactor 放大倍数 *
* @param scaleFactor 放大倍数
*/ */
public ColorPickerPanel(int scaleFactor) public ColorPickerPanel(int scaleFactor) {
{ colorPickerFrame = IOUtils.readImage("/com/fr/design/images/gui/colorPicker/colorPickerFrame.png");
colorPickerFrame = BaseUtils.readImage("/com/fr/design/images/gui/colorPicker/colorPickerFrame.png");
this.scaleFactor = scaleFactor; this.scaleFactor = scaleFactor;
captureScreen(); captureScreen();
} }
@ -169,25 +187,20 @@ class ColorPickerPanel extends JPanel
public void captureScreen() { public void captureScreen() {
try { try {
robot = new Robot(); robot = new Robot();
} } catch (AWTException e) {
catch (AWTException e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e); FineLoggerFactory.getLogger().error(e.getMessage(), e);
} }
// 截屏幕 // 截屏幕
Rectangle rectangle = new Rectangle(0, 0, 0, 0); screenImage = robot.createScreenCapture(GUICoreUtils.getRectScreen());
for (GraphicsDevice gd : GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()) {
rectangle = rectangle.union(gd.getDefaultConfiguration().getBounds());
}
screenImage = robot.createScreenCapture(rectangle);
} }
/** /**
* 设置取色框的位置 * 设置取色框的位置
* @param locationX x坐标 *
* @param locationY y坐标 * @param locationX x坐标
* @param locationY y坐标
*/ */
public void setMagnifierLocation(int locationX, int locationY) public void setMagnifierLocation(int locationX, int locationY) {
{
this.locationX = locationX; this.locationX = locationX;
this.locationY = locationY; this.locationY = locationY;
repaint(); // 注意重画控件 repaint(); // 注意重画控件
@ -201,17 +214,16 @@ class ColorPickerPanel extends JPanel
return new Color(R, G, B); return new Color(R, G, B);
} }
public void setColorPickerSize(int colorPickerSize) public void setColorPickerSize(int colorPickerSize) {
{
this.colorPickerSize = colorPickerSize; this.colorPickerSize = colorPickerSize;
} }
public void paintComponent(Graphics g) @Override
{ public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g; Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
double pixelCount = (double)colorPickerSize / scaleFactor; // 取色器一条边上的放大后的像素点个数(可以是小数) double pixelCount = (double) colorPickerSize / scaleFactor; // 取色器一条边上的放大后的像素点个数(可以是小数)
// 关键处理代码 // 关键处理代码
g2d.drawImage( g2d.drawImage(
screenImage, // 要画的图片 screenImage, // 要画的图片
@ -219,10 +231,10 @@ class ColorPickerPanel extends JPanel
0, // 目标矩形的第一个角的y坐标 0, // 目标矩形的第一个角的y坐标
colorPickerSize, // 目标矩形的第二个角的x坐标 colorPickerSize, // 目标矩形的第二个角的x坐标
colorPickerSize, // 目标矩形的第二个角的y坐标 colorPickerSize, // 目标矩形的第二个角的y坐标
locationX + (int)((colorPickerSize - pixelCount) * 0.5) + 1, // 源矩形的第一个角的x坐标 locationX + (int) ((colorPickerSize - pixelCount) * 0.5) + 1, // 源矩形的第一个角的x坐标
locationY + (int)((colorPickerSize - pixelCount) * 0.5) + 1, // 源矩形的第一个角的y坐标 locationY + (int) ((colorPickerSize - pixelCount) * 0.5) + 1, // 源矩形的第一个角的y坐标
locationX + (int)((colorPickerSize + pixelCount) * 0.5) + 1, // 源矩形的第二个角的x坐标 locationX + (int) ((colorPickerSize + pixelCount) * 0.5) + 1, // 源矩形的第二个角的x坐标
locationY + (int)((colorPickerSize + pixelCount) * 0.5) + 1, // 源矩形的第二个角的y坐标 locationY + (int) ((colorPickerSize + pixelCount) * 0.5) + 1, // 源矩形的第二个角的y坐标
this this
); );
g2d.drawImage(colorPickerFrame, 0, 0, this); g2d.drawImage(colorPickerFrame, 0, 0, this);

14
designer-base/src/main/java/com/fr/design/utils/gui/GUICoreUtils.java

@ -78,6 +78,8 @@ import java.awt.event.ItemEvent;
import java.awt.event.ItemListener; import java.awt.event.ItemListener;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver; import java.awt.image.ImageObserver;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@ -962,4 +964,16 @@ public final class GUICoreUtils {
} }
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, 0, 10); return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, 0, 10);
} }
/**
* 获取当前所有显示器设备的总长总宽
* @return
*/
public static Rectangle getRectScreen() {
Rectangle rectangle = new Rectangle(0, 0, 0, 0);
for (GraphicsDevice gd : GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()) {
rectangle = rectangle.union(gd.getDefaultConfiguration().getBounds());
}
return rectangle;
}
} }

1
designer-form/src/main/java/com/fr/design/designer/properties/EventPropertyTable.java

@ -28,6 +28,7 @@ public class EventPropertyTable extends UIListControlPane {
public EventPropertyTable(FormDesigner designer) { public EventPropertyTable(FormDesigner designer) {
super(); super();
this.setNameListEditable(false);
this.designer = designer; this.designer = designer;
} }

Loading…
Cancel
Save