diff --git a/designer/src/com/fr/design/dscolumn/SelectedConfirmedDataColumnPane.java b/designer/src/com/fr/design/dscolumn/SelectedConfirmedDataColumnPane.java index 9552f6ba95..ca13b4a59b 100644 --- a/designer/src/com/fr/design/dscolumn/SelectedConfirmedDataColumnPane.java +++ b/designer/src/com/fr/design/dscolumn/SelectedConfirmedDataColumnPane.java @@ -17,6 +17,7 @@ public class SelectedConfirmedDataColumnPane extends SelectedDataColumnPane { super(false); } + @Override protected void initTableNameComboBox() { tableNameComboBox = new TableDataComboBox(new WorkBook()); tableNameComboBox.addItemListener(new ItemListener() { @@ -39,7 +40,7 @@ public class SelectedConfirmedDataColumnPane extends SelectedDataColumnPane { TemplateTableDataWrapper wrapper = new TemplateTableDataWrapper(source.getTableData(name), name); tableNameComboBox.setSelectedItem(wrapper); tableNameComboBox.getModel().setSelectedItem(wrapper); - } catch (Exception e) { + } catch (Exception ignored) { } } } \ No newline at end of file diff --git a/designer/src/com/fr/design/dscolumn/SelectedDataColumnPane.java b/designer/src/com/fr/design/dscolumn/SelectedDataColumnPane.java index 62538e7d05..9b1ad0088f 100644 --- a/designer/src/com/fr/design/dscolumn/SelectedDataColumnPane.java +++ b/designer/src/com/fr/design/dscolumn/SelectedDataColumnPane.java @@ -37,8 +37,7 @@ import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import java.util.Objects; import java.util.regex.Pattern; /** @@ -50,29 +49,83 @@ import java.util.regex.Pattern; * @since 8.0 */ public class SelectedDataColumnPane extends BasicPane { + + /** + * 参数编辑器面板 + */ private UITableEditorPane editorPane; + /** + * 参数 + */ private Parameter[] ps; - + /** + * 数据集下拉框 + */ TableDataComboBox tableNameComboBox; + /** + * 动态参数注入按钮 + */ + private UIButton paramButton; + /** + * 数据列下拉框 + */ LazyComboBox columnNameComboBox; + + /** + * 数据集下拉框和数据列下拉框监听器 + */ private ItemListener itemListener; - private UIButton paramButton; + + /** + * 当前编辑的模板面板,用于触发保存操作 + */ private ElementCasePane casePane; - private CellElement cellElement; // 保存当前选中的 CE + /** + * 保存当前选中的 CE + */ + private CellElement cellElement; + + private static final Pattern COLUMN_NAME_PATTERN = Pattern.compile("[^\\d]"); + + /** + * 数据集下拉框变动后修改数据列下拉框加载状态的监听器 + */ + private ItemListener loadInstantListener = new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (e.getStateChange() == ItemEvent.SELECTED) { + columnNameComboBox.setLoaded(false); + } + } + }; - public SelectedDataColumnPane() { - this(true, false, null); + /** + * 创建横向布局附带显示动态参数注入按钮的数据集数据列选择面板 + */ + SelectedDataColumnPane() { + this(true, false); } - public SelectedDataColumnPane(boolean showParameterButton) { - this(showParameterButton, false, null); + /** + * 创建横向布局的数据集数据列选择面板 + * + * @param showParameterButton 是否显示动态参数注入按钮 + */ + SelectedDataColumnPane(boolean showParameterButton) { + this(showParameterButton, false); } - public SelectedDataColumnPane(boolean showParameterButton, boolean verticalLayout, TemplateCellElement cellElement) { + /** + * 创建数据集数据列选择面板 + * + * @param showParameterButton 是否显示动态参数注入按钮 + * @param verticalLayout 是否是垂直布局 + */ + public SelectedDataColumnPane(boolean showParameterButton, boolean verticalLayout) { if (verticalLayout) { - initComponentVerticalLayout(cellElement); + initComponentVerticalLayout(); } else { initComponent(showParameterButton); } @@ -86,7 +139,7 @@ public class SelectedDataColumnPane extends BasicPane { public void initComponent(boolean showParameterButton) { initTableNameComboBox(); if (showParameterButton) { - initWithParameterButton(); + initParameterButton(); } columnNameComboBox = new LazyComboBox() { @@ -126,9 +179,9 @@ public class SelectedDataColumnPane extends BasicPane { /** * 初始化竖直布局的组件 */ - private void initComponentVerticalLayout(TemplateCellElement cellElement) { + private void initComponentVerticalLayout() { initTableNameComboBox(); - initWithParameterButton(cellElement); + initVerticalParameterButton(); columnNameComboBox = new LazyComboBox() { @Override public Object[] load() { @@ -156,6 +209,13 @@ public class SelectedDataColumnPane extends BasicPane { } + /** + * 更新面板数据 + * + * @param source 数据源 + * @param cellElement 单元格 + * @param casePane 当前编辑的模板面板 + */ public void populate(TableDataSource source, TemplateCellElement cellElement, ElementCasePane casePane) { tableNameComboBox.refresh(source); this.casePane = casePane; @@ -163,9 +223,8 @@ public class SelectedDataColumnPane extends BasicPane { return; } this.cellElement = cellElement; - if (itemListener != null) { - removeListener(itemListener); - } + removeListener(); + Object value = cellElement.getValue(); if (!(value instanceof DSColumn)) { return; @@ -176,9 +235,14 @@ public class SelectedDataColumnPane extends BasicPane { columnNameComboBox.setSelectedItem(TableDataColumn.getColumnName(dsColumn.getColumn())); ps = dsColumn.getParameters(); - addListener(itemListener); + addListener(); } + /** + * 保存数据到单元格对象中 + * + * @param cellElement 单元格 + */ public void update(CellElement cellElement) { if (cellElement == null) { return; @@ -187,7 +251,7 @@ public class SelectedDataColumnPane extends BasicPane { if (this.tableNameComboBox.getSelectedItem() == null && this.columnNameComboBox.getSelectedItem() == null) { return; } - DSColumn dsColumn = null; + DSColumn dsColumn; if (value == null || !(value instanceof DSColumn)) { dsColumn = new DSColumn(); cellElement.setValue(dsColumn); @@ -195,7 +259,7 @@ public class SelectedDataColumnPane extends BasicPane { dsColumn = (DSColumn) cellElement.getValue(); SimpleDSColumn simpleDSColumn = updateColumnPane(); - dsColumn.setDSName(simpleDSColumn.getDsName()); + dsColumn.setDSName(Objects.requireNonNull(simpleDSColumn).getDsName()); dsColumn.setColumn(simpleDSColumn.getColumn()); dsColumn.setParameters((ps != null && ps.length > 0) ? ps : null); @@ -205,6 +269,7 @@ public class SelectedDataColumnPane extends BasicPane { * 释放模板对象 */ public void release() { + this.cellElement = null; this.casePane = null; this.tableNameComboBox.setModel(new DefaultComboBoxModel()); } @@ -214,7 +279,7 @@ public class SelectedDataColumnPane extends BasicPane { * * @return 更新后的值 */ - public SimpleDSColumn updateColumnPane() { + private SimpleDSColumn updateColumnPane() { SimpleDSColumn dsColumn = new SimpleDSColumn(); TableDataWrapper tableDataWrappe = this.tableNameComboBox.getSelectedItem(); if (tableDataWrappe == null) { @@ -224,9 +289,8 @@ public class SelectedDataColumnPane extends BasicPane { TableDataColumn column; String columnExp = (String) this.columnNameComboBox.getSelectedItem(); if (isColumnName(columnExp)) { - String number = columnExp.substring(1); - Pattern pattern = Pattern.compile("[^\\d]"); - if (pattern.matcher(number).find()) { + String number = Objects.requireNonNull(columnExp).substring(1); + if (COLUMN_NAME_PATTERN.matcher(number).find()) { column = TableDataColumn.createColumn(columnExp); } else { int serialNumber = Integer.parseInt(columnExp.substring(1)); @@ -239,47 +303,31 @@ public class SelectedDataColumnPane extends BasicPane { return dsColumn; } + public void setListener(ItemListener i) { + this.itemListener = i; + } + /** * 添加监听事件 - * - * @param i 监听事件 */ - public void addListener(ItemListener i) { - itemListener = i; - tableNameComboBox.addItemListener(i); - columnNameComboBox.addItemListener(i); + private void addListener() { + tableNameComboBox.addItemListener(this.itemListener); + columnNameComboBox.addItemListener(this.itemListener); } /** * 移除监听事件 - * - * @param i 监听事件 */ - public void removeListener(ItemListener i) { - tableNameComboBox.removeItemListener(i); - columnNameComboBox.removeItemListener(i); + private void removeListener() { + tableNameComboBox.removeItemListener(this.itemListener); + columnNameComboBox.removeItemListener(this.itemListener); } protected void initTableNameComboBox() { tableNameComboBox = new TableDataComboBox(DesignTableDataManager.getEditingTableDataSource()); - final ExecutorService executorService = Executors.newSingleThreadExecutor(); - tableNameComboBox.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - if (e.getStateChange() == ItemEvent.SELECTED) { - executorService.execute(new Runnable() { - @Override - public void run() { - synchronized (columnNameComboBox) { - columnNameComboBox.loadInstant(); - } - } - }); - } - } - }); tableNameComboBox.setPreferredSize(new Dimension(100, 20)); + tableNameComboBox.addItemListener(this.loadInstantListener); } @Override @@ -288,8 +336,8 @@ public class SelectedDataColumnPane extends BasicPane { } - private void initWithParameterButton() { - editorPane = new UITableEditorPane(new ParameterTableModel()); + private void initParameterButton() { + editorPane = new UITableEditorPane<>(new ParameterTableModel()); paramButton = new UIButton(Inter.getLocText("TableData_Dynamic_Parameter_Setting")); paramButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -307,10 +355,11 @@ public class SelectedDataColumnPane extends BasicPane { }); } - private void initWithParameterButton(final TemplateCellElement cellElement) { - editorPane = new UITableEditorPane(new ParameterTableModel()); + private void initVerticalParameterButton() { + editorPane = new UITableEditorPane<>(new ParameterTableModel()); paramButton = new UIButton(Inter.getLocText("FR-Designer-Basic_Dynamic_Parameter_Injection")); paramButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { BasicDialog paramDialog = editorPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { @Override @@ -337,6 +386,6 @@ public class SelectedDataColumnPane extends BasicPane { if (this.tableNameComboBox.getSelectedItem() != null) { return this.tableNameComboBox.getSelectedItem().calculateColumnNameList(); } - return new ArrayList(); + return new ArrayList<>(); } } \ No newline at end of file diff --git a/designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java b/designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java index ea872d01cf..be8c7c962f 100644 --- a/designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java +++ b/designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java @@ -247,9 +247,9 @@ public class CellDSColumnEditor extends CellQuickEditor { }; DSColumnBasicEditorPane() { - dataPane = new SelectedDataColumnPane(true, true, cellElement); + dataPane = new SelectedDataColumnPane(true, true); groupPane = new ResultSetGroupDockingPane(); - dataPane.addListener(dataListener); + dataPane.setListener(dataListener); groupPane.setListener(groupListener); double[] rowSize = {P}, columnSize = {P, F}; diff --git a/designer_base/src/com/fr/design/actions/file/SwitchExistEnv.java b/designer_base/src/com/fr/design/actions/file/SwitchExistEnv.java index 6b26887671..99ba3e08f7 100644 --- a/designer_base/src/com/fr/design/actions/file/SwitchExistEnv.java +++ b/designer_base/src/com/fr/design/actions/file/SwitchExistEnv.java @@ -36,6 +36,9 @@ import java.util.logging.Level; public class SwitchExistEnv extends MenuDef { + // 标志开始切换环境 + private static boolean isSwitching = false; + public SwitchExistEnv() { this.setMenuKeySet(KeySetUtils.SWITCH_ENV); this.setName(getMenuKeySet().getMenuName()); @@ -101,6 +104,7 @@ public class SwitchExistEnv extends MenuDef { * @param e 事件 */ public void actionPerformed(ActionEvent e) { + isSwitching = true; DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); Env selectedEnv = envManager.getEnv(this.getName()); try { @@ -117,13 +121,18 @@ public class SwitchExistEnv extends MenuDef { return; } SignIn.signIn(selectedEnv); - HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshToolArea(); fireDSChanged(); } catch (Exception em) { FRContext.getLogger().error(em.getMessage(), em); JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); TemplatePane.getInstance().editItems(); + } finally { + isSwitching = false; } } } + + public static boolean isSwitching() { + return isSwitching; + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/data/datapane/ChoosePane.java b/designer_base/src/com/fr/design/data/datapane/ChoosePane.java index b6cfc25a7a..eaa04114da 100644 --- a/designer_base/src/com/fr/design/data/datapane/ChoosePane.java +++ b/designer_base/src/com/fr/design/data/datapane/ChoosePane.java @@ -466,9 +466,12 @@ public class ChoosePane extends BasicBeanPane implements Refresha protected String getTableName() { String tableName = ""; - Object obj = this.tableNameComboBox.getSelectedItem(); + Object obj = this.tableNameComboBox.getSelectedItemObject(); if (obj == null) { - obj = this.tableNameComboBox.getEditor().getItem(); + obj = this.tableNameComboBox.getSelectedItem(); + if (obj == null) { + obj = this.tableNameComboBox.getEditor().getItem(); + } } if (obj instanceof TreePath) { Object tp = ((ExpandMutableTreeNode) ((TreePath) obj).getLastPathComponent()).getUserObject(); diff --git a/designer_base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java b/designer_base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java index 4b4bddab4a..db10437fdb 100644 --- a/designer_base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java +++ b/designer_base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java @@ -23,7 +23,7 @@ public class GetPluginFromStoreExecutor implements Executor { private String scope; public GetPluginFromStoreExecutor(JSONObject info) { - this.category = info.optString("category"); + this.category = info.optString("categories"); this.fee = info.optString("fee"); this.seller = info.optString("seller"); this.scope = info.optString("scope"); diff --git a/designer_base/src/com/fr/design/file/MutilTempalteTabPane.java b/designer_base/src/com/fr/design/file/MutilTempalteTabPane.java index 7fa29ea7c7..e25297b110 100644 --- a/designer_base/src/com/fr/design/file/MutilTempalteTabPane.java +++ b/designer_base/src/com/fr/design/file/MutilTempalteTabPane.java @@ -370,7 +370,9 @@ public class MutilTempalteTabPane extends JComponent implements MouseListener, M templateStartX += realWidth; } - paintListDown(g2d, maxWidth); + if (!DesignerMode.isVcsMode()) { + paintListDown(g2d, maxWidth); + } paintUnderLine(templateStartX, maxWidth, g2d); } @@ -549,7 +551,9 @@ public class MutilTempalteTabPane extends JComponent implements MouseListener, M g2d.drawString(sheetName, (int) templateStartX + sheeticon.getIconWidth() + 2 * GAP, getHeight() - GAP * 2); int closePosition = (int) templateStartX + realWidth - CLOSE.getIconWidth() - SMALLGAP; int closeY = (getHeight() - closeIcon.getIconHeight()) / 2; - closeIcon.paintIcon(this, g2d, closePosition, closeY); + if (!DesignerMode.isVcsMode()) { + closeIcon.paintIcon(this, g2d, closePosition, closeY); + } return closePosition; } @@ -605,7 +609,9 @@ public class MutilTempalteTabPane extends JComponent implements MouseListener, M g2d.drawString(sheetName, (int) templateStartX + sheeticon.getIconWidth() + 2 * GAP, getHeight() - GAP * 2); int closeY = (getHeight() - closeIcon.getIconHeight()) / 2; int closePosition = (int) templateStartX + realWidth - CLOSE.getIconWidth() - SMALLGAP; - closeIcon.paintIcon(this, g2d, closePosition, closeY); + if (!DesignerMode.isVcsMode()) { + closeIcon.paintIcon(this, g2d, closePosition, closeY); + } return closePosition; } diff --git a/designer_base/src/com/fr/design/gui/demo/ComboBoxDemo.java b/designer_base/src/com/fr/design/gui/demo/ComboBoxDemo.java index 499243b45f..da7657d079 100644 --- a/designer_base/src/com/fr/design/gui/demo/ComboBoxDemo.java +++ b/designer_base/src/com/fr/design/gui/demo/ComboBoxDemo.java @@ -1,34 +1,37 @@ package com.fr.design.gui.demo; -import java.awt.BorderLayout; -import java.awt.Component; -import java.util.ArrayList; - -import javax.swing.DefaultListCellRenderer; -import com.fr.design.gui.ilable.UILabel; -import javax.swing.JList; -import javax.swing.JPanel; -import javax.swing.JTree; -import javax.swing.ListCellRenderer; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeCellRenderer; -import javax.swing.tree.TreeCellRenderer; -import javax.swing.tree.TreePath; - import com.fr.base.FRContext; -import com.fr.design.gui.icombobox.filter.Filter; +import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.gui.icombobox.ComboCheckBox; import com.fr.design.gui.icombobox.DictionaryComboBox; import com.fr.design.gui.icombobox.ExtendedComboBox; import com.fr.design.gui.icombobox.FRTreeComboBox; import com.fr.design.gui.icombobox.FilterComboBox; import com.fr.design.gui.icombobox.LazyComboBox; +import com.fr.design.gui.icombobox.filter.Filter; +import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.parameter.ParameterInputPane; import com.fr.general.Inter; +import com.fr.stable.ParameterProvider; import com.fr.stable.StringUtils; +import javax.swing.DefaultListCellRenderer; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JTree; +import javax.swing.ListCellRenderer; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.TreeCellRenderer; +import javax.swing.tree.TreePath; +import java.awt.BorderLayout; +import java.awt.Component; +import java.util.ArrayList; + /** * Created by IntelliJ IDEA. * User: Richer @@ -42,12 +45,12 @@ public class ComboBoxDemo extends JPanel { double f = TableLayout.FILL; Component[][] coms = new Component[][]{ - {new UILabel(Inter.getLocText("Form-ComboCheckBox")+":"), createComboCheckBox()}, - {new UILabel(Inter.getLocText(new String[]{"DS-Dictionary", "Form-ComboBox"})+":"), createDictComboBox()}, - {new UILabel(Inter.getLocText("long_data_can_not_show_fully")+":"), createExtendedComboBox()}, - {new UILabel(Inter.getLocText(new String[]{"Filter", "Form-ComboBox"})+":"), createFilterComboBox()}, - {new UILabel(Inter.getLocText("Form-ComboBox")+":"), createTreeComboBox()}, - {new UILabel(Inter.getLocText(new String[]{"Delay", "Load", "Form-ComboBox"})+":"), createLazyComboBox()} + {new UILabel(Inter.getLocText("Form-ComboCheckBox") + ":"), createComboCheckBox()}, + {new UILabel(Inter.getLocText(new String[]{"DS-Dictionary", "Form-ComboBox"}) + ":"), createDictComboBox()}, + {new UILabel(Inter.getLocText("long_data_can_not_show_fully") + ":"), createExtendedComboBox()}, + {new UILabel(Inter.getLocText(new String[]{"Filter", "Form-ComboBox"}) + ":"), createFilterComboBox()}, + {new UILabel(Inter.getLocText("Form-ComboBox") + ":"), createTreeComboBox()}, + {new UILabel(Inter.getLocText(new String[]{"Delay", "Load", "Form-ComboBox"}) + ":"), createLazyComboBox()} }; double[] rowSize = new double[coms.length]; double[] columnSize = {p, f}; @@ -165,6 +168,7 @@ public class ComboBoxDemo extends JPanel { // 睡5秒 try { Thread.sleep(5000); + } catch (InterruptedException e) { FRContext.getLogger().error(e.getMessage(), e); } diff --git a/designer_base/src/com/fr/design/gui/demo/SwingComponentsDemo.java b/designer_base/src/com/fr/design/gui/demo/SwingComponentsDemo.java index b819c337fc..eb026a5699 100644 --- a/designer_base/src/com/fr/design/gui/demo/SwingComponentsDemo.java +++ b/designer_base/src/com/fr/design/gui/demo/SwingComponentsDemo.java @@ -1,16 +1,15 @@ package com.fr.design.gui.demo; -import java.awt.BorderLayout; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.utils.DesignUtils; +import com.fr.design.utils.gui.GUICoreUtils; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.SwingUtilities; import javax.swing.WindowConstants; - -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.utils.DesignUtils; -import com.fr.design.utils.gui.GUICoreUtils; +import java.awt.BorderLayout; /** * Created by IntelliJ IDEA. @@ -19,10 +18,10 @@ import com.fr.design.utils.gui.GUICoreUtils; * Time: 下午4:54 */ public class SwingComponentsDemo extends JFrame { - public SwingComponentsDemo() { - this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + private SwingComponentsDemo() { + this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); init(); - JPanel contentPane = (JPanel)getContentPane(); + JPanel contentPane = (JPanel) getContentPane(); contentPane.setLayout(FRGUIPaneFactory.createBorderLayout()); JTabbedPane tab = new JTabbedPane(); contentPane.add(tab, BorderLayout.CENTER); @@ -40,12 +39,12 @@ public class SwingComponentsDemo extends JFrame { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { JFrame f = new SwingComponentsDemo(); f.setSize(500, 500); f.setVisible(true); GUICoreUtils.centerWindow(f); - f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); } }); } diff --git a/designer_base/src/com/fr/design/gui/icombobox/FRTreeComboBox.java b/designer_base/src/com/fr/design/gui/icombobox/FRTreeComboBox.java index ed8ffb16c7..4e8dc22303 100644 --- a/designer_base/src/com/fr/design/gui/icombobox/FRTreeComboBox.java +++ b/designer_base/src/com/fr/design/gui/icombobox/FRTreeComboBox.java @@ -57,6 +57,7 @@ public class FRTreeComboBox extends UIComboBox { // richer:下拉展示用的tree protected JTree tree; private boolean onlyLeafSelectable = true; + private Object selectedObject = null; public FRTreeComboBox() { this(new JTree()); @@ -162,6 +163,7 @@ public class FRTreeComboBox extends UIComboBox { } public void setSelectedItem(Object o) { + selectedObject = o; if (o instanceof String) { this.setSelectedItemString((String) o); return; @@ -173,6 +175,10 @@ public class FRTreeComboBox extends UIComboBox { this.getModel().setSelectedItem(o); } } + + public Object getSelectedItemObject() { + return selectedObject; + } private boolean validTreePath(String treePath){ return StringUtils.isNotEmpty(treePath) && treePath.charAt(0) == '[' && treePath.endsWith("]"); @@ -183,12 +189,7 @@ public class FRTreeComboBox extends UIComboBox { if (validTreePath(temp)) { temp = temp.substring(2, temp.length() - 1); String[] selectedtable = temp.split(","); - String table = selectedtable[selectedtable.length - 1].trim(); - if (table.contains(".")) { - String[] temp2 = table.split("\\."); - table = temp2[temp2.length - 1].trim(); - } - return table; + return selectedtable[selectedtable.length - 1].trim(); } return ""; } diff --git a/designer_base/src/com/fr/design/gui/icombobox/LazyComboBox.java b/designer_base/src/com/fr/design/gui/icombobox/LazyComboBox.java index 43711b0118..2ec5590f64 100644 --- a/designer_base/src/com/fr/design/gui/icombobox/LazyComboBox.java +++ b/designer_base/src/com/fr/design/gui/icombobox/LazyComboBox.java @@ -1,211 +1,192 @@ -/* - * Copyright(c) 2001-2010, FineReport Inc, All Rights Reserved. - */ -package com.fr.design.gui.icombobox; - -import java.awt.Dimension; -import java.util.ArrayList; -import java.util.List; - -import javax.swing.*; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.event.PopupMenuEvent; -import javax.swing.event.PopupMenuListener; -import javax.swing.plaf.basic.BasicComboPopup; - -import com.fr.general.Inter; - -/** - * @author richer - * @since 6.5.5 创建于2011-6-15 延迟加载的下拉框 - */ -public abstract class LazyComboBox extends UIComboBox implements PopupMenuListener { - protected boolean loaded = false; - private List ls = new ArrayList(); - private Object initialSelected = null; - private static final int NUM=80; - - public static final Object PENDING = new Object() { - - @Override - public String toString() { - return Inter.getLocText("Loading") + "..."; - } - }; - - public LazyComboBox() { - super(); - this.setEditor(new FilterComboBoxEditor()); - addPopupMenuListener(this); -// updateUI(); - } - - public void setLoaded(boolean loaded) { - this.loaded = loaded; - } - - public abstract Object[] load(); - - public void setSelectedItem(Object anObject) { - initialSelected = anObject; - if (loaded) { - super.setSelectedItem(anObject); - } else { - - setModel(new DefaultComboBoxModel(new Object[] { anObject })); - super.setSelectedItem(anObject); - } - } - - /** - * 通过调用该方法,在点击下拉框按钮之前就加载好数据,不需要出现loading了 - */ - public void loadInstant() { - setLoaded(true); - loadList(); - } - - @Override - public void popupMenuWillBecomeVisible(PopupMenuEvent e) { - if (loaded) { - return; - } - DefaultComboBoxModel loadingModel = new DefaultComboBoxModel(new String[]{"", Inter.getLocText("Loading") + "..."}); - LazyComboBox.this.setModel(loadingModel); - new SwingWorker() { - - @Override - protected Void doInBackground() throws Exception { - final Object selectedObj = getSelectedItem(); - loadList(); - return null; - } - - @Override - public void done() { - LazyComboBox.this.updateUI(); - LazyComboBox.this.fireEvent(); - LazyComboBox.this.showPopup(); - } - - }.execute(); - - - } - - /** - * 计算加载下拉列表 - */ - public void loadList() { - DefaultComboBoxModel model = new DefaultComboBoxModel(load()); - model.setSelectedItem(initialSelected); - LazyComboBox.this.setModel(model); - LazyComboBox.this.selectedItemReminder = initialSelected ; - loaded = true; - } - - @Override - public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { - - } - - @Override - public void popupMenuCanceled(PopupMenuEvent e) { - - } - - public void addClickListener(EventListener l) { - if (ls == null) { - ls = new ArrayList(); - } - ls.add(l); - } - - public void fireEvent() { - for (int i = 0, n = ls.size(); i < n; i++) { - ls.get(i).fireEvent(); - } - } - - @Override - public Dimension getPreferredSize() { - Dimension dim = super.getPreferredSize(); - dim.width = NUM; - return dim; - } - - private static class LazyPopMenu extends BasicComboPopup { - - public LazyPopMenu(final JComboBox combo) { - super(combo); - LazyComboBox comboc = (LazyComboBox) combo; - comboc.addClickListener(new EventListener() { - - @Override - public void fireEvent() { - LazyPopMenu.this.show(); - combo.showPopup(); - } - }); - } - } - - private interface EventListener { - void fireEvent(); - } - - class FilterComboBoxEditor extends UIComboBoxEditor implements DocumentListener { - private Object item; - private volatile boolean filtering = false; - private volatile boolean setting = false; - - public FilterComboBoxEditor() { - super(); - textField.getDocument().addDocumentListener(this); - } - - public void setItem(Object item) { - if (filtering) { - return; - } - this.item = item; - - this.setting = true; - textField.setSetting(true); - String newText = (item == null) ? "" : item.toString(); - textField.setText(newText); - textField.setSetting(false); - this.setting = false; - } - - public Object getItem() { - return this.item; - } - - public void insertUpdate(DocumentEvent e) { - handleChange(); - } - - public void removeUpdate(DocumentEvent e) { - handleChange(); - } - - public void changedUpdate(DocumentEvent e) { - handleChange(); - } - - protected void handleChange() { - if (setting) { - return; - } - filtering = true; - String xx = textField.getText(); - LazyComboBox.this.setSelectedItem(xx); - this.item = textField.getText(); - - setPopupVisible(true); - filtering = false; - } - } +/* + * Copyright(c) 2001-2010, FineReport Inc, All Rights Reserved. + */ +package com.fr.design.gui.icombobox; + +import com.fr.general.FRLogger; +import com.fr.general.Inter; + +import javax.swing.DefaultComboBoxModel; +import javax.swing.SwingWorker; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.event.PopupMenuEvent; +import javax.swing.event.PopupMenuListener; +import java.awt.Dimension; +import java.util.concurrent.ExecutionException; + +/** + * @author richer + * @version 2018年2月6日14点43分 by @yaoh.wu + * @since 6.5.5 创建于2011-6-15 延迟加载的下拉框 + */ +public abstract class LazyComboBox extends UIComboBox implements PopupMenuListener { + + private static final int NUM = 80; + private static final String[] PENDING_CONTENT = new String[]{"", Inter.getLocText("Loading") + "..."}; + + /** + * 是否加载完成 + */ + protected boolean loaded = false; + + /** + * 初始化选项 + */ + private Object initialSelected = null; + + + protected LazyComboBox() { + super(); + this.setEditor(new FilterComboBoxEditor()); + addPopupMenuListener(this); + } + + public void setLoaded(boolean loaded) { + this.loaded = loaded; + } + + /** + * 加载下拉框中的选项 + * + * @return 下拉框中的选项 + */ + public abstract Object[] load(); + + @Override + public void setSelectedItem(Object anObject) { + initialSelected = anObject; + if (loaded) { + super.setSelectedItem(anObject); + } else { + this.setModel(new DefaultComboBoxModel<>(new Object[]{anObject})); + super.setSelectedItem(anObject); + } + } + + @Override + public void popupMenuWillBecomeVisible(PopupMenuEvent e) { + if (loaded) { + return; + } + DefaultComboBoxModel loadingModel = new DefaultComboBoxModel<>(PENDING_CONTENT); + this.setModel(loadingModel); + new SwingWorker() { + + @Override + protected Object[] doInBackground() { + return load(); + } + + @Override + public void done() { + try { + LazyComboBox.this.loadList(get()); + } catch (InterruptedException | ExecutionException exception) { + FRLogger.getLogger().debug(exception.getMessage()); + } + LazyComboBox.this.showPopup(); + } + }.execute(); + } + + + /** + * 加载下拉列表 + */ + public void loadList() { + DefaultComboBoxModel model = new DefaultComboBoxModel<>(load()); + model.setSelectedItem(initialSelected); + this.setModel(model); + this.selectedItemReminder = initialSelected; + loaded = true; + } + + /** + * 加载下拉列表 + * + * @param contents 下拉列表内容 + */ + private void loadList(Object[] contents) { + DefaultComboBoxModel model = new DefaultComboBoxModel<>(contents); + model.setSelectedItem(initialSelected); + this.setModel(model); + this.selectedItemReminder = initialSelected; + loaded = true; + } + + @Override + public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { + + } + + @Override + public void popupMenuCanceled(PopupMenuEvent e) { + + } + + @Override + public Dimension getPreferredSize() { + Dimension dim = super.getPreferredSize(); + dim.width = NUM; + return dim; + } + + class FilterComboBoxEditor extends UIComboBoxEditor implements DocumentListener { + private Object item; + private volatile boolean filtering = false; + private volatile boolean setting = false; + + public FilterComboBoxEditor() { + super(); + textField.getDocument().addDocumentListener(this); + } + + @Override + public void setItem(Object item) { + if (filtering) { + return; + } + this.item = item; + this.setting = true; + textField.setSetting(true); + String newText = (item == null) ? "" : item.toString(); + textField.setText(newText); + textField.setSetting(false); + this.setting = false; + } + + @Override + public Object getItem() { + return this.item; + } + + @Override + public void insertUpdate(DocumentEvent e) { + handleChange(); + } + + @Override + public void removeUpdate(DocumentEvent e) { + handleChange(); + } + + @Override + public void changedUpdate(DocumentEvent e) { + handleChange(); + } + + void handleChange() { + if (setting) { + return; + } + filtering = true; + String xx = textField.getText(); + LazyComboBox.this.setSelectedItem(xx); + this.item = textField.getText(); + + setPopupVisible(true); + filtering = false; + } + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/gui/icombobox/UIComboBox.java b/designer_base/src/com/fr/design/gui/icombobox/UIComboBox.java index 350b99eadc..14a90da7b2 100644 --- a/designer_base/src/com/fr/design/gui/icombobox/UIComboBox.java +++ b/designer_base/src/com/fr/design/gui/icombobox/UIComboBox.java @@ -1,214 +1,198 @@ -package com.fr.design.gui.icombobox; - -import com.fr.design.event.GlobalNameListener; -import com.fr.design.event.GlobalNameObserver; -import com.fr.design.event.UIObserver; -import com.fr.design.event.UIObserverListener; -import com.fr.design.utils.gui.GUICoreUtils; - -import javax.swing.*; -import javax.swing.plaf.ComboBoxUI; -import javax.swing.plaf.basic.ComboPopup; -import java.awt.*; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.Vector; - -/** - * august:非常beautiful的ComboBox,不支持编辑状态. 内容过长时,鼠标移动过去会有ToolTips,不会有横向滚动条 - * 假如支持编辑,因为UIComboBox的TextField 的绘制 并不是靠Renderer来控制 , - * 它会通过paintCurrentValueBackground()来绘制背景, - * 然后通过paintCurrentValue(),去绘制UIComboBox里显示的值。所考虑情况比现在复杂多多多多多了,所以暂时不支持 - * 另外,项的内容最好不要有图标 - * - * @author zhou - * @since 2012-5-9下午3:18:58 - */ -public class UIComboBox extends JComboBox implements UIObserver, GlobalNameObserver { - - /** - * - */ - private static final long serialVersionUID = 1L; - - private static final int SIZE = 20; - - private static final int SIZE5 = 5; - - protected UIObserverListener uiObserverListener; - - private String comboBoxName = ""; - - private GlobalNameListener globalNameListener = null; - - public UIComboBox() { - super(); - init(); - } - - public UIComboBox(ComboBoxModel model) { - super(model); - init(); - } - - public UIComboBox(Object[] items) { - super(items); - init(); - } - - public UIComboBox(Vector items) { - super(items); - init(); - } - - private void init() { - setOpaque(false); - setUI(getUIComboBoxUI()); - setRenderer(new UIComboBoxRenderer()); - setEditor(new UIComboBoxEditor()); - initListener(); - } - - protected void initListener() { - if (shouldResponseChangeListener()) { - this.addFocusListener(new FocusAdapter() { - @Override - public void focusGained(FocusEvent e) { - fireSetGlobalName(); - } - }); - this.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - if (uiObserverListener == null) { - return; - } - fireSetGlobalName(); - if (e.getStateChange() == ItemEvent.SELECTED) { - uiObserverListener.doChange(); - } - } - }); - } - } - - protected void fireSetGlobalName() { - if (globalNameListener != null && shouldResponseNameListener()) { - globalNameListener.setGlobalName(comboBoxName); - } - } - - - protected ComboBoxUI getUIComboBoxUI() { - return new UIComboBoxUI(); - } - - /** - * 只允许设置为UIComboBoxRenderer,所以要继承UIComboBoxRenderer - */ - @Override - public void setRenderer(ListCellRenderer aRenderer) { - if (aRenderer instanceof UIComboBoxRenderer) { - super.setRenderer(aRenderer); - } else { - //throw new IllegalArgumentException("Must be UIComboBoxRenderer"); - } - } - - protected ComboPopup createPopup() { - return null; - } - - public void setGlobalName(String name) { - comboBoxName = name; - } - - @Override - public Dimension getPreferredSize() { - return new Dimension(super.getPreferredSize().width + SIZE5, SIZE);//加5的原因在于:render里,每一个项前面了空了一格,要多几像素 - } - - /** - * 鼠标进入事件 - */ - public void mouseEnterEvent() { - - } - - /** - * 鼠标离开事件 - */ - public void mouseExitEvent() { - - } - - /** - * - */ - public void updateUI() { - setUI(getUIComboBoxUI()); - } - - - /** - * - * @param listener 观察者监听事件 - */ - public void registerChangeListener(UIObserverListener listener) { - uiObserverListener = listener; - } - - public void removeChangeListener(){ - uiObserverListener = null; - } - - public UIObserverListener getUiObserverListener(){ - return uiObserverListener; - } - - /** - * @return - */ - public boolean shouldResponseChangeListener() { - return true; - } - - /** - * - * @param listener 观察者监听事件 - */ - public void registerNameListener(GlobalNameListener listener) { - globalNameListener = listener; - } - - /** - * - * @return - */ - public boolean shouldResponseNameListener() { - return true; - } - - - /** - * @param args - */ - public static void main(String... args) { - LayoutManager layoutManager = null; - JFrame jf = new JFrame("test"); - jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - JPanel content = (JPanel) jf.getContentPane(); - content.setLayout(layoutManager); - UIComboBox bb = new UIComboBox(new String[]{"", "jerry", "kunsnat", "richer"}); - bb.setEditable(true); - bb.setBounds(20, 20, bb.getPreferredSize().width, bb.getPreferredSize().height); - content.add(bb); - GUICoreUtils.centerWindow(jf); - jf.setSize(400, 400); - jf.setVisible(true); - } - - +package com.fr.design.gui.icombobox; + +import com.fr.design.event.GlobalNameListener; +import com.fr.design.event.GlobalNameObserver; +import com.fr.design.event.UIObserver; +import com.fr.design.event.UIObserverListener; + +import javax.swing.ComboBoxModel; +import javax.swing.JComboBox; +import javax.swing.ListCellRenderer; +import javax.swing.plaf.ComboBoxUI; +import javax.swing.plaf.basic.ComboPopup; +import java.awt.Dimension; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.Vector; + +/** + * august:非常beautiful的ComboBox,不支持编辑状态. 内容过长时,鼠标移动过去会有ToolTips,不会有横向滚动条 + * 假如支持编辑,因为UIComboBox的TextField 的绘制 并不是靠Renderer来控制 , + * 它会通过paintCurrentValueBackground()来绘制背景, + * 然后通过paintCurrentValue(),去绘制UIComboBox里显示的值。所考虑情况比现在复杂多多多多多了,所以暂时不支持 + * 另外,项的内容最好不要有图标 + * + * @author zhou + * @since 2012-5-9下午3:18:58 + */ +public class UIComboBox extends JComboBox implements UIObserver, GlobalNameObserver { + + /** + * + */ + private static final long serialVersionUID = 1L; + + private static final int SIZE = 20; + + private static final int SIZE5 = 5; + + protected UIObserverListener uiObserverListener; + + private String comboBoxName = ""; + + private GlobalNameListener globalNameListener = null; + + public UIComboBox() { + super(); + init(); + } + + public UIComboBox(ComboBoxModel model) { + super(model); + init(); + } + + public UIComboBox(Object[] items) { + super(items); + init(); + } + + public UIComboBox(Vector items) { + super(items); + init(); + } + + private void init() { + setOpaque(false); + setUI(getUIComboBoxUI()); + setRenderer(new UIComboBoxRenderer()); + setEditor(new UIComboBoxEditor()); + initListener(); + } + + protected void initListener() { + if (shouldResponseChangeListener()) { + this.addFocusListener(new FocusAdapter() { + @Override + public void focusGained(FocusEvent e) { + fireSetGlobalName(); + } + }); + this.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (uiObserverListener == null) { + return; + } + fireSetGlobalName(); + if (e.getStateChange() == ItemEvent.SELECTED) { + uiObserverListener.doChange(); + } + } + }); + } + } + + protected void fireSetGlobalName() { + if (globalNameListener != null && shouldResponseNameListener()) { + globalNameListener.setGlobalName(comboBoxName); + } + } + + + protected ComboBoxUI getUIComboBoxUI() { + return new UIComboBoxUI(); + } + + /** + * 只允许设置为UIComboBoxRenderer,所以要继承UIComboBoxRenderer + */ + @Override + public void setRenderer(ListCellRenderer aRenderer) { + if (aRenderer instanceof UIComboBoxRenderer) { + super.setRenderer(aRenderer); + } + } + + protected ComboPopup createPopup() { + return null; + } + + @Override + public void setGlobalName(String name) { + comboBoxName = name; + } + + @Override + public Dimension getPreferredSize() { + //加5的原因在于:render里,每一个项前面了空了一格,要多几像素 + return new Dimension(super.getPreferredSize().width + SIZE5, SIZE); + } + + /** + * 鼠标进入事件 + */ + public void mouseEnterEvent() { + + } + + /** + * 鼠标离开事件 + */ + public void mouseExitEvent() { + + } + + /** + * + */ + @Override + public void updateUI() { + setUI(getUIComboBoxUI()); + } + + + /** + * @param listener 观察者监听事件 + */ + @Override + public void registerChangeListener(UIObserverListener listener) { + uiObserverListener = listener; + } + + public void removeChangeListener() { + uiObserverListener = null; + } + + public UIObserverListener getUiObserverListener() { + return uiObserverListener; + } + + /** + * @return 是否响应变更事件 + */ + @Override + public boolean shouldResponseChangeListener() { + return true; + } + + /** + * @param listener 观察者监听事件 + */ + @Override + public void registerNameListener(GlobalNameListener listener) { + globalNameListener = listener; + } + + /** + * @return 是否响应名称事件 + */ + @Override + public boolean shouldResponseNameListener() { + return true; + } + + } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/locale/designer.properties b/designer_base/src/com/fr/design/locale/designer.properties index 4ad4931eb2..f5aea0212b 100644 --- a/designer_base/src/com/fr/design/locale/designer.properties +++ b/designer_base/src/com/fr/design/locale/designer.properties @@ -2167,3 +2167,4 @@ FR-Designer_Tab_Menu_Style=Menu Style FR-Designer_Tab_Pentagon_Style=Pentagon Style FR-Designer_Tab_Trapezoid_Style=Trapezoid Style FR-Designer_Tab_Display_Position=Display Position +FR-Designer_Background_Select=Select Background 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 fb28e02f07..5f4e32a5ab 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 @@ -2165,4 +2165,5 @@ FR-Designer_Tab_Card_Style=Card Style FR-Designer_Tab_Menu_Style=Menu Style FR-Designer_Tab_Pentagon_Style=Pentagon Style FR-Designer_Tab_Trapezoid_Style=Trapezoid Style -FR-Designer_Tab_Display_Position=Display Position \ No newline at end of file +FR-Designer_Tab_Display_Position=Display Position +FR-Designer_Background_Select=Select Background 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 7b9c83d440..c776cd0b10 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 @@ -2167,3 +2167,4 @@ FR-Designer_Tab_Menu_Style= FR-Designer_Tab_Pentagon_Style= FR-Designer_Tab_Trapezoid_Style= FR-Designer_Tab_Display_Position= +FR-Designer_Background_Select= \ No newline at end of file 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 f16116d74a..6ec5b92e26 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 @@ -2167,3 +2167,4 @@ FR-Designer_Tab_Menu_Style= FR-Designer_Tab_Pentagon_Style= FR-Designer_Tab_Trapezoid_Style= FR-Designer_Tab_Display_Position= +FR-Designer_Background_Select= \ No newline at end of file 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 2f6ea58868..dfb3080380 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 @@ -2166,4 +2166,5 @@ FR-Designer_Tab_Card_Style=\u5361\u7247\u5F0F FR-Designer_Tab_Menu_Style=\u83DC\u5355\u5F0F FR-Designer_Tab_Pentagon_Style=\u4E94\u8FB9\u5F62 FR-Designer_Tab_Trapezoid_Style=\u68AF\u5F62 -FR-Designer_Tab_Display_Position=\u663E\u793A\u4F4D\u7F6E \ No newline at end of file +FR-Designer_Tab_Display_Position=\u663E\u793A\u4F4D\u7F6E +FR-Designer_Background_Select=\u9009\u4E2D\u80CC\u666F \ No newline at end of file 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 8f1f273c33..780d341cb7 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 @@ -2166,3 +2166,4 @@ FR-Designer_Tab_Menu_Style=\u83DC\u55AE\u5F0F FR-Designer_Tab_Pentagon_Style=\u4E94\u908A\u5F62 FR-Designer_Tab_Trapezoid_Style=\u68AF\u5F62 FR-Designer_Tab_Display_Position=\u986F\u793A\u4F4D\u7F6E +FR-Designer_Background_Select=\u9078\u4E2D\u80CC\u666F \ No newline at end of file diff --git a/designer_base/src/com/fr/design/mainframe/DesignerFrame.java b/designer_base/src/com/fr/design/mainframe/DesignerFrame.java index ea02476682..28e4e03446 100644 --- a/designer_base/src/com/fr/design/mainframe/DesignerFrame.java +++ b/designer_base/src/com/fr/design/mainframe/DesignerFrame.java @@ -11,13 +11,18 @@ import com.fr.design.DesignState; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; import com.fr.design.actions.core.ActionFactory; +import com.fr.design.actions.file.SwitchExistEnv; import com.fr.design.constants.UIConstants; import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.datapane.TableDataTreePane; import com.fr.design.event.DesignerOpenedListener; import com.fr.design.event.TargetModifiedEvent; import com.fr.design.event.TargetModifiedListener; -import com.fr.design.file.*; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.file.MutilTempalteTabPane; +import com.fr.design.file.NewTemplatePane; +import com.fr.design.file.SaveSomeTemplatePane; +import com.fr.design.file.TemplateTreePane; import com.fr.design.fun.TitlePlaceProcessor; import com.fr.design.fun.impl.AbstractTemplateTreeShortCutProvider; import com.fr.design.gui.ibutton.UIButton; @@ -53,27 +58,25 @@ import com.fr.stable.StableUtils; import com.fr.stable.image4j.codec.ico.ICODecoder; import com.fr.stable.project.ProjectConstants; -import javax.swing.Icon; -import javax.swing.JComponent; -import javax.swing.JFrame; -import javax.swing.JLayeredPane; -import javax.swing.JMenuBar; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.WindowConstants; +import javax.swing.*; import javax.swing.border.MatteBorder; -import java.awt.BorderLayout; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Toolkit; +import java.awt.*; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; -import java.awt.dnd.*; -import java.awt.event.*; +import java.awt.dnd.DnDConstants; +import java.awt.dnd.DropTarget; +import java.awt.dnd.DropTargetDragEvent; +import java.awt.dnd.DropTargetDropEvent; +import java.awt.dnd.DropTargetEvent; +import java.awt.dnd.DropTargetListener; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; @@ -95,7 +98,10 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta private List designerOpenedListenerList = new ArrayList<>(); - private ToolBarMenuDock ad; + //顶部日志+登陆按钮 + private static final JPanel northEastPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + + private static ToolBarMenuDock ad; private DesktopCardPane centerTemplateCardPane; @@ -313,41 +319,39 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta protected void initMenuPane() { menuPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); menuPane.add(new UIMenuHighLight(), BorderLayout.SOUTH); - menuPane.add(initNorthEastPane(ad), BorderLayout.EAST); + menuPane.add(initNorthEastPane(), BorderLayout.EAST); basePane.add(menuPane, BorderLayout.NORTH); this.resetToolkitByPlus(null); } /** - * @param ad * @return */ - protected JPanel initNorthEastPane(final ToolBarMenuDock ad) { + protected JPanel initNorthEastPane() { //hugh: private修改为protected方便oem的时候修改右上的组件构成 - //顶部日志+登陆按钮 - final JPanel northEastPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + //优先级为-1,保证最后全面刷新一次 GeneralContext.listenPluginRunningChanged(new PluginEventListener(-1) { @Override public void on(PluginEvent event) { - refreshNorthEastPane(northEastPane, ad); + refreshNorthEastPane(); DesignUtils.refreshDesignerFrame(FRContext.getCurrentEnv()); } }, new PluginFilter() { @Override public boolean accept(PluginContext context) { - - return context.contain(PluginModule.ExtraDesign); + return !SwitchExistEnv.isSwitching() + && context.contain(PluginModule.ExtraDesign); } }); - refreshNorthEastPane(northEastPane, ad); + refreshNorthEastPane(); return northEastPane; } - private void refreshNorthEastPane(JPanel northEastPane, ToolBarMenuDock ad) { + public static void refreshNorthEastPane() { northEastPane.removeAll(); northEastPane.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0)); northEastPane.add(LogMessageBar.getInstance()); @@ -711,7 +715,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta * @param env 环境 */ public void refreshEnv(Env env) { - this.setTitle(); DesignerFrameFileDealerPane.getInstance().refreshDockingView(); TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()); diff --git a/designer_base/src/com/fr/design/mainframe/widget/accessibles/AccessibleImgBackgroundEditor.java b/designer_base/src/com/fr/design/mainframe/widget/accessibles/AccessibleImgBackgroundEditor.java index 931793aab2..71cc16bdce 100644 --- a/designer_base/src/com/fr/design/mainframe/widget/accessibles/AccessibleImgBackgroundEditor.java +++ b/designer_base/src/com/fr/design/mainframe/widget/accessibles/AccessibleImgBackgroundEditor.java @@ -18,7 +18,7 @@ public class AccessibleImgBackgroundEditor extends UneditableAccessibleEditor { @Override protected void showEditorPane() { - choosePane = new BackgroundButtonPane(); + choosePane = initBackgroundPane(); choosePane.setPreferredSize(new Dimension(600, 400)); BasicDialog dlg = choosePane.showWindow(SwingUtilities.getWindowAncestor(this)); dlg.addDialogActionListener(new DialogActionAdapter() { @@ -32,4 +32,9 @@ public class AccessibleImgBackgroundEditor extends UneditableAccessibleEditor { choosePane.populate(getValue() instanceof Background ? (Background) getValue() : new ColorBackground()); dlg.setVisible(true); } + + protected BackgroundButtonPane initBackgroundPane(){ + return new BackgroundButtonPane(); + } + } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/mainframe/widget/accessibles/AccessibleTabBackgroundEditor.java b/designer_base/src/com/fr/design/mainframe/widget/accessibles/AccessibleTabBackgroundEditor.java index ade9208565..d4d8a5493c 100644 --- a/designer_base/src/com/fr/design/mainframe/widget/accessibles/AccessibleTabBackgroundEditor.java +++ b/designer_base/src/com/fr/design/mainframe/widget/accessibles/AccessibleTabBackgroundEditor.java @@ -1,40 +1,17 @@ package com.fr.design.mainframe.widget.accessibles; -import com.fr.base.background.ColorBackground; -import com.fr.design.dialog.BasicDialog; -import com.fr.design.dialog.DialogActionAdapter; -import com.fr.design.mainframe.widget.wrappers.BackgroundWrapper; -import com.fr.design.style.background.BackgroundTabPane; -import com.fr.general.Background; - -import javax.swing.SwingUtilities; -import java.awt.Dimension; - +import com.fr.design.style.background.BackgroundButtonPane; +import com.fr.design.style.background.BackgroundCardSwitchButtonPane; /** * @author kerry - * @date 2018/1/17 + * @date 2018/1/29 */ -public class AccessibleTabBackgroundEditor extends UneditableAccessibleEditor { - private BackgroundTabPane choosePane; - +public class AccessibleTabBackgroundEditor extends AccessibleImgBackgroundEditor { public AccessibleTabBackgroundEditor() { - super(new BackgroundWrapper()); + super(); } - @Override - protected void showEditorPane() { - choosePane = new BackgroundTabPane(); - choosePane.setPreferredSize(new Dimension(600, 400)); - BasicDialog dlg = choosePane.showWindow(SwingUtilities.getWindowAncestor(this)); - dlg.addDialogActionListener(new DialogActionAdapter() { - - @Override - public void doOk() { - setValue(choosePane.update()); - fireStateChanged(); - } - }); - choosePane.populate(getValue() instanceof Background ? (Background) getValue() : new ColorBackground()); - dlg.setVisible(true); + protected BackgroundButtonPane initBackgroundPane(){ + return new BackgroundCardSwitchButtonPane(); } -} \ No newline at end of file +} diff --git a/designer_base/src/com/fr/design/mainframe/widget/accessibles/AccessibleTabPaneBackgroundEditor.java b/designer_base/src/com/fr/design/mainframe/widget/accessibles/AccessibleTabPaneBackgroundEditor.java new file mode 100644 index 0000000000..ee0d7634f7 --- /dev/null +++ b/designer_base/src/com/fr/design/mainframe/widget/accessibles/AccessibleTabPaneBackgroundEditor.java @@ -0,0 +1,40 @@ +package com.fr.design.mainframe.widget.accessibles; + +import com.fr.base.background.ColorBackground; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.mainframe.widget.wrappers.BackgroundWrapper; +import com.fr.design.style.background.BackgroundTabPane; +import com.fr.general.Background; + +import javax.swing.SwingUtilities; +import java.awt.Dimension; + +/** + * @author kerry + * @date 2018/1/17 + */ +public class AccessibleTabPaneBackgroundEditor extends UneditableAccessibleEditor { + private BackgroundTabPane choosePane; + + public AccessibleTabPaneBackgroundEditor() { + super(new BackgroundWrapper()); + } + + @Override + protected void showEditorPane() { + choosePane = new BackgroundTabPane(); + choosePane.setPreferredSize(new Dimension(600, 400)); + BasicDialog dlg = choosePane.showWindow(SwingUtilities.getWindowAncestor(this)); + dlg.addDialogActionListener(new DialogActionAdapter() { + + @Override + public void doOk() { + setValue(choosePane.update()); + fireStateChanged(); + } + }); + choosePane.populate(getValue() instanceof Background ? (Background) getValue() : new ColorBackground()); + dlg.setVisible(true); + } +} \ No newline at end of file diff --git a/designer_base/src/com/fr/design/style/background/BackgroundCardSwitchButtonPane.java b/designer_base/src/com/fr/design/style/background/BackgroundCardSwitchButtonPane.java new file mode 100644 index 0000000000..b5a2aeffad --- /dev/null +++ b/designer_base/src/com/fr/design/style/background/BackgroundCardSwitchButtonPane.java @@ -0,0 +1,95 @@ +package com.fr.design.style.background; + +import com.fr.base.background.ColorBackground; +import com.fr.base.background.GradientBackground; +import com.fr.base.background.ImageBackground; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.style.background.gradient.GradientBackgroundPane; +import com.fr.design.style.background.impl.ColorBackgroundPane; +import com.fr.design.style.background.impl.ImageBackgroundPane; +import com.fr.design.style.background.impl.NullBackgroundPane; +import com.fr.general.Background; +import com.fr.general.Inter; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author kerry + * @date 2018/1/29 + */ +public class BackgroundCardSwitchButtonPane extends BackgroundButtonPane { + + private static Map, BackgroundUIWrapper> cardSwitchButton = new LinkedHashMap<>(); + + static { + registerCardSwitchBtnBackground(cardSwitchButton); + } + + + private static void registerCardSwitchBtnBackground(Map, BackgroundUIWrapper> map) { + map.put(ColorBackground.class, BackgroundUIWrapper.create() + .setType(ColorBackgroundPane.class).setTitle(Inter.getLocText("FR-Designer_Background_Color"))); + map.put(ImageBackground.class, BackgroundUIWrapper.create() + .setType(ImageBackgroundPane.class).setTitle(Inter.getLocText("FR-Designer_Background_Image"))); + map.put(GradientBackground.class, BackgroundUIWrapper.create() + .setType(GradientBackgroundPane.class).setTitle(Inter.getLocText("FR-Designer_Background_Gradient_Color"))); + + } + + public BackgroundCardSwitchButtonPane() { + super(); + } + + @Override + protected void initTabPane() { + int index = 0; + for (Class key : cardSwitchButton.keySet()) { + BackgroundUIWrapper wrapper = cardSwitchButton.get(key); + wrapper.setIndex(index++); + tabbedPane.addTab(Inter.getLocText(wrapper.getTitle()), FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane()); + } + } + + @Override + protected BackgroundUIWrapper getBackgroundUIWrapper(Background background) { + return cardSwitchButton.get(background == null ? null : background.getClass()); + } + + + @Override + protected BackgroundDetailPane getTabItemPane(Background background, int index) { + BackgroundDetailPane quickPane = cacheMap.get(index); + if (quickPane == null) { + BackgroundUIWrapper uiWrapper = getBackgroundUIWrapper(background); + quickPane = BackgroundFactory.createByWrapper(uiWrapper); + quickPane.addChangeListener(backgroundChangeListener); + cacheMap.put(index, quickPane); + } + tabbedPane.setComponentAt(index, quickPane); + tabbedPane.setSelectedIndex(index); + return quickPane; + } + + @Override + protected BackgroundDetailPane getTabItemPaneByIndex(int index) { + BackgroundDetailPane quickPane = cacheMap.get(index); + if (quickPane == null) { + quickPane = createDetailPaneByIndex(index); + tabbedPane.setComponentAt(index, quickPane); + cacheMap.put(index, quickPane); + quickPane.addChangeListener(backgroundChangeListener); + } + return quickPane; + } + + public BackgroundDetailPane createDetailPaneByIndex(int index) { + for (BackgroundUIWrapper wrapper : cardSwitchButton.values()) { + if (wrapper.getIndex() == index) { + return BackgroundFactory.createByWrapper(wrapper); + } + } + return new NullBackgroundPane(); + } + +} diff --git a/designer_base/src/com/fr/design/utils/DesignUtils.java b/designer_base/src/com/fr/design/utils/DesignUtils.java index 9dc0399d51..573f2cb446 100644 --- a/designer_base/src/com/fr/design/utils/DesignUtils.java +++ b/designer_base/src/com/fr/design/utils/DesignUtils.java @@ -9,6 +9,7 @@ import com.fr.design.ExtraDesignClassManager; import com.fr.design.fun.DesignerEnvProcessor; import com.fr.design.gui.UILookAndFeel; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrame; import com.fr.env.RemoteEnv; import com.fr.file.FileFILE; import com.fr.general.*; @@ -181,7 +182,7 @@ public class DesignUtils { // 更新CurrentEnv于FRContext & DesignerEnvManager FRContext.setCurrentEnv(env); - + DesignerFrame.refreshNorthEastPane(); refreshDesignerFrame(env); // 当换了运行环境,重置服务器,让它下次预览时重启 if (env instanceof LocalEnv && !ComparatorUtils.equals(env.getPath(), oldEnvPath)) { diff --git a/designer_base/src/com/fr/design/widget/component/BackgroundCompPane.java b/designer_base/src/com/fr/design/widget/component/BackgroundCompPane.java index 41d316145f..5c567279a2 100644 --- a/designer_base/src/com/fr/design/widget/component/BackgroundCompPane.java +++ b/designer_base/src/com/fr/design/widget/component/BackgroundCompPane.java @@ -31,9 +31,7 @@ public abstract class BackgroundCompPane extends BasicPane { public void initComponent() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); UILabel headLabel = createUILable(); - initalBackgroundEditor = new AccessibleImgBackgroundEditor(); - overBackgroundEditor = new AccessibleImgBackgroundEditor(); - clickBackgroundEditor = new AccessibleImgBackgroundEditor(); + initBackgroundEditor(); String [] titles = new String[]{Inter.getLocText("FR-Designer_DEFAULT"), Inter.getLocText("FR-Designer_Custom")}; double f = TableLayout.FILL; @@ -44,7 +42,7 @@ public abstract class BackgroundCompPane extends BasicPane { Component[][] components = new Component[][]{ new Component[]{new UILabel(Inter.getLocText("FR-Designer_Background-Initial")), initalBackgroundEditor}, new Component[]{new UILabel(Inter.getLocText("FR-Designer_Background-Over")), overBackgroundEditor}, - new Component[]{new UILabel(Inter.getLocText("FR-Designer_Background-Click")), clickBackgroundEditor}, + new Component[]{getClickLabel(), clickBackgroundEditor}, }; panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); panel.setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L6, IntervalConstants.INTERVAL_L5, 0, 0)); @@ -57,6 +55,16 @@ public abstract class BackgroundCompPane extends BasicPane { } + protected void initBackgroundEditor(){ + initalBackgroundEditor = new AccessibleImgBackgroundEditor(); + overBackgroundEditor = new AccessibleImgBackgroundEditor(); + clickBackgroundEditor = new AccessibleImgBackgroundEditor(); + } + + protected UILabel getClickLabel(){ + return new UILabel(Inter.getLocText("FR-Designer_Background-Click")); + } + protected UILabel createUILable(){ return new UILabel(Inter.getLocText("FR-Designer_Background")); } diff --git a/designer_base/src/com/fr/env/RemoteEnv.java b/designer_base/src/com/fr/env/RemoteEnv.java index 147911b01e..0a4921b46d 100644 --- a/designer_base/src/com/fr/env/RemoteEnv.java +++ b/designer_base/src/com/fr/env/RemoteEnv.java @@ -2205,19 +2205,7 @@ public class RemoteEnv extends AbstractEnv { @Override public String getSharePath() { - try { - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_share_path"); - para.put("current_uid", this.createUserID()); - para.put("currentUsername", this.getUser()); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - return stream2String(input); - } catch (Exception e) { - return StringUtils.EMPTY; - } + return StringUtils.EMPTY; } public void doWhenServerShutDown() { diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java index 3d52b2beff..b086ad9cc7 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardAddButton.java @@ -1,7 +1,6 @@ package com.fr.design.designer.creator.cardlayout; import com.fr.base.BaseUtils; -import com.fr.base.background.ColorBackground; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.models.SelectionModel; @@ -17,9 +16,13 @@ import com.fr.form.ui.CardSwitchButton; import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; +import com.fr.general.cardtag.DefaultTemplateStyle; -import javax.swing.*; -import java.awt.*; + +import javax.swing.Icon; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; import java.awt.event.MouseEvent; public class XCardAddButton extends XButton{ @@ -81,7 +84,8 @@ public class XCardAddButton extends XButton{ * @param e 点击事件 * */ - public void respondClick(EditingMouseListener editingMouseListener,MouseEvent e){ + @Override + public void respondClick(EditingMouseListener editingMouseListener, MouseEvent e){ FormDesigner designer = editingMouseListener.getDesigner(); designer.fireTargetModified(); @@ -121,7 +125,8 @@ public class XCardAddButton extends XButton{ this.cardLayout = borderLayout.getCardPart(); } - public void paintComponent(Graphics g) { + @Override + public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; drawAddIcon(g2d); @@ -149,11 +154,14 @@ public class XCardAddButton extends XButton{ String cardLayoutName = cardLayout.toData().getWidgetName(); CardSwitchButton titleButton = new CardSwitchButton(index,cardLayoutName); + WCardTagLayout layout = (WCardTagLayout) this.tagLayout.toData(); + if(!ComparatorUtils.equals(layout.getTemplateStyle().getStyle(), DefaultTemplateStyle.DEFAULT_TEMPLATE_STYLE)){ + titleButton.setInitialBackground(layout.getTemplateStyle().getTabDefaultBackground()); + titleButton.setCustomStyle(true); + } //设置标题 - titleButton.setText(getTabTitleName()); - titleButton.setInitialBackground(ColorBackground.getInstance(Color.WHITE)); + titleButton.setText(getTabTitleName(layout)); XCardSwitchButton showButton = new XCardSwitchButton(titleButton, dimension, cardLayout, tagLayout); - titleButton.setCustomStyle(true); titleButton.setShowButton(true); showButton.setBackupParent(tagLayout); this.tagLayout.setCurrentCard(titleButton); @@ -171,8 +179,7 @@ public class XCardAddButton extends XButton{ } //新增时去tabFitLayout名字中最大的Index+1,防止重名 - private String getTabTitleName(){ - WCardTagLayout layout = (WCardTagLayout) this.tagLayout.toData(); + private String getTabTitleName(WCardTagLayout layout){ int size = layout.getWidgetCount(); String prefix = Inter.getLocText("FR-Designer_Title"); String newTextName = prefix + size; diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java index 099cc4330d..d8fdbce92f 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XCardSwitchButton.java @@ -5,7 +5,6 @@ package com.fr.design.designer.creator.cardlayout; import com.fr.base.BaseUtils; import com.fr.base.GraphHelper; -import com.fr.base.background.ColorBackground; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.models.SelectionModel; @@ -34,9 +33,19 @@ import com.fr.general.Inter; import com.fr.general.cardtag.TemplateStyle; import com.fr.stable.unit.PT; -import javax.swing.*; +import javax.swing.Action; +import javax.swing.Icon; +import javax.swing.JComponent; +import javax.swing.JOptionPane; +import javax.swing.JPopupMenu; +import javax.swing.SwingUtilities; import javax.swing.plaf.basic.BasicLabelUI; -import java.awt.*; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.geom.Rectangle2D; import java.util.ArrayList; @@ -62,11 +71,8 @@ public class XCardSwitchButton extends XButton { private static final int MIN_SIZE = 1; // 删除按钮识别区域偏移量 - private static final int RIGHT_OFFSET = 15; - private static final int TOP_OFFSET = 15; - - //这边先不计算button的高度,涉及到layout那边的整体高度,先用之前的固定高度 - private static final int DEFAULT_BUTTON_HEIGHT = 36; + private static final int CLOSE_ICON_RIGHT_OFFSET = 15; + private static final int CLOSE_ICON_TOP_OFFSET = 15; // tab按钮里的字体因为按钮内部的布局看起来比正常的要小,加个调整量 private static final int FONT_SIZE_ADJUST = 2; @@ -74,13 +80,12 @@ public class XCardSwitchButton extends XButton { //文字竖排时用来计算文字大小 private static final int RESLUTION = 120; - private static final int DOTSLINESPACE = 6; private XWCardLayout cardLayout; private XWCardTagLayout tagLayout; private Background selectBackground; - private boolean isCustomStyle; + private UILabel label; private Icon closeIcon = MOUSE_CLOSE; @@ -101,14 +106,6 @@ public class XCardSwitchButton extends XButton { this.cardLayout = cardLayout; } - public boolean isCustomStyle() { - return isCustomStyle; - } - - public void setCustomStyle(boolean customStyle) { - isCustomStyle = customStyle; - } - public Background getSelectBackground() { return selectBackground; } @@ -157,8 +154,7 @@ public class XCardSwitchButton extends XButton { } //获取当前tab的index - XCardSwitchButton button = this; - CardSwitchButton currentButton = (CardSwitchButton) button.toData(); + CardSwitchButton currentButton = (CardSwitchButton) this.toData(); int index = currentButton.getIndex(); int maxIndex = cardLayout.getComponentCount() - 1; @@ -169,14 +165,13 @@ public class XCardSwitchButton extends XButton { deleteTabLayout(selectionModel, designer); return; } - deleteCard(button,index); - this.tagLayout.adjustComponentWidth(); + deleteCard(this, index); designer.fireTargetModified(); LayoutUtils.layoutRootContainer(designer.getRootComponent()); FormHierarchyTreePane.getInstance().refreshRoot(); return; } - + //将当前tab按钮改为选中状态 changeButtonState(index); @@ -222,7 +217,7 @@ public class XCardSwitchButton extends XButton { } //删除card,同时修改其他switchbutton和tabfit的index - private void deleteCard(XCardSwitchButton button,int index){ + private void deleteCard(XCardSwitchButton button, int index){ String titleName = button.getContentLabel().getText(); int value = JOptionPane.showConfirmDialog(null, Inter.getLocText("FR-Designer_ConfirmDialog_Content") + "“" + titleName + "”", Inter.getLocText("FR-Designer_ConfirmDialog_Title"), JOptionPane.YES_NO_OPTION); @@ -292,18 +287,18 @@ public class XCardSwitchButton extends XButton { int width = button.getWidth(); // 鼠标进入按钮右侧删除图标区域 - double recX = position.getX() + titlePoint.getX() + (width - RIGHT_OFFSET); - double recY = position.getY() + titlePoint.getY() + TOP_OFFSET; + double recX = position.getX() + titlePoint.getX() + (width - CLOSE_ICON_RIGHT_OFFSET); + double recY = position.getY() + titlePoint.getY() + CLOSE_ICON_TOP_OFFSET; - return (recX < ex && ex < recX + RIGHT_OFFSET && ey < recY && ey > position.getY()); + return (recX < ex && ex < recX + CLOSE_ICON_RIGHT_OFFSET && ey < recY && ey > position.getY()); } //将当前switchButton改为选中状态 - private void changeButtonState(int index){ - for(int i=0;i height - textHeight && i < verticalTextList.size()-1) { - textY -= 10; - paintDots(g2d, textY, (width - fm.stringWidth(paint_str)) / 2); - break; - } - } - }else{ - super.paint(g, c); - } - } - - public void paintDots(Graphics2D g2d, int startY, int startX){ - for (int i = 0; i < 3; i++) { - String paint_str = "."; - GraphHelper.drawString(g2d, paint_str, startX, startY); - startY += DOTSLINESPACE;// - startY += PT.pt2pix(0, RESLUTION); - } - } + public class CardSwitchBtnLabelUI extends BasicLabelUI { + private static final int DOT_COUNT = 3; + private static final String DOT = "."; + private static final int DOTS_LINESPACE = 6; + private static final int DOTS_HEIGHT = 10; + + @Override + public void paint(Graphics g, JComponent c) { + WCardTagLayout wCardTagLayout = (WCardTagLayout) tagLayout.toData(); + if (ComparatorUtils.equals(wCardTagLayout.getTextDirection(), WTabTextDirection.TEXT_VER_DIRECTION)) { + //绘制文本竖排展示 + paintVerticalText(g); + } else { + super.paint(g, c); + } + } + + private void paintVerticalText(Graphics g) { + Graphics2D g2d = (Graphics2D) g; + int width = XCardSwitchButton.this.getWidth(); + int height = XCardSwitchButton.this.getHeight(); + CardSwitchButton button = (CardSwitchButton) XCardSwitchButton.this.toData(); + String titleText = button.getText(); + java.util.List verticalTextList = new ArrayList(); + StringBuilder titleStringBuf = new StringBuilder(); + WidgetTitle title = getWidgetTitle(); + FRFont font = title.getFrFont(); + FRFont newFont = FRFont.getInstance(font.getName(), font.getStyle(), font.getSize() + FONT_SIZE_ADJUST); + FontMetrics fm = GraphHelper.getFontMetrics(newFont); + for (int i = 0; i < titleText.length(); i++) { + titleStringBuf.append(titleText.charAt(i)); + verticalTextList.add(titleStringBuf.substring(0, titleStringBuf.length())); + titleStringBuf.delete(0, titleStringBuf.length()); + } + int textAscent = fm.getAscent(); + int textHeight = fm.getHeight(); + int textY = 0; + textY += textAscent; + for (int i = 0; i < verticalTextList.size(); i++) { + String paint_str = (String) verticalTextList.get(i); + + GraphHelper.drawString(g2d, paint_str, (width - fm.stringWidth(paint_str)) / 2, textY); + textY += textHeight; + textY += PT.pt2pix(0, RESLUTION); + if (textY > height - textHeight && i < verticalTextList.size() - 1) { + textY -= DOTS_HEIGHT; + paintDots(g2d, textY, (width - fm.stringWidth(paint_str)) / 2); + break; + } + } + } + + public void paintDots(Graphics2D g2d, int startY, int startX) { + for (int i = 0; i < DOT_COUNT; i++) { + GraphHelper.drawString(g2d, DOT, startX, startY); + startY += DOTS_LINESPACE; + startY += PT.pt2pix(0, RESLUTION); + } + } } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java index 4c1a957fc1..adc2031294 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardLayout.java @@ -34,6 +34,8 @@ import com.fr.form.ui.container.cardlayout.WCardTitleLayout; import com.fr.form.ui.container.cardlayout.WTabFitLayout; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; +import com.fr.general.cardtag.DefaultTemplateStyle; +import com.fr.general.cardtag.TemplateStyle; import com.fr.stable.ArrayUtils; import com.fr.stable.Constants; import com.fr.stable.core.PropertyChangeAdapter; @@ -227,12 +229,9 @@ public class XWCardLayout extends XLayoutContainer { private XCardSwitchButton initFirstButton(String widgetName, XWCardTagLayout xTag){ CardSwitchButton firstBtn = new CardSwitchButton(widgetName); firstBtn.setText(Inter.getLocText("FR-Designer_Title") + 0); - firstBtn.setInitialBackground(ColorBackground.getInstance(Color.WHITE)); - firstBtn.setCustomStyle(true); xTag.setCurrentCard(firstBtn); XCardSwitchButton xFirstBtn = new XCardSwitchButton(firstBtn, new Dimension(CardSwitchButton.DEF_WIDTH, -1), this, xTag); xFirstBtn.setBackupParent(xTag); - return xFirstBtn; } @@ -497,4 +496,17 @@ public class XWCardLayout extends XLayoutContainer { initStyle(); } + public void resetTabBackground(TemplateStyle templateStyle){ + for (int i = 0; i < this.getXCreatorCount(); i++) { + XWTabFitLayout xCreator = (XWTabFitLayout)this.getXCreator(i); + WTabFitLayout wTabFitLayout = (WTabFitLayout)xCreator.toData(); + boolean defaultStyle = ComparatorUtils.equals(templateStyle.getStyle(), DefaultTemplateStyle.DEFAULT_TEMPLATE_STYLE); + wTabFitLayout.setInitialBackground(defaultStyle ? null : templateStyle.getTabDefaultBackground()); + wTabFitLayout.setOverBackground(null); + wTabFitLayout.setClickBackground(null); + wTabFitLayout.setCustomStyle(!defaultStyle); + xCreator.checkButonType(); + } + } + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java index 9a648a47cb..0eef782ef2 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWCardTagLayout.java @@ -30,6 +30,7 @@ import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.form.ui.container.cardlayout.WTabFitLayout; import com.fr.general.ComparatorUtils; import com.fr.general.FRFont; +import com.fr.general.cardtag.DefaultTemplateStyle; import javax.swing.border.Border; import java.awt.*; @@ -132,7 +133,14 @@ public class XWCardTagLayout extends XWHorizontalBoxLayout { WTabFitLayout fitLayout = new WTabFitLayout(widgetName, tabFitIndex, currentCard); fitLayout.setTabNameIndex(getTabNameIndex()); XWTabFitLayout tabFitLayout = new XWTabFitLayout(fitLayout, new Dimension()); + WCardTagLayout layout = (WCardTagLayout) this.toData(); + + if(!ComparatorUtils.equals(layout.getTemplateStyle().getStyle(), DefaultTemplateStyle.DEFAULT_TEMPLATE_STYLE)){ + fitLayout.setInitialBackground(layout.getTemplateStyle().getTabDefaultBackground()); + fitLayout.setCustomStyle(true); + } tabFitLayout.setxCardSwitchButton((XCardSwitchButton)this.getComponent(0)); + tabFitLayout.checkButonType(); tabFitLayout.setBackupParent(cardLayout); cardLayout.add(tabFitLayout, widgetName); this.cardLayout.toData().setShowIndex(index); diff --git a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java index 0b32232216..9e1938817c 100644 --- a/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java @@ -1,7 +1,6 @@ package com.fr.design.designer.creator.cardlayout; import com.fr.base.GraphHelper; -import com.fr.base.background.ColorBackground; import com.fr.design.designer.beans.LayoutAdapter; import com.fr.design.designer.beans.adapters.layout.FRTabFitLayoutAdapter; import com.fr.design.designer.beans.models.SelectionModel; @@ -22,7 +21,6 @@ import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.form.ui.container.cardlayout.WTabFitLayout; import com.fr.general.Background; -import com.fr.general.FRLogger; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; import com.fr.stable.core.PropertyChangeAdapter; @@ -104,6 +102,10 @@ public class XWTabFitLayout extends XWFitLayout { super(widget, initSize); } + public WTabFitLayout getWTabFitLayout(){ + return (WTabFitLayout)data; + } + @Override public UIPopupMenu createPopupMenu(FormDesigner formDesigner) { return UIPopupMenu.EMPTY; // 不要菜单 @@ -212,41 +214,32 @@ public class XWTabFitLayout extends XWFitLayout { return crPropertyDescriptors; } - private void checkButonType() { - if (this.xCardSwitchButton == null) { - //假如为空,默认获取第一个tab的cardBtn属性 - try { - xCardSwitchButton = (XCardSwitchButton) ((XWCardMainBorderLayout) this.getTopLayout()).getTitlePart().getTagPart().getComponent(0); - }catch (Exception e){ - FRLogger.getLogger().error(e.getMessage()); - } - return; + public void checkButonType() { + WTabFitLayout wTabFitLayout = ((WTabFitLayout) data); + XCardSwitchButton xCardSwitchButton = this.getxCardSwitchButton(); + if(xCardSwitchButton == null){ + initRelateSwitchButton(); } - boolean isStyle = ((WTabFitLayout) data).isCustomStyle(); - Background bg; - bg = ColorBackground.getInstance(NORMAL_GRAL); CardSwitchButton cardSwitchButton = (CardSwitchButton) this.xCardSwitchButton.toData(); + boolean isStyle = wTabFitLayout.isCustomStyle(); + Background initialBackground = wTabFitLayout.getInitialBackground(); + Background overBackground = wTabFitLayout.getOverBackground(); + Background clickBackground = wTabFitLayout.getClickBackground(); if (!isStyle) { - this.xCardSwitchButton.setCustomStyle(false); - this.xCardSwitchButton.setSelectBackground(bg); + cardSwitchButton.setCustomStyle(false); cardSwitchButton.setInitialBackground(null); cardSwitchButton.setClickBackground(null); cardSwitchButton.setOverBackground(null); } else { - Background initialBackground = cardSwitchButton.getInitialBackground(); - bg = initialBackground == null ? bg : initialBackground; - this.xCardSwitchButton.setSelectBackground(bg); - this.xCardSwitchButton.setCustomStyle(true); cardSwitchButton.setCustomStyle(true); - if (this.initialBackground != null){ - this.xCardSwitchButton.setSelectBackground(this.initialBackground); - cardSwitchButton.setInitialBackground(this.initialBackground); + if (initialBackground != null){ + cardSwitchButton.setInitialBackground(initialBackground); } - if (this.overBackground != null){ - cardSwitchButton.setOverBackground(this.overBackground); + if (overBackground != null){ + cardSwitchButton.setOverBackground(overBackground); } - if (this.clickBackground != null) { - cardSwitchButton.setClickBackground(this.clickBackground); + if (clickBackground != null) { + cardSwitchButton.setClickBackground(clickBackground); } } } @@ -607,24 +600,9 @@ public class XWTabFitLayout extends XWFitLayout { XWCardLayout cardLayout = (XWCardLayout) this.getBackupParent(); XWCardMainBorderLayout mainLayout = (XWCardMainBorderLayout) cardLayout.getBackupParent(); XWCardTitleLayout titleLayout = mainLayout.getTitlePart(); -// //放置tab按钮的tagLayout + //放置tab按钮的tagLayout XWCardTagLayout tagLayout = titleLayout.getTagPart(); tagLayout.setTabsAndAdjust(); - - initialBackground = ((WTabFitLayout) data).getInitialBackground(); - overBackground = ((WTabFitLayout) data).getOverBackground(); - clickBackground = ((WTabFitLayout)data).getClickBackground(); - CardSwitchButton cardSwitchButton = (CardSwitchButton) xCardSwitchButton.toData(); - if(initialBackground != null){ - xCardSwitchButton.setSelectBackground(initialBackground); - cardSwitchButton.setInitialBackground(initialBackground); - } - if(overBackground != null){ - cardSwitchButton.setOverBackground(overBackground); - } - if(clickBackground != null){ - cardSwitchButton.setClickBackground(clickBackground); - } } public void setCardSwitchBtnSize(){ diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java index 2d7b56d67d..9b9343c59d 100644 --- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java +++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java @@ -20,6 +20,8 @@ import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; @@ -56,6 +58,12 @@ public class ComponentTree extends JTree { ComponetTreeMouseListener componetTreeMouseListener = new ComponetTreeMouseListener(this); this.addMouseMotionListener(componetTreeMouseListener); this.addMouseListener(componetTreeMouseListener); + this.addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + designer.dispatchEvent(e); + } + }); } public FormDesigner getDesigner() { diff --git a/designer_form/src/com/fr/design/mainframe/JForm.java b/designer_form/src/com/fr/design/mainframe/JForm.java index 5c42f39a09..f4d5a30b8f 100644 --- a/designer_form/src/com/fr/design/mainframe/JForm.java +++ b/designer_form/src/com/fr/design/mainframe/JForm.java @@ -544,9 +544,9 @@ public class JForm extends JTemplate implements BaseJForm { @Override protected void applyUndoState(FormUndoState u) { try { - //JForm的target重置 - this.setTarget((Form) u.getForm().clone()); if (this.index == FORM_TAB) { + //JForm的target重置 + this.setTarget((Form) u.getForm().clone()); JForm.this.refreshRoot(); this.formDesign.getArea().setAreaSize(u.getAreaSize(), u.getHorizontalValue(), u.getVerticalValue(), u.getWidthValue(), u.getHeightValue(), u.getSlideValue()); //撤销的时候要重新选择的body布局 @@ -554,9 +554,12 @@ public class JForm extends JTemplate implements BaseJForm { formDesign.getRootComponent() == selectedBodyLayout() ? u.getSelectWidgets() : new Widget[]{selectedBodyLayout().toData()})); refreshToolArea(); } else { + // 只在报表块里撤销是不需要修改外部form对象的, 因为编辑的是当前报表块. + // 修改了JForm的Target需要同步修改formDesign的Target. + Form undoForm = (Form) u.getForm().clone(); String widgetName = this.formDesign.getElementCaseContainerName(); //这儿太坑了,u.getForm() 与 getTarget内容不一样 - FormElementCaseProvider dataTable = getTarget().getElementCaseByName(widgetName); + FormElementCaseProvider dataTable = undoForm.getElementCaseByName(widgetName); this.reportComposite.setSelectedWidget(dataTable); //下面这句话是防止撤销之后直接退出编辑再编辑撤销的东西会回来,因为撤销不会保存EC formDesign.setElementCase(dataTable); diff --git a/designer_form/src/com/fr/design/widget/ui/designer/component/TabFitLayoutBackgroundPane.java b/designer_form/src/com/fr/design/widget/ui/designer/component/TabFitLayoutBackgroundPane.java index b2c79c9223..94194a232b 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/component/TabFitLayoutBackgroundPane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/component/TabFitLayoutBackgroundPane.java @@ -1,6 +1,7 @@ package com.fr.design.widget.ui.designer.component; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.mainframe.widget.accessibles.AccessibleTabBackgroundEditor; import com.fr.design.widget.component.BackgroundCompPane; import com.fr.form.ui.container.cardlayout.WTabFitLayout; import com.fr.general.Background; @@ -15,33 +16,47 @@ public class TabFitLayoutBackgroundPane extends BackgroundCompPane { - private AccessibleTabBackgroundEditor backgroundEditor; + private AccessibleTabPaneBackgroundEditor backgroundEditor; private FRFontPane frFontPane; private UIButtonGroup displayPositionGroup; private UIButtonGroup textDirectionGroup; @@ -49,7 +50,7 @@ public class WCardTagLayoutDefinePane extends AbstractDataModify public void initComponent() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); - backgroundEditor = new AccessibleTabBackgroundEditor(); + backgroundEditor = new AccessibleTabPaneBackgroundEditor(); templateStyleEditor = new AccessibleTemplateStyleEditor(); double f = TableLayout.FILL; double p = TableLayout.PREFERRED; @@ -59,7 +60,7 @@ public class WCardTagLayoutDefinePane extends AbstractDataModify UILabel fontLabel = new UILabel(Inter.getLocText("FR-Designer_Font")); fontLabel.setVerticalAlignment(SwingConstants.TOP); - frFontPane = new FRFontPane(){ + frFontPane = new FRFontPane() { protected JPanel createRightPane() { double p = TableLayout.PREFERRED; double f = TableLayout.FILL; @@ -73,7 +74,7 @@ public class WCardTagLayoutDefinePane extends AbstractDataModify } }; - displayPositionGroup = new UIButtonGroup(WTabDisplayPosition.getStringArray()){ + displayPositionGroup = new UIButtonGroup(WTabDisplayPosition.getStringArray()) { @Override public boolean shouldResponseNameListener() { return true; @@ -105,7 +106,7 @@ public class WCardTagLayoutDefinePane extends AbstractDataModify public void populateBean(WCardTagLayout ob) { //标题背景和字体属性设置在WCardLayout上做兼容 XLayoutContainer topLayout = creator.getTopLayout(); - LayoutBorderStyle layoutBorderStyle = ((XWCardMainBorderLayout)topLayout).getCardPart().toData().getBorderStyle(); + LayoutBorderStyle layoutBorderStyle = ((XWCardMainBorderLayout) topLayout).getCardPart().toData().getBorderStyle(); displayPositionGroup.setSelectedIndex(ob.getDisplayPosition().getType()); textDirectionGroup.setSelectedIndex(ob.getTextDirection().getType()); @@ -121,22 +122,27 @@ public class WCardTagLayoutDefinePane extends AbstractDataModify public WCardTagLayout updateBean() { //标题背景和字体属性设置在WCardLayout上做兼容 XLayoutContainer topLayout = creator.getTopLayout(); - LayoutBorderStyle layoutBorderStyle = ((XWCardMainBorderLayout)topLayout).getCardPart().toData().getBorderStyle(); + XWCardLayout xCardLayout = ((XWCardMainBorderLayout) topLayout).getCardPart(); + LayoutBorderStyle layoutBorderStyle = xCardLayout.toData().getBorderStyle(); FRFont frFont = layoutBorderStyle.getTitle().getFrFont() == null ? FRFont.getInstance() : layoutBorderStyle.getTitle().getFrFont(); layoutBorderStyle.getTitle().setFrFont(frFontPane.update(frFont)); WCardTagLayout layout = (WCardTagLayout) creator.toData(); boolean isHori = displayPositionGroup.getSelectedIndex() == WTabDisplayPosition.TOP_POSITION.getType() || displayPositionGroup.getSelectedIndex() == WTabDisplayPosition.BOTTOM_POSITION.getType(); - if(ComparatorUtils.equals(getGlobalName(), Inter.getLocText("FR-Designer_Tab_Style_Template"))){ + if (ComparatorUtils.equals(getGlobalName(), Inter.getLocText("FR-Designer_Tab_Style_Template"))) { layout.setDisplayPosition(WTabDisplayPosition.parse(displayPositionGroup.getSelectedIndex())); - textDirectionGroup.setSelectedIndex(isHori? WTabTextDirection.TEXT_HORI_DERECTION.getType():WTabTextDirection.TEXT_VER_DIRECTION.getType()); + textDirectionGroup.setSelectedIndex(isHori ? WTabTextDirection.TEXT_HORI_DERECTION.getType() : WTabTextDirection.TEXT_VER_DIRECTION.getType()); + layout.setHgap(isHori ? WCardTagLayout.DESIGNER_DEFAULT_GAP : 0); + layout.setVgap(isHori ? 0 : WCardTagLayout.DESIGNER_DEFAULT_GAP); } layout.setTextDirection(WTabTextDirection.parse(textDirectionGroup.getSelectedIndex())); TemplateStyle templateStyle = (TemplateStyle) templateStyleEditor.getValue(); - if(!ComparatorUtils.equals(layout.getTemplateStyle(), templateStyle)){ + if (!ComparatorUtils.equals(layout.getTemplateStyle(), templateStyle)) { backgroundEditor.setValue(templateStyle.getDefaultBackground()); layoutBorderStyle.getTitle().setBackground(templateStyle.getDefaultBackground()); + //重置内部tab的默认背景 + xCardLayout.resetTabBackground(templateStyle); layout.setTemplateStyle(templateStyle); - }else{ + } else { layoutBorderStyle.getTitle().setBackground((Background) backgroundEditor.getValue()); } diff --git a/designer_form/src/com/fr/design/widget/ui/designer/layout/WTabFitLayoutDefinePane.java b/designer_form/src/com/fr/design/widget/ui/designer/layout/WTabFitLayoutDefinePane.java index 77452e07b9..46906925f0 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/layout/WTabFitLayoutDefinePane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/layout/WTabFitLayoutDefinePane.java @@ -78,12 +78,12 @@ public class WTabFitLayoutDefinePane extends AbstractDataModify { @Override public void populateBean(WTabFitLayout ob) { - borderStyle.populate(ob); paddingBoundPane.populate(ob); componentInterval.setValue(ob.getCompInterval()); if(ob.getCurrentCard() == null){ ob.setCurrentCard(getRelateSwitchButton(ob)); } + borderStyle.populate(ob); titleField.setText(ob.getCurrentCard().getText()); }