diff --git a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIButton.java b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIButton.java
index 2af8c8f918..d70f06ea6e 100644
--- a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIButton.java
+++ b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIButton.java
@@ -6,22 +6,35 @@ import com.fr.base.GraphHelper;
import com.fr.design.constants.UIConstants;
import com.fr.design.event.UIObserver;
import com.fr.design.event.UIObserverListener;
+import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.stable.Constants;
import com.fr.stable.StringUtils;
-import com.fr.design.utils.gui.GUICoreUtils;
-import javax.swing.*;
+import javax.swing.Action;
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.ToolTipManager;
import javax.swing.plaf.ButtonUI;
-import java.awt.*;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Insets;
+import java.awt.Shape;
+import java.awt.Stroke;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.RoundRectangle2D;
public class UIButton extends JButton implements UIObserver {
+ private static final int TOOLTIP_INIT_DELAY = 300; // 延迟 0.3s 显示提示文字
public static final int OTHER_BORDER = 1;
public static final int NORMAL_BORDER = 2;
- private static final int HEIGH = 20;
+ private static final int HEIGHT = 20;
+
private boolean isExtraPainted = true;
private boolean isRoundBorder = true;
private int rectDirection = Constants.NULL;
@@ -36,7 +49,7 @@ public class UIButton extends JButton implements UIObserver {
private CellBorderStyle border = null;
protected UIObserverListener uiObserverListener;
- private static final int TOOLTIP_INIT_DELAY = 300; // 延迟 0.3s 显示提示文字
+ private boolean fixedHeight = true; // 是否将按钮的高度固定为 HEIGHT
public UIButton() {
this(StringUtils.EMPTY);
@@ -112,7 +125,7 @@ public class UIButton extends JButton implements UIObserver {
public void set4ToolbarButton() {
setNormalPainted(false);
Dimension dim = getPreferredSize();
- dim.height = HEIGH;
+ dim.height = HEIGHT;
setBackground(null);
setOpaque(false);
setSize(dim);
@@ -170,7 +183,11 @@ public class UIButton extends JButton implements UIObserver {
//@Override
public Dimension getPreferredSize() {
- return new Dimension(super.getPreferredSize().width, 20);
+ Dimension dim = super.getPreferredSize();
+ if (isFixedHeight() || dim.height < HEIGHT) {
+ dim.height = HEIGHT;
+ }
+ return dim;
}
@@ -323,7 +340,39 @@ public class UIButton extends JButton implements UIObserver {
this.isBorderPaintedOnlyWhenPressed = value;
}
- /**
+ /**
+ * 到达指定宽度后换行
+ */
+ public void setLineWrap(int width) {
+ insertPrefixToText("
");
+ }
+
+ /**
+ * 自动换行
+ */
+ public void setLineWrap() {
+ insertPrefixToText("");
+ }
+
+ private void insertPrefixToText(String prefix) {
+ String text = this.getText();
+ if (StringUtils.isEmpty(text)) {
+ return;
+ }
+ this.setText(prefix + text);
+ // 如果文本过长,且允许换行的话,需要放开按钮高度的限制
+ this.setFixedHeight(false);
+ }
+
+ private boolean isFixedHeight() {
+ return fixedHeight;
+ }
+
+ private void setFixedHeight(boolean fixedHeight) {
+ this.fixedHeight = fixedHeight;
+ }
+
+ /**
* 主函数
* @param args 入口参数
*/
diff --git a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIHeadGroup.java b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIHeadGroup.java
index c1f5ed24e5..c9771b766e 100644
--- a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIHeadGroup.java
+++ b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIHeadGroup.java
@@ -4,8 +4,13 @@ import com.fr.base.BaseUtils;
import com.fr.design.constants.UIConstants;
import com.fr.design.utils.gui.GUICoreUtils;
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.Icon;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
@@ -13,6 +18,7 @@ import java.util.ArrayList;
import java.util.List;
public class UIHeadGroup extends JPanel {
+ private static final int MIN_HEIGHT = 25;
protected List labelButtonList;
private boolean isNeedLeftRightOutLine = true;
protected int selectedIndex = -1;
@@ -25,7 +31,6 @@ public class UIHeadGroup extends JPanel {
labelButtonList = new ArrayList(textArray.length);
this.setBackground(UIConstants.TREE_BACKGROUND);
this.setLayout(new GridLayout(0, textArray.length, 0, 0));
-// this.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
for (int i = 0; i < textArray.length; i++) {
final int index = i;
String text = textArray[i];
@@ -50,7 +55,6 @@ public class UIHeadGroup extends JPanel {
labelButtonList = new ArrayList(iconArray.length);
this.setBackground(UIConstants.NORMAL_BACKGROUND);
this.setLayout(new GridLayout(0, iconArray.length, 1, 0));
-// this.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
for (int i = 0; i < iconArray.length; i++) {
final int index = i;
Icon icon = iconArray[i];
@@ -99,7 +103,9 @@ public class UIHeadGroup extends JPanel {
@Override
public Dimension getPreferredSize() {
Dimension dim = super.getPreferredSize();
- dim.height = 25;
+ if (dim.height < MIN_HEIGHT) {
+ dim.height = MIN_HEIGHT;
+ }
return dim;
}
@@ -133,6 +139,7 @@ public class UIHeadGroup extends JPanel {
labelButton.setRoundBorder(false);
labelButton.setBorderPainted(false);
labelButton.setPressedPainted(false);
+ labelButton.setLineWrap();
labelButtonList.add(labelButton);
this.add(labelButton);
}
diff --git a/designer-realize/src/main/java/com/fr/design/report/WriteShortCutsPane.java b/designer-realize/src/main/java/com/fr/design/report/WriteShortCutsPane.java
index d9b9741d63..fa1948e9da 100644
--- a/designer-realize/src/main/java/com/fr/design/report/WriteShortCutsPane.java
+++ b/designer-realize/src/main/java/com/fr/design/report/WriteShortCutsPane.java
@@ -8,14 +8,23 @@ import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.general.ComparatorUtils;
-
-import javax.swing.*;
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+import javax.swing.SwingConstants;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.GridLayout;
+import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class WriteShortCutsPane extends JPanel{
-
+ private static final int V_GAP = 20;
+ private static final int MAX_LABEL_WIDTH = 100;
+
private String nextColString = "Tab";
private String nextRowString = "Enter";
private UILabel nextColHK;
@@ -24,9 +33,8 @@ public class WriteShortCutsPane extends JPanel{
private UILabel preRow;
public WriteShortCutsPane(){
- this.setLayout(null);
- this.add(getFeatureNamePane());
- this.add(getHintsPane());
+ this.setLayout(new BorderLayout());
+ this.add(createContentPane(), BorderLayout.NORTH);
if(!ServerPreferenceConfig.getInstance().isWriteShortCuts()){
nextColString = "Enter";
@@ -34,64 +42,91 @@ public class WriteShortCutsPane extends JPanel{
switchColRow();
}
}
+
+ private JPanel createContentPane() {
+ JPanel contentPane = new JPanel();
+ contentPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10));
+
+ // 纵向布局,横向自适应
+ contentPane.setLayout(new GridBagLayout());
+ GridBagConstraints cons = new GridBagConstraints();
+ cons.fill = GridBagConstraints.HORIZONTAL;
+ cons.weightx = 1;
+ cons.gridx = 0;
+ cons.insets = new Insets(20, 0, 0, 0);
+
+ contentPane.add(getFeatureNamePane(), cons);
+ contentPane.add(getHintsPane(), cons);
+
+ return contentPane;
+ }
- //todo:布局不要用绝对定位
- public JPanel getFeatureNamePane(){
- JPanel panel1 = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
- panel1.setBounds(20, 20, 600, 140);
- panel1.setLayout(null);
- panel1.setBorder(BorderFactory.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Shortcut_Set")));
+ private JPanel getFeatureNamePane(){
+ JPanel featureNamePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Shortcut_Set"));
+ featureNamePane.setLayout(new BorderLayout());
+
UILabel name = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Feature_Name"), SwingConstants.CENTER);
- name.setBounds(40, 30, 80, 50);
UILabel nextCol = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cursor_To_Next_Column"), SwingConstants.CENTER);
- nextCol.setBounds(140, 30, 180, 50);
UILabel nextRow = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cursor_To_Next_Row"), SwingConstants.CENTER);
- nextRow.setBounds(390, 30, 180, 50);
UILabel shortName = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Current_Keys"), SwingConstants.CENTER);
- shortName.setBounds(40, 80, 80, 50);
+ shortName.setLineWrap(MAX_LABEL_WIDTH);
nextColHK = new UILabel(nextColString, SwingConstants.CENTER);
- nextColHK.setBounds(140, 80, 180, 50);
- UIButton switchbt = new UIButton(BaseUtils.readIcon("com/fr/design/images/buttonicon/switchShortCuts.png"));
- switchbt.addActionListener(getListener());
- switchbt.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Exchange_Key"));
- switchbt.setBounds(337, 90, 36, 29);
+ JPanel switchBtnPane = getSwitchBtnPane();
nextRowHK = new UILabel(nextRowString, SwingConstants.CENTER);
- nextRowHK.setBounds(390, 80, 180, 50);
-
- panel1.add(name);
- panel1.add(nextCol);
- panel1.add(nextRow);
- panel1.add(shortName);
- panel1.add(nextColHK);
- panel1.add(switchbt);
- panel1.add(nextRowHK);
+
+ JPanel centerPane = new JPanel(new GridLayout(2, 4, 0, 0));
+ centerPane.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0));
+ centerPane.add(name);
+ centerPane.add(nextCol);
+ centerPane.add(new JPanel());
+ centerPane.add(nextRow);
+ centerPane.add(shortName);
+ centerPane.add(nextColHK);
+ centerPane.add(switchBtnPane);
+ centerPane.add(nextRowHK);
+
+ featureNamePane.add(centerPane, BorderLayout.CENTER);
- return panel1;
+ return featureNamePane;
}
-
- public JPanel getHintsPane(){
- JPanel panel2 =FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
- panel2.setBounds(20, 170, 600, 150);
- panel2.setLayout(null);
- panel2.setBorder(BorderFactory.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tool_Tips")));
+
+ private JPanel getSwitchBtnPane() {
+ UIButton switchbt = new UIButton(BaseUtils.readIcon("com/fr/design/images/buttonicon/switchShortCuts.png")) {
+ public Dimension getPreferredSize() {
+ return new Dimension(40, 30);
+ }
+ };
+ switchbt.addActionListener(getListener());
+ switchbt.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Exchange_Key"));
+ JPanel switchBtnPane = FRGUIPaneFactory.createCenterFlowInnerContainer_S_Pane();
+ switchBtnPane.add(switchbt);
+ return switchBtnPane;
+ }
+
+ private JPanel getHintsPane(){
+ JPanel hintsPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"));
+ hintsPane.setLayout(new BorderLayout());
+
UILabel systemDefault = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_System_Default"), SwingConstants.CENTER);
- systemDefault.setBounds(38, 30, 84, 50);
UILabel preColText = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cursor_To_Previous_Column"), SwingConstants.CENTER);
- preColText.setBounds(140, 30, 190, 50);
UILabel preRowText = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cursor_To_Previous_Row"), SwingConstants.CENTER);
- preRowText.setBounds(140, 80, 190, 50);
preCol = new UILabel("Shift+" + nextColString, SwingConstants.CENTER);
- preCol.setBounds(370, 30, 100, 50);
preRow = new UILabel("Shift+" + nextRowString, SwingConstants.CENTER);
- preRow.setBounds(370, 80, 100, 50);
-
- panel2.add(systemDefault);
- panel2.add(preColText);
- panel2.add(preRowText);
- panel2.add(preCol);
- panel2.add(preRow);
+
+ JPanel centerPane = new JPanel(new GridLayout(2, 3, 0, V_GAP));
+ centerPane.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 100));
+
+ centerPane.add(systemDefault);
+ centerPane.add(preColText);
+ centerPane.add(preCol);
+
+ centerPane.add(new JPanel());
+ centerPane.add(preRowText);
+ centerPane.add(preRow);
+
+ hintsPane.add(centerPane, BorderLayout.CENTER);
- return panel2;
+ return hintsPane;
}
public ActionListener getListener(){