From aa01d30db93b5f15cdd15c9129ad0631057659d3 Mon Sep 17 00:00:00 2001 From: MoMeak Date: Mon, 14 Aug 2017 11:07:08 +0800 Subject: [PATCH 1/5] =?UTF-8?q?REPORT-2897=20=E5=8F=B3=E4=BE=A7=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E9=9D=A2=E6=9D=BF=E4=B8=8A=E7=9A=84=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=88=E5=8F=82=E6=95=B0=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E5=92=8C=E8=B6=85=E7=BA=A7=E9=93=BE=E6=8E=A5=EF=BC=89=EF=BC=8C?= =?UTF-8?q?=E5=8A=A0=E5=85=A5rePaint=E5=8F=82=E6=95=B0=E5=8C=BA=E5=88=86?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=A0=8F=E5=BC=B9=E7=AA=97=E5=92=8C=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E9=9D=A2=E6=9D=BF=E7=9A=84=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actions/insert/flot/ChartFloatAction.java | 2 +- .../insert/flot/FormulaFloatAction.java | 2 +- .../actions/insert/flot/ImageFloatAction.java | 2 +- .../insert/flot/TextBoxFloatAction.java | 2 +- .../fr/design/mainframe/ReportFloatPane.java | 2 +- .../com/fr/design/actions/UpdateAction.java | 12 +- .../com/fr/design/gui/imenu/UIMenuItem.java | 60 +- .../com/fr/design/gui/imenu/UIPopupMenu.java | 69 +- .../src/com/fr/design/menu/MenuDef.java | 733 ++++++++++-------- 9 files changed, 503 insertions(+), 381 deletions(-) diff --git a/designer/src/com/fr/design/actions/insert/flot/ChartFloatAction.java b/designer/src/com/fr/design/actions/insert/flot/ChartFloatAction.java index 8f20a15773..80ce315255 100644 --- a/designer/src/com/fr/design/actions/insert/flot/ChartFloatAction.java +++ b/designer/src/com/fr/design/actions/insert/flot/ChartFloatAction.java @@ -36,7 +36,7 @@ public class ChartFloatAction extends ElementCaseAction { public ChartFloatAction(ElementCasePane t) { super(t); this.setMenuKeySet(FLOAT_INSERT_CHART); - this.setName(getMenuKeySet().getMenuKeySetName() + "..."); + this.setName(getMenuKeySet().getMenuKeySetName()); this.setMnemonic(getMenuKeySet().getMnemonic()); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_insert/chart.png")); } diff --git a/designer/src/com/fr/design/actions/insert/flot/FormulaFloatAction.java b/designer/src/com/fr/design/actions/insert/flot/FormulaFloatAction.java index de7cbe582c..82536e887a 100644 --- a/designer/src/com/fr/design/actions/insert/flot/FormulaFloatAction.java +++ b/designer/src/com/fr/design/actions/insert/flot/FormulaFloatAction.java @@ -27,7 +27,7 @@ public class FormulaFloatAction extends AbstractShapeAction { public FormulaFloatAction(ElementCasePane t) { super(t); this.setMenuKeySet(FLOAT_INSERT_FORMULA); - this.setName(getMenuKeySet().getMenuKeySetName() + "..."); + this.setName(getMenuKeySet().getMenuKeySetName()); this.setMnemonic(getMenuKeySet().getMnemonic()); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_insert/formula.png")); } diff --git a/designer/src/com/fr/design/actions/insert/flot/ImageFloatAction.java b/designer/src/com/fr/design/actions/insert/flot/ImageFloatAction.java index 8814936cde..78b408347f 100644 --- a/designer/src/com/fr/design/actions/insert/flot/ImageFloatAction.java +++ b/designer/src/com/fr/design/actions/insert/flot/ImageFloatAction.java @@ -34,7 +34,7 @@ public class ImageFloatAction extends ElementCaseAction { public ImageFloatAction(ElementCasePane t) { super(t); this.setMenuKeySet(FLOAT_INSERT_IMAGE); - this.setName(getMenuKeySet().getMenuKeySetName() + "..."); + this.setName(getMenuKeySet().getMenuKeySetName()); this.setMnemonic(getMenuKeySet().getMnemonic()); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_insert/image.png")); } diff --git a/designer/src/com/fr/design/actions/insert/flot/TextBoxFloatAction.java b/designer/src/com/fr/design/actions/insert/flot/TextBoxFloatAction.java index 3f0be1c56d..9548db51c3 100644 --- a/designer/src/com/fr/design/actions/insert/flot/TextBoxFloatAction.java +++ b/designer/src/com/fr/design/actions/insert/flot/TextBoxFloatAction.java @@ -26,7 +26,7 @@ public class TextBoxFloatAction extends AbstractShapeAction { public TextBoxFloatAction(ElementCasePane t) { super(t); this.setMenuKeySet(FLOAT_INSERT_TEXT); - this.setName(getMenuKeySet().getMenuKeySetName() + "..."); + this.setName(getMenuKeySet().getMenuKeySetName()); this.setMnemonic(getMenuKeySet().getMnemonic()); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_insert/text.png")); } diff --git a/designer/src/com/fr/design/mainframe/ReportFloatPane.java b/designer/src/com/fr/design/mainframe/ReportFloatPane.java index 227378b715..b7fead91aa 100644 --- a/designer/src/com/fr/design/mainframe/ReportFloatPane.java +++ b/designer/src/com/fr/design/mainframe/ReportFloatPane.java @@ -67,7 +67,7 @@ public class ReportFloatPane extends JPanel { } private MenuDef createInsertToolBar() { - MenuDef insertFloatMenu = new MenuDef(); + MenuDef insertFloatMenu = new MenuDef(true); insertFloatMenu.setName(KeySetUtils.INSERT_FLOAT.getMenuKeySetName()); insertFloatMenu.setTooltip(Inter.getLocText("FR-Designer_T_Insert_Float")); insertFloatMenu.setIconPath("com/fr/design/images/control/addPopup.png"); diff --git a/designer_base/src/com/fr/design/actions/UpdateAction.java b/designer_base/src/com/fr/design/actions/UpdateAction.java index b716da73b1..ecb6c95af7 100644 --- a/designer_base/src/com/fr/design/actions/UpdateAction.java +++ b/designer_base/src/com/fr/design/actions/UpdateAction.java @@ -11,6 +11,7 @@ import com.fr.design.constants.UIConstants; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.imenu.UICheckBoxMenuItem; import com.fr.design.gui.imenu.UIMenuItem; +import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.menu.ShortCut; import com.fr.design.selection.SelectionListener; import com.fr.general.ComparatorUtils; @@ -48,6 +49,11 @@ public abstract class UpdateAction extends ShortCut implements Action { */ private boolean enabled = true; + /** + * Specifies whether action is rePaint; the default is false. + */ + private boolean rePaint = false; + /** * Contains the array of key bindings. * august:关键词key,是Action里面的final常量,如:Action.NAME、Action.SMALL_ICON等等 @@ -249,7 +255,7 @@ public abstract class UpdateAction extends ShortCut implements Action { this.putValue(UIMenuItem.class.getName(), object); } - + ((UIMenuItem) object).setRePaint(this.rePaint); return (UIMenuItem) object; } @@ -317,7 +323,9 @@ public abstract class UpdateAction extends ShortCut implements Action { @Override public void intoJPopupMenu(JPopupMenu menu) { update(); - + if (menu instanceof UIPopupMenu){ + this.rePaint = ((UIPopupMenu) menu).getRePaint(); + } menu.add(this.createMenuItem()); } diff --git a/designer_base/src/com/fr/design/gui/imenu/UIMenuItem.java b/designer_base/src/com/fr/design/gui/imenu/UIMenuItem.java index e5370d3223..3b3064042b 100644 --- a/designer_base/src/com/fr/design/gui/imenu/UIMenuItem.java +++ b/designer_base/src/com/fr/design/gui/imenu/UIMenuItem.java @@ -1,20 +1,22 @@ package com.fr.design.gui.imenu; -import java.awt.*; - -import javax.swing.*; -import javax.swing.plaf.basic.BasicMenuItemUI; - import com.fr.design.constants.UIConstants; +import com.fr.design.utils.gui.GUIPaintUtils; import com.fr.stable.Constants; import com.fr.stable.StringUtils; -import com.fr.design.utils.gui.GUIPaintUtils; import sun.swing.SwingUtilities2; -public class UIMenuItem extends JMenuItem{ - public UIMenuItem() { - this(StringUtils.BLANK); - } +import javax.swing.*; +import javax.swing.plaf.basic.BasicMenuItemUI; +import java.awt.*; + +public class UIMenuItem extends JMenuItem { + + private boolean rePaint = false; + + public UIMenuItem() { + this(StringUtils.BLANK); + } public UIMenuItem(String string) { this(string, null); @@ -37,7 +39,11 @@ public class UIMenuItem extends JMenuItem{ this(); setAction(action); } - + + public void setRePaint(boolean rePaint){ + this.rePaint = rePaint; + } + @Override public String getText() { return StringUtils.BLANK + super.getText(); @@ -47,21 +53,34 @@ public class UIMenuItem extends JMenuItem{ @Override protected void paintBackground(Graphics g, JMenuItem menuItem,Color bgColor) { if(menuItem.getIcon() == null) { - super.paintBackground(g, menuItem, bgColor); - return; + if (!rePaint){ + super.paintBackground(g, menuItem, bgColor); + return; + } + } + if (rePaint){ + menuItem.setIcon(null); } ButtonModel model = menuItem.getModel(); Color oldColor = g.getColor(); int menuWidth = menuItem.getWidth(); int menuHeight = menuItem.getHeight(); - g.setColor(UIConstants.NORMAL_BACKGROUND); g.fillRect(0, 0, menuWidth, menuHeight); - if(menuItem.isOpaque()) { - if (model.isArmed()|| (menuItem instanceof JMenu && model.isSelected())) { - GUIPaintUtils.fillPaint((Graphics2D)g, 30, 0, menuWidth - 30, menuHeight, true, Constants.NULL, UIConstants.FLESH_BLUE, 7); + + if (menuItem.isOpaque()) { + if (!rePaint) { + if (model.isArmed() || (menuItem instanceof JMenu && model.isSelected())) { + GUIPaintUtils.fillPaint((Graphics2D) g, 30, 0, menuWidth - 30, menuHeight, true, Constants.NULL, UIConstants.FLESH_BLUE, 7); + } else { + GUIPaintUtils.fillPaint((Graphics2D) g, 30, 0, menuWidth - 30, menuHeight, true, Constants.NULL, menuItem.getBackground(), 7); + } } else { - GUIPaintUtils.fillPaint((Graphics2D)g, 30, 0, menuWidth - 30, menuHeight, true, Constants.NULL, menuItem.getBackground(), 7); + if (model.isArmed() || (menuItem instanceof JMenu && model.isSelected())) { + GUIPaintUtils.fillPaint((Graphics2D) g, 0, 0, menuWidth, menuHeight, true, Constants.NULL, UIConstants.FLESH_BLUE, 0); + } else { + GUIPaintUtils.fillPaint((Graphics2D) g, 0, 0, menuWidth, menuHeight, true, Constants.NULL, UIConstants.TOOLBARUI_BACKGROUND, 0); + } } g.setColor(oldColor); } @@ -92,6 +111,9 @@ public class UIMenuItem extends JMenuItem{ -1, textRect.x - 1, textRect.y + fm.getAscent() - 1); } + } else if (rePaint) { + SwingUtilities2.drawStringUnderlineCharAt(menuItem, g, text, + -1, 0, textRect.y + fm.getAscent()); } else { // *** paint the text normally if (model.isArmed()|| (menuItem instanceof JMenu && model.isSelected())) { @@ -102,6 +124,6 @@ public class UIMenuItem extends JMenuItem{ } } - } + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java b/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java index 9555689f6e..10a223c52a 100644 --- a/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java +++ b/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java @@ -7,28 +7,49 @@ import javax.swing.JPopupMenu; import com.fr.design.constants.UIConstants; -public class UIPopupMenu extends JPopupMenu{ - private boolean onlyText = false; - public UIPopupMenu() { - super(); - setBackground(UIConstants.NORMAL_BACKGROUND); - } - - @Override - protected void paintBorder(Graphics g) { - g.setColor(UIConstants.LINE_COLOR); - g.drawRect(0, 0, getWidth() - 1, getHeight() - 1); - } - - @Override - public Insets getInsets() { - if(onlyText) { - return super.getInsets(); - } - return new Insets(10, 2, 10, 10); - } - - public void setOnlyText(boolean onlyText) { - this.onlyText = onlyText; - } +public class UIPopupMenu extends JPopupMenu { + private boolean onlyText = false; + private boolean rePaint = false; + + public UIPopupMenu() { + super(); + setBackground(UIConstants.NORMAL_BACKGROUND); + } + + public UIPopupMenu(boolean rePaint) { + super(); + this.rePaint = rePaint; + setBackground(UIConstants.TOOLBARUI_BACKGROUND); + } + + public boolean getRePaint() { + return this.rePaint; + } + + @Override + protected void paintBorder(Graphics g) { + if (rePaint) { + g.setColor(UIConstants.POP_DIALOG_BORDER); + g.drawRect(0, 0, getWidth() - 1, getHeight() - 1); + } else { + g.setColor(UIConstants.LINE_COLOR); + g.drawRect(0, 0, getWidth() - 1, getHeight() - 1); + } + } + + @Override + public Insets getInsets() { + if (onlyText) { + return super.getInsets(); + } + if (rePaint) { + return new Insets(0, 1, 1, 1); + } else { + return new Insets(10, 2, 10, 10); + } + } + + public void setOnlyText(boolean onlyText) { + this.onlyText = onlyText; + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/menu/MenuDef.java b/designer_base/src/com/fr/design/menu/MenuDef.java index 319b94f2e4..385c4461f0 100644 --- a/designer_base/src/com/fr/design/menu/MenuDef.java +++ b/designer_base/src/com/fr/design/menu/MenuDef.java @@ -13,7 +13,10 @@ import javax.swing.*; import javax.swing.event.MenuEvent; import javax.swing.event.MenuListener; import java.awt.*; -import java.awt.event.*; +import java.awt.event.ContainerListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.List; @@ -22,338 +25,406 @@ import java.util.List; */ public class MenuDef extends ShortCut { - protected String name; - protected char mnemonic; - protected String iconPath; - protected String tooltip; - //item List. - private List shortcutList = new ArrayList(); - // peter:产生的JMenu, UIButton以及enabled变量都是为由MenuDef产生的控件所用的 - protected boolean enabled = true; - protected UIMenu createdJMenu; - protected UIButton createdButton; - protected JPopupMenu popupMenu; - private boolean hasScrollSubMenu; - - private String anchor; - - public MenuDef() { - } - - public MenuDef(String name) { - this.setName(name); - } - - public MenuDef(String name, char mnemonic) { - this.setName(name); - this.setMnemonic(mnemonic); - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public char getMnemonic() { - return mnemonic; - } - - public void setMnemonic(char mnemonic) { - this.mnemonic = mnemonic; - } - - public void setHasScrollSubMenu(boolean scrollSubMenu) { - this.hasScrollSubMenu = scrollSubMenu; - } - - public String getIconPath() { - return iconPath; - } - - public void setIconPath(String iconPath) { - this.iconPath = iconPath; - } - - public int getShortCutCount() { - return this.shortcutList.size(); - } - - public ShortCut getShortCut(int index) { - return this.shortcutList.get(index); - } - - public String getAnchor() { - return anchor == null ? StringUtils.EMPTY : anchor; - } - - public void setAnchor(String anchor) { - this.anchor = anchor; - } - - public List getShortcutList() { - return this.shortcutList; - } - - /** - * 插入菜单项 - * @param index 插入的位置 - * @param shortCut 菜单信息 - */ - public void insertShortCut(int index, ShortCut shortCut) { - int size = this.shortcutList.size(); - index = Math.min(index, size); - this.shortcutList.add(index, shortCut); - } - - /** - * 用可变参数,方便添加数组 - * @param shortcut 参数 存储菜单项信息 - */ - public void addShortCut(ShortCut... shortcut) { - for (ShortCut i : shortcut) { - this.shortcutList.add(i); - } - } - + private static final int MENU_DEFAULTWDITH = 156; + protected String name; + //右侧属性表弹出框重绘 + protected Boolean rePaint = false; + protected char mnemonic; + protected String iconPath; + protected String tooltip; + //item List. + private List shortcutList = new ArrayList(); + // peter:产生的JMenu, UIButton以及enabled变量都是为由MenuDef产生的控件所用的 + protected boolean enabled = true; + protected UIMenu createdJMenu; + protected UIButton createdButton; + protected JPopupMenu popupMenu; + private boolean hasScrollSubMenu; + + private String anchor; + + public MenuDef() { + } + + public MenuDef(String name) { + this.setName(name); + } + + public MenuDef(Boolean rePaint) { + this.setRePaint(rePaint); + } + + public MenuDef(String name, char mnemonic) { + this.setName(name); + this.setMnemonic(mnemonic); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean getRePaint() { + return rePaint; + } + + public void setRePaint(boolean rePaint) { + this.rePaint = rePaint; + } + + public char getMnemonic() { + return mnemonic; + } + + public void setMnemonic(char mnemonic) { + this.mnemonic = mnemonic; + } + + public void setHasScrollSubMenu(boolean scrollSubMenu) { + this.hasScrollSubMenu = scrollSubMenu; + } + + public String getIconPath() { + return iconPath; + } + + public void setIconPath(String iconPath) { + this.iconPath = iconPath; + } + + public int getShortCutCount() { + return this.shortcutList.size(); + } + + public ShortCut getShortCut(int index) { + return this.shortcutList.get(index); + } + + public String getAnchor() { + return anchor == null ? StringUtils.EMPTY : anchor; + } + + public void setAnchor(String anchor) { + this.anchor = anchor; + } + + public List getShortcutList() { + return this.shortcutList; + } + + /** + * 插入菜单项 + * + * @param index 插入的位置 + * @param shortCut 菜单信息 + */ + public void insertShortCut(int index, ShortCut shortCut) { + int size = this.shortcutList.size(); + index = Math.min(index, size); + this.shortcutList.add(index, shortCut); + } + + /** + * 用可变参数,方便添加数组 + * + * @param shortcut 参数 存储菜单项信息 + */ + public void addShortCut(ShortCut... shortcut) { + for (ShortCut i : shortcut) { + this.shortcutList.add(i); + } + } + public void removeShortCut(ShortCut shortCut) { - + this.shortcutList.remove(shortCut); } - /** - * 清理 - */ - public void clearShortCuts() { - this.shortcutList.clear(); - } - - /** - * 生成UIButton - * @return 菜单按钮 - */ - public UIButton createUIButton() { - if (createdButton == null) { - if (iconPath != null) { - createdButton = new UIButton(BaseUtils.readIcon(iconPath)); - createdButton.set4ToolbarButton(); - } else { - createdButton = new UIButton(name); - } - // 添加名字以作自动化测试 - createdButton.setName(name); - createdButton.setToolTipText(tooltip); - createdButton.addMouseListener(mouseListener); - } - - return createdButton; - } - - public void setTooltip(String text) { - this.tooltip = text; - } - - /** - * 生成JMenu - * @return 菜单 - */ - public UIMenu createJMenu() { - if (createdJMenu == null) { - if (hasScrollSubMenu) { - createdJMenu = new UIScrollMenu(this.getName()); - } else { - createdJMenu = new UIMenu(this.getName()); - } - createdJMenu.setMnemonic(this.getMnemonic()); - if (this.iconPath != null) { - createdJMenu.setIcon(BaseUtils.readIcon(this.iconPath)); - } - createdJMenu.addMenuListener(menuDefListener); - ContainerListener listener = getContainerListener(); - if(listener != null){ - createdJMenu.getPopupMenu().addContainerListener(listener); - } - } - - return createdJMenu; - } - - protected ContainerListener getContainerListener() { - return null; - } - /** - * 生成 JPopupMenu - * @return 弹出菜单 - */ - public JPopupMenu createJPopupMenu() { - UIMenu menu = createJMenu(); - updateMenu(); - return menu.getPopupMenu(); - } - - /** - * 设置是否可用 - * @param b 布尔型 - */ - @Override - public void setEnabled(boolean b) { - this.enabled = b; - - if (createdButton != null) { - createdButton.setEnabled(enabled); - } - - if (createdJMenu != null) { - createdJMenu.setEnabled(enabled); - } - } - - /** - * 按钮状态 - * @return 状态 - */ - @Override - public boolean isEnabled() { - return enabled; - } - - /** - * 更新菜单 - */ - public void updateMenu() { - //peter:这个方法用来产生JMenu的孩子控件,但是不update,action. - this.updatePopupMenu(this.createJMenu().getPopupMenu()); - - //peter:需要设置JMenu的enabled属性. - if (createdJMenu != null) { - createdJMenu.setEnabled(createdJMenu.getPopupMenu().getComponentCount() > 0 && enabled); - createdJMenu.repaint(10); - } - } - - /** - * 更新菜单 - * @param popupMenu 菜单 - */ - protected void updatePopupMenu(JPopupMenu popupMenu) { - removeComponent(popupMenu); - this.popupMenu = popupMenu; - // 一开始是不能插入分隔符的 - boolean nec_seperator = false; - boolean isFirstItem = true; - int actionCount = this.getShortCutCount(); - for (int i = 0; i < actionCount; i++) { - ShortCut shortcut = this.getShortCut(i); - - // 如果shortcut是SeparatorDef,先不加,先标记一下nec_seperator为true,等下一个shortcut需要加到PopupMenu时再加 - if (shortcut instanceof SeparatorDef) { - nec_seperator = true; - continue; - } - if (nec_seperator) { - if (!isFirstItem) { - SeparatorDef.DEFAULT.intoJPopupMenu(popupMenu); - } - nec_seperator = false; - } - - shortcut.intoJPopupMenu(popupMenu); - isFirstItem = false; - } - - if (createdJMenu != null && createdJMenu.getPopupMenu() != null){ - setEnabled(createdJMenu.getPopupMenu().getComponentCount() > 0 && enabled); - } - } - - /** - * 删除所有组件 除了滚动条 - * @param popupMenu 菜单 - */ - public void removeComponent(JPopupMenu popupMenu){ - UIScrollBar uiScrollBar = new UIScrollBar(); - if(hasScrollSubMenu){ - for(Component comp : popupMenu.getComponents()){ - if(comp instanceof UIScrollBar){ - uiScrollBar =(UIScrollBar) comp; - } - } - } - popupMenu.removeAll(); - if(hasScrollSubMenu){ - popupMenu.add(uiScrollBar); - } - } - - /** - * 添加菜单项 - * @param menu 菜单 - */ - @Override - public void intoJPopupMenu(JPopupMenu menu) { - updateMenu(); - - menu.add(this.createJMenu()); - } - - /** - * 添加 - * @param toolBar 菜单条 - */ - @Override - public void intoJToolBar(JToolBar toolBar) { - toolBar.add(this.createUIButton()); - } - - private MenuListener menuDefListener = new MenuListener() { - - @Override - public void menuCanceled(MenuEvent evt) { - } - - @Override - public void menuDeselected(MenuEvent evt) { - } - - @Override - public void menuSelected(MenuEvent evt) { - Object source = evt.getSource(); - if (!(source instanceof JMenu)) { - return; - } - - MenuDef.this.updateMenu(); - } - }; - private MouseListener mouseListener = new MouseAdapter() { - - @Override - public void mouseReleased(MouseEvent evt) { - Object source = evt.getSource(); - UIButton button = (UIButton) source; - if (!button.isEnabled()) { - return; - } - - UIPopupMenu popupMenu = new UIPopupMenu(); - popupMenu.setInvoker(button); - MenuDef.this.updatePopupMenu(popupMenu); - - GUICoreUtils.showPopupMenu(popupMenu, button, 0, button.getSize().height); - } - }; - - - //ben: for ui test - public JPopupMenu getPopupMenu() { - return popupMenu; - } - - public void setPopupMenu(JPopupMenu popupMenu) { - this.popupMenu = popupMenu; - } - - + /** + * 清理 + */ + public void clearShortCuts() { + this.shortcutList.clear(); + } + + /** + * 生成UIButton + * + * @return 菜单按钮 + */ + public UIButton createUIButton() { + if (createdButton == null) { + if (iconPath != null) { + createdButton = new UIButton(BaseUtils.readIcon(iconPath)); + createdButton.set4ToolbarButton(); + } else { + createdButton = new UIButton(name); + } + // 添加名字以作自动化测试 + createdButton.setName(name); + createdButton.setToolTipText(tooltip); + createdButton.addMouseListener(mouseListener); + } + + return createdButton; + } + + public void setTooltip(String text) { + this.tooltip = text; + } + + /** + * 生成JMenu + * + * @return 菜单 + */ + public UIMenu createJMenu() { + if (createdJMenu == null) { + if (hasScrollSubMenu) { + createdJMenu = new UIScrollMenu(this.getName()); + } else { + createdJMenu = new UIMenu(this.getName()); + } + createdJMenu.setMnemonic(this.getMnemonic()); + if (this.iconPath != null) { + createdJMenu.setIcon(BaseUtils.readIcon(this.iconPath)); + } + createdJMenu.addMenuListener(menuDefListener); + ContainerListener listener = getContainerListener(); + if (listener != null) { + createdJMenu.getPopupMenu().addContainerListener(listener); + } + } + + return createdJMenu; + } + + protected ContainerListener getContainerListener() { + return null; + } + + /** + * 生成 JPopupMenu + * + * @return 弹出菜单 + */ + public JPopupMenu createJPopupMenu() { + UIMenu menu = createJMenu(); + updateMenu(); + return menu.getPopupMenu(); + } + + /** + * 设置是否可用 + * + * @param b 布尔型 + */ + @Override + public void setEnabled(boolean b) { + this.enabled = b; + + if (createdButton != null) { + createdButton.setEnabled(enabled); + } + + if (createdJMenu != null) { + createdJMenu.setEnabled(enabled); + } + } + + /** + * 按钮状态 + * + * @return 状态 + */ + @Override + public boolean isEnabled() { + return enabled; + } + + /** + * 更新菜单 + */ + public void updateMenu() { + //peter:这个方法用来产生JMenu的孩子控件,但是不update,action. + this.updatePopupMenu(this.createJMenu().getPopupMenu()); + + //peter:需要设置JMenu的enabled属性. + if (createdJMenu != null) { + createdJMenu.setEnabled(createdJMenu.getPopupMenu().getComponentCount() > 0 && enabled); + createdJMenu.repaint(10); + } + } + + /** + * 更新菜单 + * + * @param popupMenu 菜单 + */ + protected void updatePopupMenu(JPopupMenu popupMenu) { + removeComponent(popupMenu); + this.popupMenu = popupMenu; + // 一开始是不能插入分隔符的 + boolean nec_seperator = false; + boolean isFirstItem = true; + int actionCount = this.getShortCutCount(); + for (int i = 0; i < actionCount; i++) { + ShortCut shortcut = this.getShortCut(i); + + // 如果shortcut是SeparatorDef,先不加,先标记一下nec_seperator为true,等下一个shortcut需要加到PopupMenu时再加 + if (shortcut instanceof SeparatorDef) { + nec_seperator = true; + continue; + } + if (nec_seperator) { + if (!isFirstItem) { + SeparatorDef.DEFAULT.intoJPopupMenu(popupMenu); + } + nec_seperator = false; + } + + shortcut.intoJPopupMenu(popupMenu); + isFirstItem = false; + } + + if (createdJMenu != null && createdJMenu.getPopupMenu() != null) { + setEnabled(createdJMenu.getPopupMenu().getComponentCount() > 0 && enabled); + } + } + + /** + * 更新右侧属性面板菜单 + * + * @param popupMenu 菜单 + */ + protected void updateEastPopupMenu(JPopupMenu popupMenu) { + removeComponent(popupMenu); + this.popupMenu = popupMenu; + // 一开始是不能插入分隔符的 + boolean nec_seperator = false; + boolean isFirstItem = true; + int actionCount = this.getShortCutCount(); + for (int i = 0; i < actionCount; i++) { + ShortCut shortcut = this.getShortCut(i); + + // 如果shortcut是SeparatorDef,先不加,先标记一下nec_seperator为true,等下一个shortcut需要加到PopupMenu时再加 + if (shortcut instanceof SeparatorDef) { + nec_seperator = true; + continue; + } + if (nec_seperator) { + if (!isFirstItem) { + SeparatorDef.DEFAULT.intoJPopupMenu(popupMenu); + } + nec_seperator = false; + } + shortcut.intoJPopupMenu(popupMenu); + isFirstItem = false; + } + + if (createdJMenu != null && createdJMenu.getPopupMenu() != null) { + setEnabled(createdJMenu.getPopupMenu().getComponentCount() > 0 && enabled); + } + } + + /** + * 删除所有组件 除了滚动条 + * + * @param popupMenu 菜单 + */ + public void removeComponent(JPopupMenu popupMenu) { + UIScrollBar uiScrollBar = new UIScrollBar(); + if (hasScrollSubMenu) { + for (Component comp : popupMenu.getComponents()) { + if (comp instanceof UIScrollBar) { + uiScrollBar = (UIScrollBar) comp; + } + } + } + popupMenu.removeAll(); + if (hasScrollSubMenu) { + popupMenu.add(uiScrollBar); + } + } + + /** + * 添加菜单项 + * + * @param menu 菜单 + */ + @Override + public void intoJPopupMenu(JPopupMenu menu) { + updateMenu(); + + menu.add(this.createJMenu()); + } + + /** + * 添加 + * + * @param toolBar 菜单条 + */ + @Override + public void intoJToolBar(JToolBar toolBar) { + toolBar.add(this.createUIButton()); + } + + private MenuListener menuDefListener = new MenuListener() { + + @Override + public void menuCanceled(MenuEvent evt) { + } + + @Override + public void menuDeselected(MenuEvent evt) { + } + + @Override + public void menuSelected(MenuEvent evt) { + Object source = evt.getSource(); + if (!(source instanceof JMenu)) { + return; + } + + MenuDef.this.updateMenu(); + } + }; + private MouseListener mouseListener = new MouseAdapter() { + + @Override + public void mouseReleased(MouseEvent evt) { + Object source = evt.getSource(); + UIButton button = (UIButton) source; + if (!button.isEnabled()) { + return; + } + if (rePaint) { + popupMenu = new UIPopupMenu(rePaint); + popupMenu.setInvoker(button); + MenuDef.this.updateEastPopupMenu(popupMenu); + popupMenu.setPopupSize(new Dimension(MENU_DEFAULTWDITH, popupMenu.getPreferredSize().height)); + GUICoreUtils.showPopupMenu(popupMenu, button, 0, button.getSize().height); + } else { + popupMenu = new UIPopupMenu(); + popupMenu.setInvoker(button); + MenuDef.this.updatePopupMenu(popupMenu); + GUICoreUtils.showPopupMenu(popupMenu, button, 0, button.getSize().height); + } + } + }; + + + //ben: for ui test + public JPopupMenu getPopupMenu() { + return popupMenu; + } + + public void setPopupMenu(JPopupMenu popupMenu) { + this.popupMenu = popupMenu; + } + + } \ No newline at end of file From 9819612cbe45c0bdcbe9e28baccc997010043151 Mon Sep 17 00:00:00 2001 From: MoMeak Date: Mon, 14 Aug 2017 11:19:29 +0800 Subject: [PATCH 2/5] =?UTF-8?q?REPORT-2897=209.0=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E4=BF=AE=E6=94=B9=20=E6=9B=B4=E6=96=B0=E8=B6=85?= =?UTF-8?q?=E7=BA=A7=E9=82=A3=E8=BE=B9=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/gui/controlpane/UIListControlPane.java | 1 + 1 file changed, 1 insertion(+) diff --git a/designer_base/src/com/fr/design/gui/controlpane/UIListControlPane.java b/designer_base/src/com/fr/design/gui/controlpane/UIListControlPane.java index 25369a550c..986f296517 100644 --- a/designer_base/src/com/fr/design/gui/controlpane/UIListControlPane.java +++ b/designer_base/src/com/fr/design/gui/controlpane/UIListControlPane.java @@ -488,6 +488,7 @@ public abstract class UIListControlPane extends UIControlPane { */ protected class AddItemMenuDef extends MenuDef { public AddItemMenuDef(NameableCreator[] creators) { + super(true); this.setName(Inter.getLocText("FR-Action_Add")); this.setMnemonic('A'); this.setIconPath("/com/fr/design/images/control/addPopup.png"); From 6a3211a813382786283a9a08f1d5b272228f749f Mon Sep 17 00:00:00 2001 From: vito Date: Mon, 14 Aug 2017 14:13:20 +0800 Subject: [PATCH 3/5] =?UTF-8?q?REPORT-3262=20=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E9=80=82=E9=85=8D9.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer/src/com/fr/start/ReportSplashPane.java | 13 ++++--------- .../src/com/fr/design/actions/help/AboutPane.java | 3 --- .../src/com/fr/design/locale/designer.properties | 2 +- .../com/fr/design/locale/designer_en_US.properties | 2 +- .../com/fr/design/locale/designer_ja_JP.properties | 5 ++--- .../com/fr/design/locale/designer_ko_KR.properties | 4 ++-- .../com/fr/design/locale/designer_zh_CN.properties | 4 ++-- .../com/fr/design/locale/designer_zh_TW.properties | 4 ++-- 8 files changed, 14 insertions(+), 23 deletions(-) diff --git a/designer/src/com/fr/start/ReportSplashPane.java b/designer/src/com/fr/start/ReportSplashPane.java index 5f2f3acd2b..6bf8a6a4c1 100644 --- a/designer/src/com/fr/start/ReportSplashPane.java +++ b/designer/src/com/fr/start/ReportSplashPane.java @@ -8,9 +8,11 @@ import com.fr.base.FRContext; import com.fr.base.GraphHelper; import com.fr.design.mainframe.bbs.BBSConstants; import com.fr.general.GeneralContext; -import com.fr.general.Inter; import com.fr.general.ModuleContext; -import com.fr.stable.*; +import com.fr.stable.Constants; +import com.fr.stable.CoreGraphHelper; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; import com.fr.stable.module.ModuleAdapter; import com.fr.stable.module.ModuleListener; @@ -117,13 +119,6 @@ public class ReportSplashPane extends SplashPane{ //加载模块信息 double y = MODULE_INFO_Y + height + leading + ascent; GraphHelper.drawString(splashG2d, showText, MODULE_INFO_X, y); - - //每次随机感谢一位论坛用户 - if (shouldShowThanks()) { - splashG2d.setPaint(THANK_COLOR); - String content = Inter.getLocText("FR-Designer_Thanks-To") + GUEST; - GraphHelper.drawString(splashG2d, content, THANK_INFO_X, y); - } } // 是否显示鸣谢文字 diff --git a/designer_base/src/com/fr/design/actions/help/AboutPane.java b/designer_base/src/com/fr/design/actions/help/AboutPane.java index 1155f4e921..851e869cd0 100644 --- a/designer_base/src/com/fr/design/actions/help/AboutPane.java +++ b/designer_base/src/com/fr/design/actions/help/AboutPane.java @@ -82,9 +82,6 @@ public class AboutPane extends JPanel { contentPane.add(actionLabel); contentPane.add(emailLabel); - if (shouldShowThanks()) { - addThankPane(contentPane); - } } // 是否显示服务电话和 qq diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 79873a5415..9fa3dd3a4f 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -1457,7 +1457,7 @@ Ratio=Ratio DBCP_TEST_ON_BORROW=TestOnBorrow FR-Designer_layerIndex= WEB-Write_Setting=Write Setting -M-New_WorkBook=New WorkBook +M-New_WorkBook=New General Report FR-Designer-Plugin_Has_Been_Actived=Plugin is now active Datasource-Maximum_Number_of_Preview_Rows=Maximum Number of Preview Rows ExpandD-Cell_Expand_Attributes=Attribute to Insert Cell to Display Data diff --git a/designer_base/src/com/fr/design/locale/designer_en_US.properties b/designer_base/src/com/fr/design/locale/designer_en_US.properties index a45c1585bb..1c0224033c 100644 --- a/designer_base/src/com/fr/design/locale/designer_en_US.properties +++ b/designer_base/src/com/fr/design/locale/designer_en_US.properties @@ -1458,7 +1458,7 @@ Ratio=Ratio DBCP_TEST_ON_BORROW=Test before Getting Connections FR-Designer_layerIndex= WEB-Write_Setting=Filling Settings -M-New_WorkBook=New WorkBook +M-New_WorkBook=New General Report FR-Designer-Plugin_Has_Been_Actived=Plugin is now active, restart the designer and sever to enable it and the sever need to be manually restarted Datasource-Maximum_Number_of_Preview_Rows=Maximum Number of Preview Rows ExpandD-Cell_Expand_Attributes=Extension Attributes diff --git a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties index dfbe310f43..f487da3bfd 100644 --- a/designer_base/src/com/fr/design/locale/designer_ja_JP.properties +++ b/designer_base/src/com/fr/design/locale/designer_ja_JP.properties @@ -1357,7 +1357,7 @@ RWA-NotChange_Unmodified=\u306E\u6539\u6B63\u3092\u66F4\u65B0\u3057\u306A\u3044 User_Information=\u30E6\u30FC\u30B6\u30FC\u60C5\u5831 Custom_styles_lost=\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u30B9\u30BF\u30A4\u30EB\u306F\u5931\u308F\u308C\u307E\u3057\u305F PageSetup-Margin=\u4F59\u767D -M-New_FormBook=\u8868\u3092\u65B0\u898F\u4F5C\u6210 +M-New_FormBook=\ Widget-TreeNode=\u30C4\u30EA\u30FC\u30CE\u30FC\u30C9\u30DC\u30BF\u30F3 Form-Url=\u30A2\u30C9\u30EC\u30B9 Utils-Beyond_the_left_side_of_Border=\u5DE6\u30DC\u30FC\u30C0\u30FC\u8D85\u3048 @@ -1458,7 +1458,6 @@ Ratio=\u6BD4\u7387 DBCP_TEST_ON_BORROW=\u63A5\u7D9A\u524D\u691C\u67FB\u3092\u53D6\u5F97 FR-Designer_layerIndex= WEB-Write_Setting=\u5831\u544A\u30DA\u30FC\u30B8\u8A2D\u5B9A -M-New_WorkBook=\u30D6\u30C3\u30AF\u3092\u65B0\u898F\u4F5C\u6210 FR-Designer-Plugin_Has_Been_Actived=\u30D7\u30E9\u30B0\u30A4\u30F3\u306F\u3059\u3067\u306B\u8D77\u52D5\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30C7\u30B6\u30A4\u30CA\u30FC\u3068\u30B5\u30FC Datasource-Maximum_Number_of_Preview_Rows=\u30D7\u30EC\u30D3\u30E5\u30FC\u884C\u6570\u6700\u5927\u5024 ExpandD-Cell_Expand_Attributes=\u62E1\u5F35\u5C5E\u6027 @@ -2122,4 +2121,4 @@ FR-Designer_Coords_And_Size= FR-Designer_Barcode_Size= FS-Designer_DS_Filter_Odd_Tip= FS-Designer_DS_Filter_Even_Tip= -FS-Designer_DS_Filter_Specify_Tip= \ No newline at end of file +FS-Designer_DS_Filter_Specify_Tip= diff --git a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties index a5a2b6c3ec..d412dd714a 100644 --- a/designer_base/src/com/fr/design/locale/designer_ko_KR.properties +++ b/designer_base/src/com/fr/design/locale/designer_ko_KR.properties @@ -1357,7 +1357,7 @@ RWA-NotChange_Unmodified=\uC218\uC815\uD558\uC9C0\uC54A\uC73C\uBA74\uC5C5\uB370\ User_Information=\uC0AC\uC6A9\uC790\uC815\uBCF4 Custom_styles_lost=\uC0AC\uC6A9\uC790\uC815\uC758\uC591\uC2DD\uC774\uC5C6\uC2B5\uB2C8\uB2E4. PageSetup-Margin=\uD398\uC774\uC9C0\uC5EC\uBC31 -M-New_FormBook=\uC0C8\uD3FC +M-New_FormBook= Widget-TreeNode=\uD2B8\uB9AC\uB178\uB4DC\uD0A4 Form-Url=\uC8FC\uC18C Utils-Beyond_the_left_side_of_Border=\uC67C\uCABD\uC5EC\uBC31\uBC97\uC5B4\uB0A8 @@ -1458,7 +1458,7 @@ Ratio=\uBE44\uC728 DBCP_TEST_ON_BORROW=\uB9C1\uD06C\uD68D\uB4DD\uC804\uAC80\uC0AC\uC9C4\uD589 FR-Designer_layerIndex= WEB-Write_Setting=\uC6F9\uD398\uC774\uC9C0\uC124\uC815\uAE30\uC785 -M-New_WorkBook=\uC0C8\uC6CC\uD06C\uBD81 +M-New_WorkBook= FR-Designer-Plugin_Has_Been_Actived=\uD50C\uB7EC\uADF8\uC778\uC774\uAD6C\uB3D9\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\uC124\uACC4\uAE30\uBC0F\uC11C\uBC84\uB97C\uC7AC\uBD80\uD305\uD558\uB824\uBA74\uC11C\uBC84\uB97C\uC218\uB3D9\uC7AC\uBD80\uD305\uD574\uC57C\uD569\uB2C8\uB2E4. Datasource-Maximum_Number_of_Preview_Rows=\uCD5C\uB300\uBBF8\uB9AC\uBCF4\uAE30\uD589\uC218 ExpandD-Cell_Expand_Attributes=\uD655\uC7A5\uC18D\uC131 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties index 7444fdfe68..d576428b38 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_CN.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_CN.properties @@ -1356,7 +1356,7 @@ RWA-NotChange_Unmodified=\u672A\u4FEE\u6539\u4E0D\u66F4\u65B0 User_Information=\u7528\u6237\u4FE1\u606F Custom_styles_lost=\u81EA\u5B9A\u4E49\u6837\u5F0F\u5DF2\u4E22\u5931 PageSetup-Margin=\u9875\u8FB9\u8DDD -M-New_FormBook=\u65B0\u5EFA\u8868\u5355 +M-New_FormBook=\u65B0\u5EFA\u51B3\u7B56\u62A5\u8868 Widget-TreeNode=\u6811\u8282\u70B9\u6309\u94AE Form-Url=\u5730\u5740 Utils-Beyond_the_left_side_of_Border=\u8D85\u51FA\u5DE6\u8FB9\u754C @@ -1457,7 +1457,7 @@ Ratio=\u6BD4\u7387 DBCP_TEST_ON_BORROW=\u83B7\u53D6\u8FDE\u63A5\u524D\u68C0\u9A8C FR-Designer_layerIndex=\u4F9D\u8D56\u7684\u5C42\u6570 WEB-Write_Setting=\u586B\u62A5\u9875\u9762\u8BBE\u7F6E -M-New_WorkBook=\u65B0\u5EFA\u5DE5\u4F5C\u7C3F +M-New_WorkBook=\u65B0\u5EFA\u666E\u901A\u62A5\u8868 Datasource-Maximum_Number_of_Preview_Rows=\u6700\u5927\u7684\u9884\u89C8\u884C\u6570 ExpandD-Cell_Expand_Attributes=\u6269\u5C55\u5C5E\u6027 Select_the_repeated_row_and_column=\u9009\u62E9\u9700\u8981\u91CD\u590D\u7684\u884C\u5217 diff --git a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties index bf1775d3fe..0b767ab4f2 100644 --- a/designer_base/src/com/fr/design/locale/designer_zh_TW.properties +++ b/designer_base/src/com/fr/design/locale/designer_zh_TW.properties @@ -1357,7 +1357,6 @@ RWA-NotChange_Unmodified=\u4E0D\u6539\u8B8A\u6642\u4E0D\u66F4\u65B0 User_Information=\u7528\u6236\u8A0A\u606F Custom_styles_lost=\u81EA\u5B9A\u7FA9\u6A23\u5F0F\u5DF2\u4E1F\u5931 PageSetup-Margin=\u9801\u908A\u8DDD -M-New_FormBook=\u5EFA\u7ACB\u65B0\u5831\u8868 Widget-TreeNode=\u6A39\u7BC0\u9EDE\u6309\u9215 Form-Url=\u5730\u5740 Utils-Beyond_the_left_side_of_Border=\u8D85\u51FA\u5DE6\u908A\u754C @@ -1458,7 +1457,7 @@ Ratio=\u6BD4\u7387 DBCP_TEST_ON_BORROW=\u7372\u53D6\u9023\u63A5\u524D\u6AA2\u9A57 FR-Designer_layerIndex=\u4F9D\u8CF4\u7684\u5C64\u6578 WEB-Write_Setting=\u586B\u5831\u9762\u9762\u8A2D\u5B9A -M-New_WorkBook=\u65B0\u589E\u5DE5\u4F5C\u7C3F +M-New_WorkBook=\u65B0\u589E\u666E\u901A\u5831\u8868 FR-Designer-Plugin_Has_Been_Actived=Plugin is now active Datasource-Maximum_Number_of_Preview_Rows=\u6700\u5927\u7684\u9810\u89BD\u5217\u6578 ExpandD-Cell_Expand_Attributes=\u64F4\u5C55\u5C6C\u6027 @@ -2123,3 +2122,4 @@ FR-Designer_Barcode_Size= FS-Designer_DS_Filter_Odd_Tip=\u63D0\u793A\uFF1A\u5E8F\u865F\u5F9E1\u958B\u59CB\uFF0C\u9078\u64C7\u4E86\u5947\u6578\u96C6(1,3,5...) FS-Designer_DS_Filter_Even_Tip=\u63D0\u793A\uFF1A\u5E8F\u865F\u5F9E1\u958B\u59CB\uFF0C\u9078\u64C7\u4E86\u5076\u6578\u96C6(2,4,6...) FS-Designer_DS_Filter_Specify_Tip=\u63D0\u793A\uFF1A\u683C\u5F0F\u70BA1,2-3,5,8\uFF0C\u5E8F\u865F\u5F9E1\u958B\u59CB\uFF0C\u5185\u7F6E\u53C3\u6578$_count_\u8868\u793A\u7E02\u500B\u6578 +M-New_FormBook=\u65B0\u589E\u6C7A\u7B56\u5831\u8868 From 68ea276b8ff7f8c06327584ffbb19df9b9113d18 Mon Sep 17 00:00:00 2001 From: MoMeak Date: Mon, 14 Aug 2017 14:27:59 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=96=B0=E5=8A=A0=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/actions/UpdateAction.java | 21 ++-- .../com/fr/design/gui/imenu/UIMenuItem.java | 58 +++------- .../design/gui/imenu/UIMenuItemEastAttr.java | 103 ++++++++++++++++++ .../com/fr/design/gui/imenu/UIPopupMenu.java | 12 +- .../src/com/fr/design/menu/MenuDef.java | 10 +- 5 files changed, 146 insertions(+), 58 deletions(-) create mode 100644 designer_base/src/com/fr/design/gui/imenu/UIMenuItemEastAttr.java diff --git a/designer_base/src/com/fr/design/actions/UpdateAction.java b/designer_base/src/com/fr/design/actions/UpdateAction.java index ecb6c95af7..15b679de8f 100644 --- a/designer_base/src/com/fr/design/actions/UpdateAction.java +++ b/designer_base/src/com/fr/design/actions/UpdateAction.java @@ -11,6 +11,7 @@ import com.fr.design.constants.UIConstants; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.imenu.UICheckBoxMenuItem; import com.fr.design.gui.imenu.UIMenuItem; +import com.fr.design.gui.imenu.UIMenuItemEastAttr; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.menu.ShortCut; import com.fr.design.selection.SelectionListener; @@ -49,11 +50,6 @@ public abstract class UpdateAction extends ShortCut implements Action { */ private boolean enabled = true; - /** - * Specifies whether action is rePaint; the default is false. - */ - private boolean rePaint = false; - /** * Contains the array of key bindings. * august:关键词key,是Action里面的final常量,如:Action.NAME、Action.SMALL_ICON等等 @@ -255,10 +251,18 @@ public abstract class UpdateAction extends ShortCut implements Action { this.putValue(UIMenuItem.class.getName(), object); } - ((UIMenuItem) object).setRePaint(this.rePaint); return (UIMenuItem) object; } + public UIMenuItemEastAttr createMenuItemEastAttr() { + UIMenuItem menuItem = new UIMenuItemEastAttr(this); + // 设置名字用作单元测 + menuItem.setName(getName()); + Object object = menuItem; + this.putValue(UIMenuItem.class.getName(), object); + return (UIMenuItemEastAttr) object; + } + /** * Gets component on toolbar. * @@ -324,7 +328,10 @@ public abstract class UpdateAction extends ShortCut implements Action { public void intoJPopupMenu(JPopupMenu menu) { update(); if (menu instanceof UIPopupMenu){ - this.rePaint = ((UIPopupMenu) menu).getRePaint(); + if (((UIPopupMenu) menu).getRePaint()){ + menu.add(this.createMenuItemEastAttr()); + return; + } } menu.add(this.createMenuItem()); } diff --git a/designer_base/src/com/fr/design/gui/imenu/UIMenuItem.java b/designer_base/src/com/fr/design/gui/imenu/UIMenuItem.java index 3b3064042b..e35f440a13 100644 --- a/designer_base/src/com/fr/design/gui/imenu/UIMenuItem.java +++ b/designer_base/src/com/fr/design/gui/imenu/UIMenuItem.java @@ -1,22 +1,20 @@ package com.fr.design.gui.imenu; -import com.fr.design.constants.UIConstants; -import com.fr.design.utils.gui.GUIPaintUtils; -import com.fr.stable.Constants; -import com.fr.stable.StringUtils; -import sun.swing.SwingUtilities2; +import java.awt.*; import javax.swing.*; import javax.swing.plaf.basic.BasicMenuItemUI; -import java.awt.*; - -public class UIMenuItem extends JMenuItem { - private boolean rePaint = false; +import com.fr.design.constants.UIConstants; +import com.fr.stable.Constants; +import com.fr.stable.StringUtils; +import com.fr.design.utils.gui.GUIPaintUtils; +import sun.swing.SwingUtilities2; - public UIMenuItem() { - this(StringUtils.BLANK); - } +public class UIMenuItem extends JMenuItem{ + public UIMenuItem() { + this(StringUtils.BLANK); + } public UIMenuItem(String string) { this(string, null); @@ -40,10 +38,6 @@ public class UIMenuItem extends JMenuItem { setAction(action); } - public void setRePaint(boolean rePaint){ - this.rePaint = rePaint; - } - @Override public String getText() { return StringUtils.BLANK + super.getText(); @@ -53,34 +47,21 @@ public class UIMenuItem extends JMenuItem { @Override protected void paintBackground(Graphics g, JMenuItem menuItem,Color bgColor) { if(menuItem.getIcon() == null) { - if (!rePaint){ - super.paintBackground(g, menuItem, bgColor); - return; - } - } - if (rePaint){ - menuItem.setIcon(null); + super.paintBackground(g, menuItem, bgColor); + return; } ButtonModel model = menuItem.getModel(); Color oldColor = g.getColor(); int menuWidth = menuItem.getWidth(); int menuHeight = menuItem.getHeight(); + g.setColor(UIConstants.NORMAL_BACKGROUND); g.fillRect(0, 0, menuWidth, menuHeight); - - if (menuItem.isOpaque()) { - if (!rePaint) { - if (model.isArmed() || (menuItem instanceof JMenu && model.isSelected())) { - GUIPaintUtils.fillPaint((Graphics2D) g, 30, 0, menuWidth - 30, menuHeight, true, Constants.NULL, UIConstants.FLESH_BLUE, 7); - } else { - GUIPaintUtils.fillPaint((Graphics2D) g, 30, 0, menuWidth - 30, menuHeight, true, Constants.NULL, menuItem.getBackground(), 7); - } + if(menuItem.isOpaque()) { + if (model.isArmed()|| (menuItem instanceof JMenu && model.isSelected())) { + GUIPaintUtils.fillPaint((Graphics2D)g, 30, 0, menuWidth - 30, menuHeight, true, Constants.NULL, UIConstants.FLESH_BLUE, 7); } else { - if (model.isArmed() || (menuItem instanceof JMenu && model.isSelected())) { - GUIPaintUtils.fillPaint((Graphics2D) g, 0, 0, menuWidth, menuHeight, true, Constants.NULL, UIConstants.FLESH_BLUE, 0); - } else { - GUIPaintUtils.fillPaint((Graphics2D) g, 0, 0, menuWidth, menuHeight, true, Constants.NULL, UIConstants.TOOLBARUI_BACKGROUND, 0); - } + GUIPaintUtils.fillPaint((Graphics2D)g, 30, 0, menuWidth - 30, menuHeight, true, Constants.NULL, menuItem.getBackground(), 7); } g.setColor(oldColor); } @@ -111,9 +92,6 @@ public class UIMenuItem extends JMenuItem { -1, textRect.x - 1, textRect.y + fm.getAscent() - 1); } - } else if (rePaint) { - SwingUtilities2.drawStringUnderlineCharAt(menuItem, g, text, - -1, 0, textRect.y + fm.getAscent()); } else { // *** paint the text normally if (model.isArmed()|| (menuItem instanceof JMenu && model.isSelected())) { @@ -124,6 +102,6 @@ public class UIMenuItem extends JMenuItem { } } - } + } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/gui/imenu/UIMenuItemEastAttr.java b/designer_base/src/com/fr/design/gui/imenu/UIMenuItemEastAttr.java new file mode 100644 index 0000000000..53c859a624 --- /dev/null +++ b/designer_base/src/com/fr/design/gui/imenu/UIMenuItemEastAttr.java @@ -0,0 +1,103 @@ +package com.fr.design.gui.imenu; + +import com.fr.design.constants.UIConstants; +import com.fr.design.utils.gui.GUIPaintUtils; +import com.fr.stable.Constants; +import com.fr.stable.StringUtils; +import sun.swing.SwingUtilities2; + +import javax.swing.*; +import javax.swing.plaf.basic.BasicMenuItemUI; +import java.awt.*; + +/** + * 右侧属性面板悬浮元素、超级链接弹窗重绘 + */ +public class UIMenuItemEastAttr extends UIMenuItem { + + public UIMenuItemEastAttr() { + this(StringUtils.BLANK); + } + + public UIMenuItemEastAttr(String string) { + this(string, null); + + } + + public UIMenuItemEastAttr(String string, Icon pageSmallIcon) { + super(string, pageSmallIcon); + setBackground(UIConstants.NORMAL_BACKGROUND); + setUI(new UIMenuItemEastAttrUI()); + } + + public UIMenuItemEastAttr(String string, int key) { + super(string, key); + setBackground(UIConstants.NORMAL_BACKGROUND); + setUI(new UIMenuItemEastAttrUI()); + } + + public UIMenuItemEastAttr(Action action) { + this(); + setAction(action); + } + + @Override + public String getText() { + return StringUtils.BLANK + super.getText(); + } + + private class UIMenuItemEastAttrUI extends BasicMenuItemUI { + @Override + protected void paintBackground(Graphics g, JMenuItem menuItem,Color bgColor) { + if(menuItem.getIcon() != null) { + menuItem.setIcon(null); + } + + ButtonModel model = menuItem.getModel(); + Color oldColor = g.getColor(); + int menuWidth = menuItem.getWidth(); + int menuHeight = menuItem.getHeight(); + g.setColor(UIConstants.NORMAL_BACKGROUND); + g.fillRect(0, 0, menuWidth, menuHeight); + + if (menuItem.isOpaque()) { + if (model.isArmed() || (menuItem instanceof JMenu && model.isSelected())) { + GUIPaintUtils.fillPaint((Graphics2D) g, 0, 0, menuWidth, menuHeight, true, Constants.NULL, UIConstants.FLESH_BLUE, 0); + } else { + GUIPaintUtils.fillPaint((Graphics2D) g, 0, 0, menuWidth, menuHeight, true, Constants.NULL, UIConstants.TOOLBARUI_BACKGROUND, 0); + } + g.setColor(oldColor); + } + else if (model.isArmed() || (menuItem instanceof JMenu && + model.isSelected())) { + GUIPaintUtils.fillPaint((Graphics2D)g, 0, 0, menuWidth, menuHeight, true, Constants.NULL, UIConstants.FLESH_BLUE, 7); + g.setColor(oldColor); + } + } + + protected void paintText(Graphics g, JMenuItem menuItem, Rectangle textRect, String text) { + ButtonModel model = menuItem.getModel(); + FontMetrics fm = SwingUtilities2.getFontMetrics(menuItem, g); + + if(!model.isEnabled()) { + // *** paint the text disabled + if ( UIManager.get("MenuItem.disabledForeground") instanceof Color ) { + g.setColor( UIManager.getColor("MenuItem.disabledForeground") ); + SwingUtilities2.drawStringUnderlineCharAt(menuItem, g,text, + -1, textRect.x, textRect.y + fm.getAscent()); + } else { + g.setColor(menuItem.getBackground().brighter()); + SwingUtilities2.drawStringUnderlineCharAt(menuItem, g, text, + -1, textRect.x, textRect.y + fm.getAscent()); + g.setColor(menuItem.getBackground().darker()); + SwingUtilities2.drawStringUnderlineCharAt(menuItem, g,text, + -1, textRect.x - 1, textRect.y + + fm.getAscent() - 1); + } + } else { + SwingUtilities2.drawStringUnderlineCharAt(menuItem, g, text, + -1, -4, textRect.y + fm.getAscent()); + } + } + } +} \ No newline at end of file diff --git a/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java b/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java index 10a223c52a..35f4641ced 100644 --- a/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java +++ b/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java @@ -9,26 +9,26 @@ import com.fr.design.constants.UIConstants; public class UIPopupMenu extends JPopupMenu { private boolean onlyText = false; - private boolean rePaint = false; + private boolean isEastAttr = false; public UIPopupMenu() { super(); setBackground(UIConstants.NORMAL_BACKGROUND); } - public UIPopupMenu(boolean rePaint) { + public UIPopupMenu(boolean isEastAttr) { super(); - this.rePaint = rePaint; + this.isEastAttr = isEastAttr; setBackground(UIConstants.TOOLBARUI_BACKGROUND); } public boolean getRePaint() { - return this.rePaint; + return this.isEastAttr; } @Override protected void paintBorder(Graphics g) { - if (rePaint) { + if (isEastAttr) { g.setColor(UIConstants.POP_DIALOG_BORDER); g.drawRect(0, 0, getWidth() - 1, getHeight() - 1); } else { @@ -42,7 +42,7 @@ public class UIPopupMenu extends JPopupMenu { if (onlyText) { return super.getInsets(); } - if (rePaint) { + if (isEastAttr) { return new Insets(0, 1, 1, 1); } else { return new Insets(10, 2, 10, 10); diff --git a/designer_base/src/com/fr/design/menu/MenuDef.java b/designer_base/src/com/fr/design/menu/MenuDef.java index 385c4461f0..ae61d0eeab 100644 --- a/designer_base/src/com/fr/design/menu/MenuDef.java +++ b/designer_base/src/com/fr/design/menu/MenuDef.java @@ -28,7 +28,7 @@ public class MenuDef extends ShortCut { private static final int MENU_DEFAULTWDITH = 156; protected String name; //右侧属性表弹出框重绘 - protected Boolean rePaint = false; + protected Boolean isEastAttr = false; protected char mnemonic; protected String iconPath; protected String tooltip; @@ -68,11 +68,11 @@ public class MenuDef extends ShortCut { } public boolean getRePaint() { - return rePaint; + return isEastAttr; } public void setRePaint(boolean rePaint) { - this.rePaint = rePaint; + this.isEastAttr = rePaint; } public char getMnemonic() { @@ -401,8 +401,8 @@ public class MenuDef extends ShortCut { if (!button.isEnabled()) { return; } - if (rePaint) { - popupMenu = new UIPopupMenu(rePaint); + if (isEastAttr) { + popupMenu = new UIPopupMenu(isEastAttr); popupMenu.setInvoker(button); MenuDef.this.updateEastPopupMenu(popupMenu); popupMenu.setPopupSize(new Dimension(MENU_DEFAULTWDITH, popupMenu.getPreferredSize().height)); From d6213e3b697e1280f3ddc32f4c58174f971b2ce1 Mon Sep 17 00:00:00 2001 From: MoMeak Date: Mon, 14 Aug 2017 14:55:44 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B4=A8=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/actions/UpdateAction.java | 22 +++--- ...mEastAttr.java => UIMenuEastAttrItem.java} | 14 ++-- .../design/gui/imenu/UIPopupEastAttrMenu.java | 28 ++++++++ .../com/fr/design/gui/imenu/UIPopupMenu.java | 69 +++++++------------ .../src/com/fr/design/menu/MenuDef.java | 3 +- 5 files changed, 69 insertions(+), 67 deletions(-) rename designer_base/src/com/fr/design/gui/imenu/{UIMenuItemEastAttr.java => UIMenuEastAttrItem.java} (90%) create mode 100644 designer_base/src/com/fr/design/gui/imenu/UIPopupEastAttrMenu.java diff --git a/designer_base/src/com/fr/design/actions/UpdateAction.java b/designer_base/src/com/fr/design/actions/UpdateAction.java index 15b679de8f..eb0ede5fa4 100644 --- a/designer_base/src/com/fr/design/actions/UpdateAction.java +++ b/designer_base/src/com/fr/design/actions/UpdateAction.java @@ -9,10 +9,7 @@ import com.fr.base.Style; import com.fr.design.actions.core.ActionFactory; import com.fr.design.constants.UIConstants; import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.gui.imenu.UICheckBoxMenuItem; -import com.fr.design.gui.imenu.UIMenuItem; -import com.fr.design.gui.imenu.UIMenuItemEastAttr; -import com.fr.design.gui.imenu.UIPopupMenu; +import com.fr.design.gui.imenu.*; import com.fr.design.menu.ShortCut; import com.fr.design.selection.SelectionListener; import com.fr.general.ComparatorUtils; @@ -254,13 +251,12 @@ public abstract class UpdateAction extends ShortCut implements Action { return (UIMenuItem) object; } - public UIMenuItemEastAttr createMenuItemEastAttr() { - UIMenuItem menuItem = new UIMenuItemEastAttr(this); + public UIMenuEastAttrItem createMenuItemEastAttr() { + UIMenuEastAttrItem menuItem = new UIMenuEastAttrItem(this); // 设置名字用作单元测 menuItem.setName(getName()); - Object object = menuItem; - this.putValue(UIMenuItem.class.getName(), object); - return (UIMenuItemEastAttr) object; + this.putValue(UIMenuItem.class.getName(), menuItem); + return menuItem; } /** @@ -327,11 +323,9 @@ public abstract class UpdateAction extends ShortCut implements Action { @Override public void intoJPopupMenu(JPopupMenu menu) { update(); - if (menu instanceof UIPopupMenu){ - if (((UIPopupMenu) menu).getRePaint()){ - menu.add(this.createMenuItemEastAttr()); - return; - } + if (menu instanceof UIPopupEastAttrMenu){ + menu.add(this.createMenuItemEastAttr()); + return; } menu.add(this.createMenuItem()); } diff --git a/designer_base/src/com/fr/design/gui/imenu/UIMenuItemEastAttr.java b/designer_base/src/com/fr/design/gui/imenu/UIMenuEastAttrItem.java similarity index 90% rename from designer_base/src/com/fr/design/gui/imenu/UIMenuItemEastAttr.java rename to designer_base/src/com/fr/design/gui/imenu/UIMenuEastAttrItem.java index 53c859a624..442464c61e 100644 --- a/designer_base/src/com/fr/design/gui/imenu/UIMenuItemEastAttr.java +++ b/designer_base/src/com/fr/design/gui/imenu/UIMenuEastAttrItem.java @@ -13,30 +13,30 @@ import java.awt.*; /** * 右侧属性面板悬浮元素、超级链接弹窗重绘 */ -public class UIMenuItemEastAttr extends UIMenuItem { +public class UIMenuEastAttrItem extends JMenuItem { - public UIMenuItemEastAttr() { + public UIMenuEastAttrItem() { this(StringUtils.BLANK); } - public UIMenuItemEastAttr(String string) { + public UIMenuEastAttrItem(String string) { this(string, null); } - public UIMenuItemEastAttr(String string, Icon pageSmallIcon) { + public UIMenuEastAttrItem(String string, Icon pageSmallIcon) { super(string, pageSmallIcon); setBackground(UIConstants.NORMAL_BACKGROUND); setUI(new UIMenuItemEastAttrUI()); } - public UIMenuItemEastAttr(String string, int key) { + public UIMenuEastAttrItem(String string, int key) { super(string, key); setBackground(UIConstants.NORMAL_BACKGROUND); setUI(new UIMenuItemEastAttrUI()); } - public UIMenuItemEastAttr(Action action) { + public UIMenuEastAttrItem(Action action) { this(); setAction(action); } @@ -96,7 +96,7 @@ public class UIMenuItemEastAttr extends UIMenuItem { } } else { SwingUtilities2.drawStringUnderlineCharAt(menuItem, g, text, - -1, -4, textRect.y + fm.getAscent()); + -1, 0, textRect.y + fm.getAscent()); } } } diff --git a/designer_base/src/com/fr/design/gui/imenu/UIPopupEastAttrMenu.java b/designer_base/src/com/fr/design/gui/imenu/UIPopupEastAttrMenu.java new file mode 100644 index 0000000000..42b04e03af --- /dev/null +++ b/designer_base/src/com/fr/design/gui/imenu/UIPopupEastAttrMenu.java @@ -0,0 +1,28 @@ +package com.fr.design.gui.imenu; + +import java.awt.Graphics; +import java.awt.Insets; + +import javax.swing.JPopupMenu; + +import com.fr.design.constants.UIConstants; + +public class UIPopupEastAttrMenu extends JPopupMenu { + + public UIPopupEastAttrMenu() { + super(); + setBackground(UIConstants.NORMAL_BACKGROUND); + } + + @Override + protected void paintBorder(Graphics g) { + g.setColor(UIConstants.POP_DIALOG_BORDER); + g.drawRect(0, 0, getWidth() - 1, getHeight() - 1); + } + + @Override + public Insets getInsets() { + return new Insets(0, 1, 1, 1); + } + +} \ No newline at end of file diff --git a/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java b/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java index 35f4641ced..44b36ae115 100644 --- a/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java +++ b/designer_base/src/com/fr/design/gui/imenu/UIPopupMenu.java @@ -7,49 +7,28 @@ import javax.swing.JPopupMenu; import com.fr.design.constants.UIConstants; -public class UIPopupMenu extends JPopupMenu { - private boolean onlyText = false; - private boolean isEastAttr = false; - - public UIPopupMenu() { - super(); - setBackground(UIConstants.NORMAL_BACKGROUND); - } - - public UIPopupMenu(boolean isEastAttr) { - super(); - this.isEastAttr = isEastAttr; - setBackground(UIConstants.TOOLBARUI_BACKGROUND); - } - - public boolean getRePaint() { - return this.isEastAttr; - } - - @Override - protected void paintBorder(Graphics g) { - if (isEastAttr) { - g.setColor(UIConstants.POP_DIALOG_BORDER); - g.drawRect(0, 0, getWidth() - 1, getHeight() - 1); - } else { - g.setColor(UIConstants.LINE_COLOR); - g.drawRect(0, 0, getWidth() - 1, getHeight() - 1); - } - } - - @Override - public Insets getInsets() { - if (onlyText) { - return super.getInsets(); - } - if (isEastAttr) { - return new Insets(0, 1, 1, 1); - } else { - return new Insets(10, 2, 10, 10); - } - } - - public void setOnlyText(boolean onlyText) { - this.onlyText = onlyText; - } +public class UIPopupMenu extends JPopupMenu{ + private boolean onlyText = false; + public UIPopupMenu() { + super(); + setBackground(UIConstants.NORMAL_BACKGROUND); + } + + @Override + protected void paintBorder(Graphics g) { + g.setColor(UIConstants.LINE_COLOR); + g.drawRect(0, 0, getWidth() - 1, getHeight() - 1); + } + + @Override + public Insets getInsets() { + if(onlyText) { + return super.getInsets(); + } + return new Insets(10, 2, 10, 10); + } + + public void setOnlyText(boolean onlyText) { + this.onlyText = onlyText; + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/menu/MenuDef.java b/designer_base/src/com/fr/design/menu/MenuDef.java index ae61d0eeab..00dd2ff3ae 100644 --- a/designer_base/src/com/fr/design/menu/MenuDef.java +++ b/designer_base/src/com/fr/design/menu/MenuDef.java @@ -3,6 +3,7 @@ package com.fr.design.menu; import com.fr.base.BaseUtils; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.imenu.UIMenu; +import com.fr.design.gui.imenu.UIPopupEastAttrMenu; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.gui.imenu.UIScrollMenu; import com.fr.design.gui.iscrollbar.UIScrollBar; @@ -402,7 +403,7 @@ public class MenuDef extends ShortCut { return; } if (isEastAttr) { - popupMenu = new UIPopupMenu(isEastAttr); + popupMenu = new UIPopupEastAttrMenu(); popupMenu.setInvoker(button); MenuDef.this.updateEastPopupMenu(popupMenu); popupMenu.setPopupSize(new Dimension(MENU_DEFAULTWDITH, popupMenu.getPreferredSize().height));