From e12025cf6c8beb15a9b4a0d55eb4567e04c38a5b Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 10 Jan 2019 17:08:48 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-14057=2010.0=E6=97=A5=E6=96=87=E5=9B=BD?= =?UTF-8?q?=E9=99=85=E5=8C=96=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86=3D>25=20?= =?UTF-8?q?tab=E6=A0=87=E9=A2=98=E6=98=BE=E7=A4=BA=E4=B8=8D=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/gui/ibutton/UIButton.java | 65 ++++++++++++++++--- .../fr/design/gui/ibutton/UIHeadGroup.java | 17 +++-- 2 files changed, 69 insertions(+), 13 deletions(-) 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 2af8c8f91..d70f06ea6 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 c1f5ed24e..c9771b766 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); }