diff --git a/designer-base/src/main/java/com/fine/theme/utils/FineLayoutBuilder.java b/designer-base/src/main/java/com/fine/theme/utils/FineLayoutBuilder.java index b9144f31ef..7115b3afea 100644 --- a/designer-base/src/main/java/com/fine/theme/utils/FineLayoutBuilder.java +++ b/designer-base/src/main/java/com/fine/theme/utils/FineLayoutBuilder.java @@ -4,8 +4,8 @@ import com.fine.swing.ui.layout.Column; import com.fine.swing.ui.layout.Layouts; import com.fine.swing.ui.layout.Row; import com.fine.swing.ui.layout.Spacer; +import com.fr.design.constants.LayoutConstants; import com.fr.design.foldablepane.UIExpandablePane; -import com.fr.design.gui.ilable.UILabel; import com.fr.log.FineLoggerFactory; import com.fr.stable.collections.combination.Pair; @@ -75,7 +75,7 @@ public class FineLayoutBuilder { Row row = new Row(); List visibleComponents = Arrays.stream(componentArray) .filter(com -> com != null && com.isVisible()).collect(Collectors.toList()); - if (visibleComponents.size() >= 1) { + if (!visibleComponents.isEmpty()) { // 仅当存在可见组件时处理布局 dealWithVisibleComponents(weight, column, componentArray, row, visibleComponents); } @@ -87,6 +87,17 @@ public class FineLayoutBuilder { return new JPanel(); } + /** + * 典型的左右网格布局,竖向间距为典型间距,标签及组件比例采用典型比例 + * + * @param components 组件,两列多行 + * @return 面板 + */ + public static JPanel commonLeftRightLayout(Component[][] components) { + return compatibleTableLayout(LayoutConstants.VERTICAL_GAP, components, + new double[]{LayoutConstants.LEFT_WEIGHT, LayoutConstants.RIGHT_WEIGHT}); + } + private static void dealWithVisibleComponents(double[] weight, Column column, Component[] value, Row row, List components) { if (components.size() == 1 && value[0] != null) { // 仅存在首个元素,则该元素自适应占满整行 diff --git a/designer-base/src/main/java/com/fr/design/file/DefaultTemplateTreeDefineProcessor.java b/designer-base/src/main/java/com/fr/design/file/DefaultTemplateTreeDefineProcessor.java index 728b915163..af018d032f 100644 --- a/designer-base/src/main/java/com/fr/design/file/DefaultTemplateTreeDefineProcessor.java +++ b/designer-base/src/main/java/com/fr/design/file/DefaultTemplateTreeDefineProcessor.java @@ -1,8 +1,8 @@ package com.fr.design.file; import com.fine.theme.icon.LazyIcon; +import com.fine.theme.utils.FineComponentsFactory; import com.fine.theme.utils.FineUIScale; -import com.fine.theme.utils.FineUIStyle; import com.formdev.flatlaf.util.ScaledEmptyBorder; import com.fr.design.actions.UpdateAction; import com.fr.design.actions.file.DelFileAction; @@ -33,7 +33,6 @@ import com.fr.stable.StringUtils; import com.fr.stable.collections.CollectionUtils; import com.fr.stable.project.ProjectConstants; -import javax.swing.BorderFactory; import javax.swing.JDialog; import javax.swing.JOptionPane; import javax.swing.JPanel; @@ -42,15 +41,11 @@ import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; -import static com.fine.swing.ui.layout.Layouts.cell; -import static com.fine.swing.ui.layout.Layouts.flex; -import static com.fine.swing.ui.layout.Layouts.row; import static javax.swing.JOptionPane.WARNING_MESSAGE; import static javax.swing.JOptionPane.YES_NO_OPTION; @@ -380,28 +375,16 @@ public class DefaultTemplateTreeDefineProcessor extends AbstractTemplateTreeDefi // 确认按钮,默认就可用 confirmButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Confirm")); - FineUIStyle.setStyle(confirmButton, FineUIStyle.STYLE_PRIMARY); - confirmButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - confirmClose(); - } - }); + confirmButton.addActionListener(e -> confirmClose()); confirmButton.setEnabled(true); - // 取消按钮 UIButton cancelButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Cancel")); - cancelButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - dispose(); - } - }); + cancelButton.addActionListener(e -> dispose()); - this.add(row(8, flex(), cell(confirmButton), cell(cancelButton)) - .with(it -> it.setBorder(new ScaledEmptyBorder(0, 0, 10, 10))).getComponent(), BorderLayout.SOUTH); + JPanel buttonPane = FineComponentsFactory.createConfirmCancelButtonPane(confirmButton, cancelButton); + buttonPane.setBorder(new ScaledEmptyBorder(0, 10, 10, 10)); + this.add(buttonPane, BorderLayout.SOUTH); this.setSize(FineUIScale.scale(new Dimension(660, 600))); this.setTitle(Toolkit.i18nText("Fine-Design_Basic_Move")); diff --git a/designer-base/src/main/java/com/fr/design/file/TemplateDirTreePane.java b/designer-base/src/main/java/com/fr/design/file/TemplateDirTreePane.java index 08531b895c..1a9fec015c 100644 --- a/designer-base/src/main/java/com/fr/design/file/TemplateDirTreePane.java +++ b/designer-base/src/main/java/com/fr/design/file/TemplateDirTreePane.java @@ -1,6 +1,7 @@ package com.fr.design.file; import com.fr.base.FRContext; +import com.fr.design.border.FineBorderFactory; import com.fr.design.gui.itree.filetree.TemplateDirTree; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; import com.fr.design.i18n.Toolkit; @@ -11,11 +12,9 @@ import com.fr.file.filetree.IOFileNodeFilter; import com.fr.log.FineLoggerFactory; import com.fr.stable.ArrayUtils; -import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.tree.TreePath; import java.awt.BorderLayout; -import java.awt.Color; /** * 目录树面板 @@ -35,7 +34,7 @@ public class TemplateDirTreePane extends JPanel { public TemplateDirTreePane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); - this.setBorder(BorderFactory.createLineBorder(Color.gray)); + this.setBorder(FineBorderFactory.createWrappedRoundBorder()); templateDirTree = new TemplateDirTree(); remindPane = new TemplateDirSearchRemindPane(getTemplateDirTree()); diff --git a/designer-base/src/main/java/com/fr/design/gui/itree/checkboxtree/CheckBoxTreeCellRenderer.java b/designer-base/src/main/java/com/fr/design/gui/itree/checkboxtree/CheckBoxTreeCellRenderer.java index 3a92b44692..d2592aaaa8 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itree/checkboxtree/CheckBoxTreeCellRenderer.java +++ b/designer-base/src/main/java/com/fr/design/gui/itree/checkboxtree/CheckBoxTreeCellRenderer.java @@ -17,7 +17,6 @@ import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JTree; import javax.swing.border.Border; -import javax.swing.border.EmptyBorder; import javax.swing.tree.TreeCellRenderer; import javax.swing.tree.TreePath; import java.awt.BorderLayout; @@ -65,6 +64,7 @@ public class CheckBoxTreeCellRenderer extends NullPanel implements TreeCellRende add(_checkBox, BorderLayout.WEST); JPanel gapPanel = new JPanel(); gapPanel.setPreferredSize(FineUIScale.scale(new Dimension(4, 20))); + gapPanel.setOpaque(false); add(gapPanel, BorderLayout.CENTER); _actualTreeRenderer = renderer; } @@ -80,7 +80,7 @@ public class CheckBoxTreeCellRenderer extends NullPanel implements TreeCellRende public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { _checkBox.setPreferredSize(FineUIScale.scale(new Dimension(PROTOTYPE.getPreferredSize().width, 0))); setComponentOrientation(tree.getComponentOrientation()); - + setOpaque(false); TreePath path = tree.getPathForRow(row); handleCheckBox(tree, path); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/pane/TemplateDirTreeSearchPane.java b/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/pane/TemplateDirTreeSearchPane.java index 73d909ae81..11ab4a26ea 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/pane/TemplateDirTreeSearchPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/pane/TemplateDirTreeSearchPane.java @@ -1,8 +1,8 @@ package com.fr.design.mainframe.manager.search.searcher.control.pane; +import com.formdev.flatlaf.util.ScaledEmptyBorder; import com.fr.design.data.datapane.management.search.pane.FineSearchPane; import com.fr.design.file.TemplateDirTreePane; -import com.fr.design.gui.itextfield.UITextField; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.manager.search.TemplateDirTreeSearchManager; @@ -10,15 +10,10 @@ import com.fr.design.search.event.TreeSearchStatusChangeEvent; import com.fr.design.search.event.TreeSearchStatusChangeListener; import com.fr.stable.StringUtils; -import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Insets; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; @@ -29,11 +24,6 @@ import java.awt.event.MouseEvent; */ public class TemplateDirTreeSearchPane extends JPanel implements TreeSearchStatusChangeListener { - /** - * 搜索输入框 - */ - private UITextField searchTextField; - /** * 搜索面板 */ @@ -43,14 +33,14 @@ public class TemplateDirTreeSearchPane extends JPanel implements TreeSearchStatu @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { - TemplateDirTreeSearchManager.getInstance().startSearch(searchTextField.getText()); + TemplateDirTreeSearchManager.getInstance().startSearch(searchPane.getText()); } } }; public TemplateDirTreeSearchPane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); - this.setBorder(BorderFactory.createEmptyBorder(10, 15, 0, 10)); + this.setBorder(new ScaledEmptyBorder(10, 10, 0, 10)); initSearchPane(); add(searchPane, BorderLayout.CENTER); TemplateDirTreeSearchManager.getInstance().registerTreeSearchStatusChangeListener(this); @@ -94,7 +84,7 @@ public class TemplateDirTreeSearchPane extends JPanel implements TreeSearchStatu } private void dealWithTextChange() { - if (StringUtils.isEmpty(searchTextField.getText()) && TemplateDirTreeSearchManager.getInstance().isInSearchMode()) { + if (StringUtils.isEmpty(searchPane.getText()) && TemplateDirTreeSearchManager.getInstance().isInSearchMode()) { // 如果是搜索模式下,看作是用户删除输入框文字,仅复原TemplateTreePane TemplateDirTreeSearchManager.getInstance().restoreTreePane(); TemplateDirTreePane.getInstance().refreshDockingView(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java index 2224bb1aec..3b0022e2b4 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/EditFileVersionDialog.java @@ -1,5 +1,11 @@ package com.fr.design.mainframe.vcs.ui; +import com.fine.swing.ui.layout.Column; +import com.fine.theme.utils.FineComponentsFactory; +import com.fine.theme.utils.FineLayoutBuilder; +import com.fine.theme.utils.FineUIScale; +import com.formdev.flatlaf.util.ScaledEmptyBorder; +import com.fr.design.border.FineBorderFactory; import com.fr.design.dialog.UIDialog; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icontainer.UIScrollPane; @@ -10,7 +16,6 @@ import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.log.FineLoggerFactory; import com.fr.report.entity.VcsEntity; import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; @@ -19,7 +24,7 @@ import com.fr.workspace.server.vcs.VcsOperator; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Component; -import java.awt.FlowLayout; +import java.awt.Dimension; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -47,7 +52,7 @@ public class EditFileVersionDialog extends UIDialog { initComponents(); setModal(true); setTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Vcs_Save_Version")); - setSize(300, 220); + setSize(FineUIScale.scale(new Dimension(300, 220))); setResizable(false); GUICoreUtils.centerWindow(this); @@ -55,15 +60,20 @@ public class EditFileVersionDialog extends UIDialog { private void initComponents() { + Column centerColumn = new Column(); + centerColumn.setSpacing(10); + add(centerColumn, BorderLayout.CENTER); + JPanel fontPane = new JPanel(new BorderLayout()); - UILabel fontLabel = new UILabel(" " + Toolkit.i18nText("Fine-Design_Vcs_Version_Message") + ":"); + + UILabel fontLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Version_Message")); fontLabel.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_Version_Message")); fontPane.add(fontLabel, BorderLayout.NORTH); msgTestArea.setBorder(null); - UIScrollPane scrollPane = new UIScrollPane(msgTestArea); - - UILabel versionTip = new UILabel(" " + Toolkit.i18nText("Fine-Design_Vcs_Version_Number") + ":"); + JPanel scrollPane = FineLayoutBuilder.asBorderLayoutWrapped(new UIScrollPane(msgTestArea)); + scrollPane.setBorder(FineBorderFactory.createWrappedRoundBorder()); + UILabel versionTip = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Version_Number")); versionTip.setToolTipText(Toolkit.i18nText("Fine-Design_Vcs_Version_Number")); Component[][] components = new Component[][]{ new Component[]{versionTip, versionLabel}, @@ -72,16 +82,16 @@ public class EditFileVersionDialog extends UIDialog { double[] rowSizes = new double[]{25, 100}; double[] columnSizes = new double[]{70, 200}; - add(TableLayoutHelper.createTableLayoutPane(components, rowSizes, columnSizes), BorderLayout.CENTER); - - JPanel buttonPane = new JPanel(new FlowLayout(FlowLayout.RIGHT)); - add(buttonPane, BorderLayout.SOUTH); + JPanel pane = TableLayoutHelper.createTableLayoutPane(components, rowSizes, columnSizes); UIButton ok = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_OK")); UIButton cancel = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Utils_Design_Action_Cancel")); + JPanel buttonPane = FineComponentsFactory.createConfirmCancelButtonPane(ok, cancel); + + centerColumn.add(pane); + centerColumn.add(buttonPane); + centerColumn.setBorder(new ScaledEmptyBorder(10, 10, 10, 10)); - buttonPane.add(ok); - buttonPane.add(cancel); ok.addActionListener(new ActionListener() { @Override diff --git a/designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLightLaf.properties b/designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLightLaf.properties index 5b3fbc9c06..aafdbdf666 100644 --- a/designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLightLaf.properties +++ b/designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLightLaf.properties @@ -1128,7 +1128,7 @@ Tree.selectionInactiveBackground = @selectionBackground Tree.selectionInactiveForeground = @selectionForeground Tree.textBackground = $Tree.background Tree.textForeground = $Tree.foreground -Tree.selectionBorderColor = @cellFocusColor +Tree.selectionBorderColor = #00000000 Tree.dropCellBackground = @dropCellBackground Tree.dropCellForeground = @dropCellForeground Tree.dropLineColor = @dropLineColor