Browse Source

Pull request #14517: REPORT-127437:【Newui】

Merge in DESIGN/design from ~ZONGYU.WANG/design:newui to newui

* commit 'f3b3e04363c953b49cfd99443c8fc1eb69c62fd9':
  REPORT-127437 fix:布局,背景颜色问题修复
  REPORT-127437 fix: 调整 jtable 滚动条/UI布局/表身组件 的一些样式
newui
Zongyu.Wang-王宗雨 6 months ago
parent
commit
e3a7c796f1
  1. 98
      designer-base/src/main/java/com/fine/theme/light/ui/FineTableHeaderUI.java
  2. 40
      designer-base/src/main/java/com/fine/theme/light/ui/FineTableScrollBarPaneUI.java
  3. 4
      designer-base/src/main/java/com/fine/theme/utils/FineUIStyle.java
  4. 21
      designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionTableProcedurePane.java
  5. 3
      designer-base/src/main/java/com/fr/design/data/datapane/preview/CopyableJTable.java
  6. 28
      designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java
  7. 12
      designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/PreviewTableDesensitizationPane.java
  8. 50
      designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTableModel.java
  9. 23
      designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java
  10. 4
      designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/MaxMemRowCountPanel.java
  11. 9
      designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/ProcedureDataPane.java
  12. 5
      designer-base/src/main/java/com/fr/design/dialog/BasicPane.java
  13. 25
      designer-base/src/main/java/com/fr/design/gui/icombobox/UIComboBoxRenderer.java
  14. 35
      designer-base/src/main/java/com/fr/design/gui/icombocheckbox/UIComboCheckBox.java
  15. 7
      designer-base/src/main/java/com/fr/design/gui/ilist/TableViewList.java
  16. 3
      designer-base/src/main/java/com/fr/design/gui/itable/SortableJTable.java
  17. 4
      designer-base/src/main/java/com/fr/design/gui/itable/TableSorter.java
  18. 14
      designer-base/src/main/java/com/fr/design/gui/itableeditorpane/ParameterTableModel.java
  19. 113
      designer-base/src/main/java/com/fr/design/gui/itableeditorpane/UITableEditorPane.java
  20. 22
      designer-base/src/main/java/com/fr/design/layout/FRGUIPaneFactory.java
  21. 2
      designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java
  22. 2
      designer-base/src/main/java/com/fr/design/mainframe/DottedLine.java
  23. 7
      designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java
  24. 3
      designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java
  25. 4
      designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ToolTipTableCellRenderer.java
  26. 1
      designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java
  27. 2
      designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsOperatorPane.java
  28. 1
      designer-base/src/main/java/com/fr/design/style/AbstractSelectBox.java
  29. 19
      designer-base/src/main/java/com/fr/design/style/FormatPane.java
  30. 3
      designer-base/src/main/java/com/fr/design/style/background/impl/ImageBackgroundPane.java
  31. 3
      designer-base/src/main/java/com/fr/design/style/color/DetailColorSelectPane.java
  32. 44
      designer-base/src/main/java/com/fr/design/write/submit/DBManipulationPane.java
  33. 29
      designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLightLaf.properties
  34. 111
      designer-base/src/test/java/com/fr/design/gui/storybook/components/TableStoryBoard.java
  35. 2
      designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java
  36. 1
      designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceSouthPanel.java
  37. 13
      designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java
  38. 1
      designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditor.java
  39. 30
      designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditorPane.java
  40. 7
      designer-realize/src/main/java/com/fr/design/cell/smartaction/SmartJTablePane.java
  41. 3
      designer-realize/src/main/java/com/fr/design/condition/ForeGroundPane.java
  42. 3
      designer-realize/src/main/java/com/fr/design/condition/PaddingPane.java
  43. 3
      designer-realize/src/main/java/com/fr/design/condition/PagePane.java
  44. 25
      designer-realize/src/main/java/com/fr/design/headerfooter/HeaderFooterEditPane.java
  45. 11
      designer-realize/src/main/java/com/fr/design/headerfooter/HeaderFooterPane.java
  46. 23
      designer-realize/src/main/java/com/fr/design/report/NewReportBackgroundPane.java
  47. 23
      designer-realize/src/main/java/com/fr/design/report/ReportColumnsPane.java
  48. 42
      designer-realize/src/main/java/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java
  49. 8
      designer-realize/src/main/java/com/fr/design/write/submit/SmartInsertDBManipulationPane.java

98
designer-base/src/main/java/com/fine/theme/light/ui/FineTableHeaderUI.java

@ -0,0 +1,98 @@
package com.fine.theme.light.ui;
import com.fine.theme.utils.FineUIStyle;
import com.formdev.flatlaf.ui.FlatTableHeaderUI;
import com.fr.stable.StringUtils;
import sun.swing.DefaultLookup;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.UIResource;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;
import java.awt.Component;
import java.awt.Graphics;
/**
* 应用于 JTable 的UI
*
* @author lemon
* @since
* Created on
*/
public class FineTableHeaderUI extends FlatTableHeaderUI {
@Override
public void installUI(JComponent c) {
super.installUI(c);
JTableHeader header = (JTableHeader) c;
header.setDefaultRenderer(new TableHeaderRenderer());
JTable table = header.getTable();
FineUIStyle.setStyle(table, FineUIStyle.DEFAULT_TABLE);
table.getTableHeader().getTable().setDefaultRenderer(Object.class, new TableRenderer());
}
@Override
public void paint(Graphics g, JComponent c) {
super.paint(g, c);
}
/**
* 表头 render
*/
public static class TableHeaderRenderer extends DefaultTableCellRenderer implements UIResource {
public TableHeaderRenderer() {
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Border border = DefaultLookup.getBorder(this, this.ui, "TableHeader.cellBorder");
this.setText(value == null ? "" : value.toString());
this.setHorizontalAlignment(SwingConstants.LEFT);
this.setBorder(border);
return this;
}
}
/**
* UI
* @param c
* @return
*/
public static ComponentUI createUI(JComponent c) {
return new FineTableHeaderUI();
}
/**
* 表身 render
*/
public static class TableRenderer extends DefaultTableCellRenderer {
public TableRenderer() {
setHorizontalAlignment(SwingConstants.LEFT);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Border border;
if (column == table.getColumnCount() - 1) {
border = BorderFactory.createCompoundBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, UIManager.getColor("defaultBorderColor")),
UIManager.getBorder("Table.cellNoFocusBorder"));
} else {
border = BorderFactory.createCompoundBorder(BorderFactory.createMatteBorder(0, 0, 1, 1, UIManager.getColor("defaultBorderColor")),
UIManager.getBorder("Table.cellNoFocusBorder"));
}
setBackground(UIManager.getColor("Table.background"));
setText(value == null ? StringUtils.BLANK : String.valueOf(value));
setBorder(border);
return this;
}
}
}

40
designer-base/src/main/java/com/fine/theme/light/ui/FineTableScrollBarPaneUI.java

@ -0,0 +1,40 @@
package com.fine.theme.light.ui;
import com.formdev.flatlaf.ui.FlatScrollBarUI;
import javax.swing.JComponent;
import javax.swing.JTable;
import java.awt.Graphics;
import java.awt.Rectangle;
/**
* 应用于 JTable 的垂直滚动条UI
*
* @author lemon
* @since
* Created on 2024/08/11
*/
public class FineTableScrollBarPaneUI extends FlatScrollBarUI {
private final JTable table;
public FineTableScrollBarPaneUI(JTable table) {
this.table = table;
}
@Override
protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) {
super.paintTrack(g, c, trackBounds);
}
@Override
protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) {
// 确保滚动条滑块不会超过表头区域
Rectangle headerRect = table.getTableHeader().getBounds();
int headerHeight = headerRect.height;
thumbBounds.y = Math.max(thumbBounds.y, headerHeight);
super.paintThumb(g, c, thumbBounds);
}
}

4
designer-base/src/main/java/com/fine/theme/utils/FineUIStyle.java

@ -44,6 +44,10 @@ public interface FineUIStyle {
String PASTEL_BUTTON = "pastelButton"; String PASTEL_BUTTON = "pastelButton";
String BREADCRUMB_BUTTON = "breadcrumbButton"; String BREADCRUMB_BUTTON = "breadcrumbButton";
String DEFAULT_TABLE = "defaultTable";
String WHITE_BUTTON = "whiteButton";
String ORIGINAL_BUTTON = "originalButton";
/** /**
* 添加组件的样式类类似css该方法会接在原样式后方 * 添加组件的样式类类似css该方法会接在原样式后方

21
designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionTableProcedurePane.java

@ -5,8 +5,6 @@ import com.fine.theme.light.ui.FineRoundBorder;
import com.fine.theme.utils.FineUIScale; import com.fine.theme.utils.FineUIScale;
import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.ui.FlatUIUtils;
import com.formdev.flatlaf.util.ScaledEmptyBorder; import com.formdev.flatlaf.util.ScaledEmptyBorder;
import com.fr.base.BaseUtils;
import com.fr.base.svg.IconUtils;
import com.fr.data.core.db.TableProcedure; import com.fr.data.core.db.TableProcedure;
import com.fr.data.impl.AbstractDatabaseConnection; import com.fr.data.impl.AbstractDatabaseConnection;
import com.fr.data.impl.Connection; import com.fr.data.impl.Connection;
@ -72,7 +70,7 @@ public class ConnectionTableProcedurePane extends BasicPane {
} }
private void init(SwitchableTableDataPane parent) { private void init(SwitchableTableDataPane parent) {
this.setLayout(new BorderLayout(4, 10)); this.setLayout(FRGUIPaneFactory.createScaledBorderLayout(4, 10));
// 初始化数据连接下拉框 // 初始化数据连接下拉框
initConnectionComboBox(parent); initConnectionComboBox(parent);
// 初始化中间的面板 // 初始化中间的面板
@ -84,8 +82,7 @@ public class ConnectionTableProcedurePane extends BasicPane {
} }
private JPanel initCenterPane() { private JPanel initCenterPane() {
JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel centerPane = FRGUIPaneFactory.createScaledBorderLayout_S_Pane(0, 6);
centerPane.setLayout(new BorderLayout(0, 5));
// 搜索面板 // 搜索面板
centerPane.add(createSearchPane(), BorderLayout.NORTH); centerPane.add(createSearchPane(), BorderLayout.NORTH);
// 数据库表视图面板 // 数据库表视图面板
@ -156,8 +153,7 @@ public class ConnectionTableProcedurePane extends BasicPane {
}); });
UIScrollPane tableViewListPane = new UIScrollPane(tableViewList); UIScrollPane tableViewListPane = new UIScrollPane(tableViewList);
tableViewListPane.setBorder(new UIRoundedBorder(UIManager.getColor("defaultBorderColor"), 1, UIConstants.ARC)); tableViewListPane.setBorder(new UIRoundedBorder(UIManager.getColor("defaultBorderColor"), 1, UIConstants.ARC));
JPanel tableViewBorderPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel tableViewBorderPane = FRGUIPaneFactory.createScaledBorderLayout_S_Pane(0, 10);
tableViewBorderPane.setLayout(new BorderLayout(0, 5));
tableViewBorderPane.add(tableViewListPane, BorderLayout.CENTER); tableViewBorderPane.add(tableViewListPane, BorderLayout.CENTER);
JPanel checkBoxgroupPane = createCheckBoxgroupPane(); JPanel checkBoxgroupPane = createCheckBoxgroupPane();
if (checkBoxgroupPane != null) { if (checkBoxgroupPane != null) {
@ -193,19 +189,18 @@ public class ConnectionTableProcedurePane extends BasicPane {
} }
protected JPanel createCheckBoxgroupPane() { protected JPanel createCheckBoxgroupPane() {
JPanel checkBoxgroupPane = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(2); JPanel checkBoxgroupPane = FRGUIPaneFactory.createScaledBorderLayout_S_Pane(30, 2);
checkBoxgroupPane.setLayout(new BorderLayout(20, 0)); JPanel first = FRGUIPaneFactory.createScaledBorderLayout_S_Pane(2, 0);
JPanel first = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
tableCheckBox = new UICheckBox(); tableCheckBox = new UICheckBox();
tableCheckBox.setSelected(true); tableCheckBox.setSelected(true);
tableCheckBox.addActionListener(filter); tableCheckBox.addActionListener(filter);
first.add(tableCheckBox); first.add(tableCheckBox, BorderLayout.WEST);
JPanel second = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); JPanel second = FRGUIPaneFactory.createScaledBorderLayout_S_Pane(4, 0);
viewCheckBox = new UICheckBox(); viewCheckBox = new UICheckBox();
viewCheckBox.setSelected(true); viewCheckBox.setSelected(true);
viewCheckBox.addActionListener(filter); viewCheckBox.addActionListener(filter);
second.add(viewCheckBox); second.add(viewCheckBox, BorderLayout.WEST);
// 根据环境是否为中文设置不同的显示 // 根据环境是否为中文设置不同的显示
if (GeneralContext.isChineseEnv()) { if (GeneralContext.isChineseEnv()) {

3
designer-base/src/main/java/com/fr/design/data/datapane/preview/CopyableJTable.java

@ -7,7 +7,6 @@ import com.fr.log.FineLoggerFactory;
import com.fr.stable.os.OperatingSystem; import com.fr.stable.os.OperatingSystem;
import javax.swing.*; import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader; import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer; import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel; import javax.swing.table.TableColumnModel;
@ -211,8 +210,6 @@ public class CopyableJTable extends SortableJTable {
Component comp = super.prepareRenderer(renderer, row, column); Component comp = super.prepareRenderer(renderer, row, column);
if (isChoose(row, column)) { if (isChoose(row, column)) {
comp.setBackground(selectBackGround); comp.setBackground(selectBackGround);
} else {
comp.setBackground(this.getBackground());
} }
return comp; return comp;
} }

28
designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java

@ -4,7 +4,10 @@
package com.fr.design.data.datapane.preview; package com.fr.design.data.datapane.preview;
import com.fine.theme.icon.LazyIcon; import com.fine.theme.icon.LazyIcon;
import com.fine.theme.light.ui.FineTableHeaderUI;
import com.fine.theme.light.ui.FineTableScrollBarPaneUI;
import com.fine.theme.utils.FineUIScale; import com.fine.theme.utils.FineUIScale;
import com.fine.theme.utils.FineUIStyle;
import com.fine.theme.utils.FineUIUtils; import com.fine.theme.utils.FineUIUtils;
import com.fr.base.TableData; import com.fr.base.TableData;
import com.fr.data.TableDataSource; import com.fr.data.TableDataSource;
@ -25,6 +28,7 @@ import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.dialog.FineJOptionPane; import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.gui.frpane.UITabbedPane; import com.fr.design.gui.frpane.UITabbedPane;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.iprogressbar.AutoProgressBar; import com.fr.design.gui.iprogressbar.AutoProgressBar;
import com.fr.design.gui.itable.SortableJTable; import com.fr.design.gui.itable.SortableJTable;
@ -88,7 +92,7 @@ public class PreviewTablePane extends BasicPane {
private BasicDialog dialog; private BasicDialog dialog;
private SwingWorker worker; private SwingWorker worker;
private UILabel refreshLabel; private UIButton refreshLabel;
private static PreviewTablePane THIS; private static PreviewTablePane THIS;
private EmbeddedTableData previewTableData; private EmbeddedTableData previewTableData;
@ -104,31 +108,22 @@ public class PreviewTablePane extends BasicPane {
@Override @Override
public void mouseEntered(MouseEvent e) { // 当鼠标进入时候调用. public void mouseEntered(MouseEvent e) { // 当鼠标进入时候调用.
mouseEntered = true; mouseEntered = true;
if (!buttonPressed) {
refreshLabel.setBackground(java.awt.Color.WHITE);
refreshLabel.setOpaque(true);
refreshLabel.setBorder(BorderFactory.createLineBorder(java.awt.Color.GRAY));
}
} }
@Override @Override
public void mouseExited(MouseEvent e) { public void mouseExited(MouseEvent e) {
mouseEntered = false; mouseEntered = false;
refreshLabel.setOpaque(false);
refreshLabel.setBorder(BorderFactory.createEmptyBorder());
} }
@Override @Override
public void mousePressed(MouseEvent e) { public void mousePressed(MouseEvent e) {
buttonPressed = true; buttonPressed = true;
refreshLabel.setBackground(java.awt.Color.lightGray);
} }
@Override @Override
public void mouseReleased(MouseEvent e) { public void mouseReleased(MouseEvent e) {
buttonPressed = false; buttonPressed = false;
if (mouseEntered) { if (mouseEntered) {
refreshLabel.setBackground(java.awt.Color.WHITE);
try { try {
populate(tableData); populate(tableData);
if (dataModel != null) { if (dataModel != null) {
@ -208,7 +203,8 @@ public class PreviewTablePane extends BasicPane {
private void initRefreshLabel() { private void initRefreshLabel() {
Icon refreshImage = new LazyIcon("refresh"); Icon refreshImage = new LazyIcon("refresh");
refreshLabel = new UILabel(refreshImage); refreshLabel = new UIButton(refreshImage);
FineUIStyle.setStyle(refreshLabel, FineUIStyle.ORIGINAL_BUTTON);
refreshLabel.addMouseListener(refreshLabelMouseAdapter); refreshLabel.addMouseListener(refreshLabelMouseAdapter);
} }
@ -308,8 +304,10 @@ public class PreviewTablePane extends BasicPane {
private JComponent initCenterPane() { private JComponent initCenterPane() {
preveiwTable = new CopyableJTable(new TableSorter()); preveiwTable = new CopyableJTable(new TableSorter());
preveiwTable.setRowSelectionAllowed(false); preveiwTable.setRowSelectionAllowed(false);
preveiwTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); preveiwTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
return new JScrollPane(preveiwTable); JScrollPane scrollPane = new JScrollPane(preveiwTable);
scrollPane.getVerticalScrollBar().setUI(new FineTableScrollBarPaneUI(preveiwTable));
return scrollPane;
} }
private void initDialog() { private void initDialog() {
@ -403,7 +401,7 @@ public class PreviewTablePane extends BasicPane {
public static void resetPreviewTable() { public static void resetPreviewTable() {
getInstance().preveiwTable = new SortableJTable(new TableSorter()); getInstance().preveiwTable = new SortableJTable(new TableSorter());
getInstance().preveiwTable.setRowSelectionAllowed(false); getInstance().preveiwTable.setRowSelectionAllowed(false);
getInstance().preveiwTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); getInstance().preveiwTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
PreviewTablePane.progressBar.close(); PreviewTablePane.progressBar.close();
getInstance().repaint(); getInstance().repaint();
} }
@ -511,7 +509,7 @@ public class PreviewTablePane extends BasicPane {
* @return * @return
*/ */
private DefaultTableCellRenderer getDefaultTableCellRenderer() { private DefaultTableCellRenderer getDefaultTableCellRenderer() {
return new DefaultTableCellRenderer() { return new FineTableHeaderUI.TableRenderer() {
@Override @Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
JComponent comp = (JComponent) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); JComponent comp = (JComponent) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

12
designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/PreviewTableDesensitizationPane.java

@ -1,16 +1,16 @@
package com.fr.design.data.datapane.preview.desensitization.view; package com.fr.design.data.datapane.preview.desensitization.view;
import com.fine.theme.icon.LazyIcon; import com.fine.theme.icon.LazyIcon;
import com.fine.theme.utils.FineUIStyle;
import com.fr.design.constants.UIConstants; import com.fr.design.constants.UIConstants;
import com.fr.design.data.datapane.preview.PreviewTablePane; import com.fr.design.data.datapane.preview.PreviewTablePane;
import com.fr.design.gui.ibutton.UIToggleButton; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itoolbar.UIToolbar; import com.fr.design.gui.itoolbar.UIToolbar;
import com.fr.design.i18n.Toolkit; import com.fr.design.i18n.Toolkit;
import com.fr.design.menu.SeparatorDef; import com.fr.design.menu.SeparatorDef;
import com.fr.design.menu.ToolBarDef; import com.fr.design.menu.ToolBarDef;
import javax.swing.Icon;
import javax.swing.JPanel; import javax.swing.JPanel;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Component; import java.awt.Component;
@ -47,7 +47,7 @@ public class PreviewTableDesensitizationPane extends JPanel {
/** /**
* 脱敏效果预览按钮 * 脱敏效果预览按钮
*/ */
private UIToggleButton previewToggle; private UIButton previewToggle;
public PreviewTableDesensitizationPane(PreviewTablePane previewTablePane) { public PreviewTableDesensitizationPane(PreviewTablePane previewTablePane) {
@ -100,10 +100,12 @@ public class PreviewTableDesensitizationPane extends JPanel {
* *
* @return * @return
*/ */
private UIToggleButton initPreviewButton() { private UIButton initPreviewButton() {
previewToggle = new UIToggleButton(new Icon[]{new LazyIcon("preview"), new LazyIcon("preview")}, true); previewToggle = new UIButton();
previewToggle.setIcon(new LazyIcon("preview"));
previewToggle.setToolTipText(Toolkit.i18nText("Fine-Design_Report_Desensitization_Preview")); previewToggle.setToolTipText(Toolkit.i18nText("Fine-Design_Report_Desensitization_Preview"));
previewToggle.setSelected(false); previewToggle.setSelected(false);
FineUIStyle.setStyle(previewToggle, FineUIStyle.ORIGINAL_BUTTON);
previewToggle.addActionListener(e -> { previewToggle.addActionListener(e -> {
// 切换TableModel的脱敏状态 // 切换TableModel的脱敏状态
previewTablePane.togglePreviewTableModelDesensitizeStatus(); previewTablePane.togglePreviewTableModelDesensitizeStatus();

50
designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTableModel.java

@ -1,6 +1,8 @@
package com.fr.design.data.datapane.preview.desensitization.view.setting; package com.fr.design.data.datapane.preview.desensitization.view.setting;
import com.fine.theme.icon.LazyIcon; import com.fine.theme.icon.LazyIcon;
import com.fine.theme.light.ui.FineRoundBorder;
import com.fine.theme.utils.FineUIStyle;
import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.ui.FlatUIUtils;
import com.fr.data.desensitize.base.DesensitizationTableData; import com.fr.data.desensitize.base.DesensitizationTableData;
import com.fr.data.desensitize.base.TableDataDesensitizationItem; import com.fr.data.desensitize.base.TableDataDesensitizationItem;
@ -346,26 +348,10 @@ public class TableDataDesensitizationTableModel extends UITableModelAdapter<Tabl
*/ */
private class EffectedRolesChooser extends AbstractCellEditor implements TableCellEditor { private class EffectedRolesChooser extends AbstractCellEditor implements TableCellEditor {
private UIComboCheckBox rolesCheckBox; private EffectedRolesComboBox rolesCheckBox;
EffectedRolesChooser() { EffectedRolesChooser() {
this.rolesCheckBox = new UIComboCheckBox(roleMap.values().toArray(), true) { rolesCheckBox = new EffectedRolesComboBox();
@Override
protected void setLayoutAndAddComponents() {
// 使用BorderLayout,否则默认使用的FlowLayout会让整个下拉选框使用最小Size,然后TableCell这边会出现空白
this.setLayout(FRGUIPaneFactory.createBorderLayout());
this.add(getEditor(), BorderLayout.CENTER);
this.add(getArrowButton(), BorderLayout.EAST);
}
@Override
protected void setEditorToolTipText(JComponent editor, String text) {
// 选项过多时,已选中的值会做省略显示处理,此处添加一个Tooltips,显示完整值
if (text != null) {
editor.setToolTipText(text);
}
}
};
this.addCellEditorListener(new CellEditorListener() { this.addCellEditorListener(new CellEditorListener() {
@Override @Override
public void editingStopped(ChangeEvent e) { public void editingStopped(ChangeEvent e) {
@ -385,10 +371,8 @@ public class TableDataDesensitizationTableModel extends UITableModelAdapter<Tabl
} }
private void setBoxStyle() { private void setBoxStyle() {
this.rolesCheckBox.getEditor().setBackground(FlatUIUtils.getUIColor("background.normal", Color.WHITE)); this.rolesCheckBox.setBorder(new FineRoundBorder());
this.rolesCheckBox.getEditor().setOpaque(true); FineUIStyle.setStyle(this.rolesCheckBox.getEditor(), FineUIStyle.TRANSPARENT_TEXT_FIELD);
this.rolesCheckBox.getArrowButton().setBackground(FlatUIUtils.getUIColor("background.normal", Color.WHITE));
this.rolesCheckBox.getArrowButton().setOpaque(true);
} }
@Override @Override
@ -439,6 +423,28 @@ public class TableDataDesensitizationTableModel extends UITableModelAdapter<Tabl
public Object getCellEditorValue() { public Object getCellEditorValue() {
return rolesCheckBox.getSelectedValues(); return rolesCheckBox.getSelectedValues();
} }
private class EffectedRolesComboBox extends UIComboCheckBox {
public EffectedRolesComboBox() {
super(roleMap.values().toArray(), true);
}
@Override
protected void setLayoutAndAddComponents() {
// 使用BorderLayout,否则默认使用的FlowLayout会让整个下拉选框使用最小Size,然后TableCell这边会出现空白
this.setLayout(FRGUIPaneFactory.createBorderLayout());
this.add(getEditor(), BorderLayout.CENTER);
this.add(getLabel(), BorderLayout.EAST);
}
@Override
protected void setEditorToolTipText(JComponent editor, String text) {
// 选项过多时,已选中的值会做省略显示处理,此处添加一个Tooltips,显示完整值
if (text != null) {
editor.setToolTipText(text);
}
}
}
} }
/** /**

23
designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java

@ -2,6 +2,7 @@ package com.fr.design.data.tabledata.tabledatapane;
import com.fine.theme.icon.LazyIcon; import com.fine.theme.icon.LazyIcon;
import com.fine.theme.utils.FineUIScale; import com.fine.theme.utils.FineUIScale;
import com.fine.theme.utils.FineUIStyle;
import com.formdev.flatlaf.util.ScaledEmptyBorder; import com.formdev.flatlaf.util.ScaledEmptyBorder;
import com.fr.base.Parameter; import com.fr.base.Parameter;
import com.fr.base.ParameterHelper; import com.fr.base.ParameterHelper;
@ -100,7 +101,7 @@ import static com.fine.theme.utils.FineClientProperties.ADAPTIVE_COMBO_BOX;
*/ */
public class DBTableDataPane extends AbstractTableDataPane<DBTableData> implements SwitchableTableDataPane { public class DBTableDataPane extends AbstractTableDataPane<DBTableData> implements SwitchableTableDataPane {
private static final int BOTTOM = 9; private static final int BOTTOM = 10;
private static final String PREVIEW_BUTTON = Toolkit.i18nText("Fine-Design_Basic_Preview"); private static final String PREVIEW_BUTTON = Toolkit.i18nText("Fine-Design_Basic_Preview");
private static final String REFRESH_BUTTON = Toolkit.i18nText("Fine-Design_Basic_Refresh"); private static final String REFRESH_BUTTON = Toolkit.i18nText("Fine-Design_Basic_Refresh");
private ConnectionTableProcedurePane connectionTableProcedurePane; private ConnectionTableProcedurePane connectionTableProcedurePane;
@ -156,7 +157,7 @@ public class DBTableDataPane extends AbstractTableDataPane<DBTableData> implemen
} }
private void init() { private void init() {
contentPane.setLayout(new BorderLayout(4, 4)); contentPane.setLayout(FRGUIPaneFactory.createScaledBorderLayout(4, 4));
this.sqlTextPane = new SQLEditPane(); this.sqlTextPane = new SQLEditPane();
this.sqlTextPane.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_SQL); this.sqlTextPane.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_SQL);
@ -243,11 +244,11 @@ public class DBTableDataPane extends AbstractTableDataPane<DBTableData> implemen
private void initMainSplitPane() { private void initMainSplitPane() {
Box box = new Box(BoxLayout.Y_AXIS); Box box = new Box(BoxLayout.Y_AXIS);
JPanel northPane = new JPanel(new BorderLayout(4, 4)); JPanel northPane = new JPanel(FRGUIPaneFactory.createScaledBorderLayout(4, 4));
JToolBar editToolBar = createToolBar(); JToolBar editToolBar = createToolBar();
editToolBar.setBorder(null); editToolBar.setBorder(null);
northPane.add(editToolBar, BorderLayout.CENTER); northPane.add(editToolBar, BorderLayout.CENTER);
northPane.setBorder(BorderFactory.createEmptyBorder(0, 0, BOTTOM, 0)); northPane.setBorder(new ScaledEmptyBorder(0, 0, BOTTOM, 0));
RTextScrollPane sqlTextScrollPane = new RTextScrollPane(this.sqlTextPane); RTextScrollPane sqlTextScrollPane = new RTextScrollPane(this.sqlTextPane);
sqlTextScrollPane.setLineNumbersEnabled(true); sqlTextScrollPane.setLineNumbersEnabled(true);
@ -255,8 +256,9 @@ public class DBTableDataPane extends AbstractTableDataPane<DBTableData> implemen
sqlTextScrollPane.setPreferredSize(FineUIScale.scale(new Dimension(680, 600))); sqlTextScrollPane.setPreferredSize(FineUIScale.scale(new Dimension(680, 600)));
JPanel paraMeanPane = new JPanel(new BorderLayout()); JPanel paraMeanPane = new JPanel(new BorderLayout());
paraMeanPane.setPreferredSize(FineUIScale.scale(new Dimension(680, 90))); paraMeanPane.setBorder(new ScaledEmptyBorder(10, 0, BOTTOM, 0));
UILabel paraMean = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Datasource_Param_DES")); UILabel paraMean = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Datasource_Param_DES"));
FineUIStyle.setStyle(paraMean, FineUIStyle.LABEL_TIP);
paraMeanPane.add(paraMean, BorderLayout.CENTER); paraMeanPane.add(paraMean, BorderLayout.CENTER);
@ -265,7 +267,7 @@ public class DBTableDataPane extends AbstractTableDataPane<DBTableData> implemen
box.add(paraMeanPane); box.add(paraMeanPane);
box.add(this.editorPane); box.add(this.editorPane);
JPanel sqlSplitPane = new JPanel(new BorderLayout(4, 4)); JPanel sqlSplitPane = new JPanel(FRGUIPaneFactory.createScaledBorderLayout(4, 4));
sqlSplitPane.add(box, BorderLayout.CENTER); sqlSplitPane.add(box, BorderLayout.CENTER);
@ -275,7 +277,6 @@ public class DBTableDataPane extends AbstractTableDataPane<DBTableData> implemen
this.connectionTableProcedurePane.setMaximumSize(FineUIScale.scale(new Dimension(500, 400))); this.connectionTableProcedurePane.setMaximumSize(FineUIScale.scale(new Dimension(500, 400)));
JSplitPane mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, this.connectionTableProcedurePane, sqlSplitPane); JSplitPane mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, this.connectionTableProcedurePane, sqlSplitPane);
mainSplitPane.setBorder(new ScaledEmptyBorder(10, 10, 10, 10));
mainSplitPane.setOneTouchExpandable(true); mainSplitPane.setOneTouchExpandable(true);
contentPane.add(mainSplitPane, BorderLayout.CENTER); contentPane.add(mainSplitPane, BorderLayout.CENTER);
} }
@ -339,15 +340,19 @@ public class DBTableDataPane extends AbstractTableDataPane<DBTableData> implemen
private void createToolbarEsdComponents(final UIToolbar editToolBar) { private void createToolbarEsdComponents(final UIToolbar editToolBar) {
this.esdSettingsLabel = new UILabel(Toolkit.i18nText("Fine-Design_ESD_Cache_Settings")); this.esdSettingsLabel = new UILabel(Toolkit.i18nText("Fine-Design_ESD_Cache_Settings"));
esdSettingsLabel.setBorder(new ScaledEmptyBorder(0, 6, 0,6));
this.esdConfigOption = new UIComboBox(StrategyConfigFrom.values()); this.esdConfigOption = new UIComboBox(StrategyConfigFrom.values());
this.esdConfigOption.putClientProperty(COMBO_BOX_TYPE, ADAPTIVE_COMBO_BOX); this.esdConfigOption.putClientProperty(COMBO_BOX_TYPE, ADAPTIVE_COMBO_BOX);
this.esdEnabled = new UICheckBox(Toolkit.i18nText("Fine-Design_ESD_Enable_Cache")); this.esdEnabled = new UICheckBox(Toolkit.i18nText("Fine-Design_ESD_Enable_Cache"));
esdEnabled.setBorder(new ScaledEmptyBorder(0, 6, 0,6));
this.barErrorTips = new UILabel(); this.barErrorTips = new UILabel();
this.barErrorTips.setForeground(Color.RED); barErrorTips.setBorder(new ScaledEmptyBorder(0, 6, 0,6));
FineUIStyle.setStyle(barErrorTips, FineUIStyle.LABEL_WARNING_TIP);
this.barErrorTips.setVisible(false); this.barErrorTips.setVisible(false);
esdSettingsBtn = new UIButton(Toolkit.i18nText("Fine-Design_ESD_Strategy_Config")); esdSettingsBtn = new UIButton(Toolkit.i18nText("Fine-Design_ESD_Strategy_Config"));
esdSettingsBtn.setPreferredSize(FineUIScale.scale(new Dimension(72, 24))); esdSettingsBtn.setPreferredSize(new Dimension((int) esdSettingsBtn.getPreferredSize().getWidth(), FineUIScale.scale(24)));
FineUIStyle.setStyle(esdSettingsBtn, FineUIStyle.WHITE_BUTTON);
esdSettingsBtn.addActionListener(new ActionListener() { esdSettingsBtn.addActionListener(new ActionListener() {
@Override @Override

4
designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/MaxMemRowCountPanel.java

@ -15,6 +15,9 @@ import com.fr.design.gui.itoolbar.UIToolbar;
import com.fr.design.i18n.Toolkit; import com.fr.design.i18n.Toolkit;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import static com.fine.theme.utils.FineClientProperties.ADAPTIVE_COMBO_BOX;
import static com.fine.theme.utils.FineClientProperties.COMBO_BOX_TYPE;
public class MaxMemRowCountPanel extends UIToolbar { public class MaxMemRowCountPanel extends UIToolbar {
private static final int ALL_IN_MEMORY = 0; private static final int ALL_IN_MEMORY = 0;
@ -71,6 +74,7 @@ public class MaxMemRowCountPanel extends UIToolbar {
this.setRollover(true); this.setRollover(true);
this.setBackground(UIConstants.NORMAL_BACKGROUND); this.setBackground(UIConstants.NORMAL_BACKGROUND);
switchCache = new UIComboBox(CACHE_LIST); switchCache = new UIComboBox(CACHE_LIST);
switchCache.putClientProperty(COMBO_BOX_TYPE, ADAPTIVE_COMBO_BOX);
switchCache.addActionListener(switchStateL); switchCache.addActionListener(switchStateL);
numberSpinner = new UISpinner(0, Integer.MAX_VALUE, 1); numberSpinner = new UISpinner(0, Integer.MAX_VALUE, 1);
numberSpinner.setNumberFieldColumns(3); numberSpinner.setNumberFieldColumns(3);

9
designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/ProcedureDataPane.java

@ -92,11 +92,11 @@ public class ProcedureDataPane extends AbstractTableDataPane<StoreProcedure> imp
super(); super();
queryText = new UILabel(StringUtils.EMPTY); queryText = new UILabel(StringUtils.EMPTY);
Box box = new Box(BoxLayout.Y_AXIS); Box box = new Box(BoxLayout.Y_AXIS);
JPanel northpane = new JPanel(new BorderLayout(4, 4)); JPanel northpane = new JPanel(FRGUIPaneFactory.createScaledBorderLayout(4, 0));
JToolBar editToolBar = creatToolBar(); JToolBar editToolBar = creatToolBar();
editToolBar.setBorder(null); editToolBar.setBorder(null);
northpane.add(editToolBar, BorderLayout.NORTH); northpane.add(editToolBar, BorderLayout.NORTH);
northpane.setBorder(BorderFactory.createEmptyBorder(0, 0, 6, 0)); northpane.setBorder(new ScaledEmptyBorder(0, 0, 10, 0));
storeProcedureContext = new SQLEditPane(SQLEditPane.UNREQUEST_DROPTARGET); storeProcedureContext = new SQLEditPane(SQLEditPane.UNREQUEST_DROPTARGET);
storeProcedureContext.setEditable(false); storeProcedureContext.setEditable(false);
@ -107,6 +107,7 @@ public class ProcedureDataPane extends AbstractTableDataPane<StoreProcedure> imp
JPanel namePane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); JPanel namePane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
namePane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Datasource_Stored_Procedure") + ":")); namePane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Datasource_Stored_Procedure") + ":"));
namePane.add(queryText); namePane.add(queryText);
namePane.setBorder(new ScaledEmptyBorder(10, 0, 0, 0));
inAutoeditorPane = new UITableEditorPane<StoreProcedureParameter>(new StoreProcedureTableModel()); inAutoeditorPane = new UITableEditorPane<StoreProcedureParameter>(new StoreProcedureTableModel());
autoEditorPane = new UITableEditorPane<StoreProcedureParameter>(new AutoStoreProcedureTableModel()); autoEditorPane = new UITableEditorPane<StoreProcedureParameter>(new AutoStoreProcedureTableModel());
autoEditorPane.getbuttonPane().setVisible(false); autoEditorPane.getbuttonPane().setVisible(false);
@ -127,13 +128,12 @@ public class ProcedureDataPane extends AbstractTableDataPane<StoreProcedure> imp
// 左边的Panel,上面是选择DatabaseConnection的ComboBox,下面DatabaseConnection对应的Table // 左边的Panel,上面是选择DatabaseConnection的ComboBox,下面DatabaseConnection对应的Table
initconnectionTableProcedurePane(); initconnectionTableProcedurePane();
this.setLayout(new BorderLayout(4, 4)); this.setLayout(FRGUIPaneFactory.createScaledBorderLayout(4, 4));
this.connectionTableProcedurePane.setMinimumSize(FineUIScale.scale(new Dimension(230, 400))); this.connectionTableProcedurePane.setMinimumSize(FineUIScale.scale(new Dimension(230, 400)));
this.connectionTableProcedurePane.setMaximumSize(FineUIScale.scale(new Dimension(500, 400))); this.connectionTableProcedurePane.setMaximumSize(FineUIScale.scale(new Dimension(500, 400)));
box.setMinimumSize(FineUIScale.scale(new Dimension(300, 400))); box.setMinimumSize(FineUIScale.scale(new Dimension(300, 400)));
// 使用SplitPane // 使用SplitPane
JSplitPane mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, connectionTableProcedurePane, sqlSplitPane); JSplitPane mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, connectionTableProcedurePane, sqlSplitPane);
mainSplitPane.setBorder(new ScaledEmptyBorder(10, 10, 10, 10));
mainSplitPane.setOneTouchExpandable(true); mainSplitPane.setOneTouchExpandable(true);
this.add(mainSplitPane, BorderLayout.CENTER); this.add(mainSplitPane, BorderLayout.CENTER);
} }
@ -172,6 +172,7 @@ public class ProcedureDataPane extends AbstractTableDataPane<StoreProcedure> imp
toolBarDef.addShortCut(new RefreshAction()); toolBarDef.addShortCut(new RefreshAction());
toolBarDef.addShortCut(SeparatorDef.DEFAULT); toolBarDef.addShortCut(SeparatorDef.DEFAULT);
isShareCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Is_Share_DBTableData")); isShareCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Is_Share_DBTableData"));
isShareCheckBox.setBorder(new ScaledEmptyBorder(0, 6, 0,6));
maxPanel = new MaxMemRowCountPanel(); maxPanel = new MaxMemRowCountPanel();
maxPanel.setBorder(null); maxPanel.setBorder(null);
maxPanel.setBackground(null); maxPanel.setBackground(null);

5
designer-base/src/main/java/com/fr/design/dialog/BasicPane.java

@ -1,6 +1,7 @@
package com.fr.design.dialog; package com.fr.design.dialog;
import com.fine.theme.utils.FineUIScale; import com.fine.theme.utils.FineUIScale;
import com.fine.theme.utils.FineUIStyle;
import com.formdev.flatlaf.util.ScaledEmptyBorder; import com.formdev.flatlaf.util.ScaledEmptyBorder;
import com.fr.common.annotations.Open; import com.fr.common.annotations.Open;
import com.fr.design.constants.LayoutConstants; import com.fr.design.constants.LayoutConstants;
@ -315,14 +316,14 @@ public abstract class BasicPane extends JPanel {
nameTextField = new UITextField(); nameTextField = new UITextField();
Name = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Name")); Name = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Name"));
JPanel northPane = new JPanel(new BorderLayout()); JPanel northPane = new JPanel(new BorderLayout());
northPane.setBorder(new ScaledEmptyBorder(0,10,0,10)); northPane.setBorder(new ScaledEmptyBorder(0,0,10,0));
northPane.add(row( northPane.add(row(
LayoutConstants.HGAP_LARGE, LayoutConstants.HGAP_LARGE,
cell(Name).weight(titleRatio), cell(Name).weight(titleRatio),
cell(nameTextField).weight(0.7 - titleRatio), cell(nameTextField).weight(0.7 - titleRatio),
cell(showfield = new UILabel(" ")).weight(0.3) cell(showfield = new UILabel(" ")).weight(0.3)
).getComponent()); ).getComponent());
showfield.setForeground(new Color(204, 0, 1)); FineUIStyle.setStyle(showfield, FineUIStyle.LABEL_WARNING_TIP);
showfield.setPreferredSize(new Dimension(FineUIScale.scale(220), showfield.getPreferredSize().height)); showfield.setPreferredSize(new Dimension(FineUIScale.scale(220), showfield.getPreferredSize().height));
this.add(northPane, BorderLayout.NORTH); this.add(northPane, BorderLayout.NORTH);
this.centerPane = bPane; this.centerPane = bPane;

25
designer-base/src/main/java/com/fr/design/gui/icombobox/UIComboBoxRenderer.java

@ -1,14 +1,10 @@
package com.fr.design.gui.icombobox; package com.fr.design.gui.icombobox;
import java.awt.Color; import java.awt.Dimension;
import java.awt.Component;
import javax.swing.DefaultListCellRenderer; import javax.swing.DefaultListCellRenderer;
import com.fr.design.constants.UIConstants; import com.fine.theme.utils.FineUIScale;
import javax.swing.JList;
import javax.swing.JLabel;
/** /**
* *
@ -23,19 +19,8 @@ public class UIComboBoxRenderer extends DefaultListCellRenderer {
super(); super();
} }
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { @Override
cellHasFocus = cellHasFocus && !this.isEnabled(); public Dimension getPreferredSize() {
JLabel renderer =(JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); return new Dimension(super.getPreferredSize().width, FineUIScale.scale(24));
renderer.setOpaque(true);
list.setSelectionBackground(UIConstants.NORMAL_BLUE);
list.setSelectionForeground(Color.WHITE);
if (isSelected) {
renderer.setForeground(list.getSelectionForeground());
renderer.setBackground(list.getSelectionBackground());
} else {
renderer.setForeground(list.getForeground());
renderer.setBackground(list.getBackground());
}
return renderer;
} }
} }

35
designer-base/src/main/java/com/fr/design/gui/icombocheckbox/UIComboCheckBox.java

@ -1,24 +1,23 @@
package com.fr.design.gui.icombocheckbox; package com.fr.design.gui.icombocheckbox;
import com.fine.theme.icon.LazyIcon;
import com.fine.theme.light.ui.FineRoundBorder; import com.fine.theme.light.ui.FineRoundBorder;
import com.fine.theme.utils.FineUIScale; import com.fine.theme.utils.FineUIScale;
import com.fr.base.BaseUtils;
import com.fr.design.event.GlobalNameListener; import com.fr.design.event.GlobalNameListener;
import com.fr.design.event.GlobalNameObserver; import com.fr.design.event.GlobalNameObserver;
import com.fr.design.event.HoverAware;
import com.fr.design.event.UIObserver; import com.fr.design.event.UIObserver;
import com.fr.design.event.UIObserverListener; import com.fr.design.event.UIObserverListener;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itextfield.UITextField; import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.icon.IconPathConstants;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import javax.swing.BorderFactory;
import javax.swing.Icon; import javax.swing.Icon;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener; import javax.swing.event.PopupMenuListener;
import java.awt.BorderLayout; import java.awt.BorderLayout;
@ -42,8 +41,12 @@ import java.util.Map;
* 支持全选半选 * 支持全选半选
* 可以设置悬停颜色一页最多显示单选框个数 * 可以设置悬停颜色一页最多显示单选框个数
* 可以省略显示 * 可以省略显示
*
* @author
* @since
* Created on
*/ */
public class UIComboCheckBox extends JComponent implements UIObserver, GlobalNameObserver { public class UIComboCheckBox extends JComponent implements UIObserver, GlobalNameObserver, HoverAware {
//下拉框的值 //下拉框的值
private Object[] values; private Object[] values;
//已经选中的值 //已经选中的值
@ -53,6 +56,7 @@ public class UIComboCheckBox extends JComponent implements UIObserver, GlobalNam
private UICheckListPopup popup; private UICheckListPopup popup;
private UITextField editor; private UITextField editor;
private UIButton arrowButton; private UIButton arrowButton;
private UILabel label;
//选中的值之间显示的分隔符 //选中的值之间显示的分隔符
private String valueSperator; private String valueSperator;
private static final String DEFAULT_VALUE_SPERATOR = ","; private static final String DEFAULT_VALUE_SPERATOR = ",";
@ -121,8 +125,13 @@ public class UIComboCheckBox extends JComponent implements UIObserver, GlobalNam
this.popup.addActionListener(new PopupAction()); this.popup.addActionListener(new PopupAction());
this.editor = createEditor(); this.editor = createEditor();
this.arrowButton = createArrowButton(); this.arrowButton = createArrowButton();
this.label = new UILabel(getIcon());
label.setPreferredSize(FineUIScale.scale(new Dimension(24, 24)));
setLayoutAndAddComponents(); setLayoutAndAddComponents();
setText(); setText();
addPopupListener(this);
} }
/** /**
@ -155,12 +164,14 @@ public class UIComboCheckBox extends JComponent implements UIObserver, GlobalNam
return arrowButton; return arrowButton;
} }
public UILabel getLabel() {
return label;
}
private UIButton createArrowButton() { private UIButton createArrowButton() {
final UIButton arrowBtn = new UIButton(); final UIButton arrowBtn = new UIButton();
arrowBtn.setNormalPainted(false); arrowBtn.setNormalPainted(false);
arrowBtn.setPreferredSize(FineUIScale.scale(new Dimension(20, 5))); arrowBtn.setPreferredSize(FineUIScale.scale(new Dimension(20, 5)));
arrowBtn.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 1, UIManager.getColor("defaultBorderColor")));
arrowBtn.setOpaque(true);
arrowBtn.setIcon(getIcon()); arrowBtn.setIcon(getIcon());
arrowBtn.setExtraPainted(false); arrowBtn.setExtraPainted(false);
addPopupListener(arrowBtn); addPopupListener(arrowBtn);
@ -171,8 +182,6 @@ public class UIComboCheckBox extends JComponent implements UIObserver, GlobalNam
private UITextField createEditor() { private UITextField createEditor() {
UITextField editor = new TextField(); UITextField editor = new TextField();
editor.setEditable(false); editor.setEditable(false);
editor.setPreferredSize(FineUIScale.scale(new Dimension(110, 20)));
editor.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 0, UIManager.getColor("defaultBorderColor")));
addPopupListener(editor); addPopupListener(editor);
return editor; return editor;
@ -213,6 +222,11 @@ public class UIComboCheckBox extends JComponent implements UIObserver, GlobalNam
return popup.getSelectedValues(); return popup.getSelectedValues();
} }
@Override
public boolean isHovered() {
return true;
}
private class PopupAction implements ActionListener { private class PopupAction implements ActionListener {
@Override @Override
@ -229,7 +243,6 @@ public class UIComboCheckBox extends JComponent implements UIObserver, GlobalNam
private void togglePopup() { private void togglePopup() {
if (this.arrowButton.isEnabled()) { if (this.arrowButton.isEnabled()) {
popup.setBorder(new FineRoundBorder()); popup.setBorder(new FineRoundBorder());
popup.setPreferredSize(new Dimension(FineUIScale.scale(this.getWidth()), (int) popup.getPreferredSize().getHeight()));
popup.show(this, 0, getHeight()); popup.show(this, 0, getHeight());
} }
} }
@ -352,7 +365,7 @@ public class UIComboCheckBox extends JComponent implements UIObserver, GlobalNam
} }
private Icon getIcon() { private Icon getIcon() {
return BaseUtils.readIcon(IconPathConstants.ARROW_ICON_PATH); return new LazyIcon("down_arrow");
} }
/** /**

7
designer-base/src/main/java/com/fr/design/gui/ilist/TableViewList.java

@ -1,6 +1,7 @@
package com.fr.design.gui.ilist; package com.fr.design.gui.ilist;
import com.fine.theme.icon.LazyIcon; import com.fine.theme.icon.LazyIcon;
import com.fine.theme.utils.FineUIScale;
import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.ui.FlatUIUtils;
import com.fr.base.BaseUtils; import com.fr.base.BaseUtils;
import com.fr.data.core.DataCoreUtils; import com.fr.data.core.DataCoreUtils;
@ -26,6 +27,7 @@ import javax.swing.ListSelectionModel;
import javax.swing.SwingWorker; import javax.swing.SwingWorker;
import java.awt.Color; import java.awt.Color;
import java.awt.Component; import java.awt.Component;
import java.awt.Dimension;
import java.awt.dnd.DnDConstants; import java.awt.dnd.DnDConstants;
import java.awt.dnd.DragGestureEvent; import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.DragGestureListener; import java.awt.dnd.DragGestureListener;
@ -261,6 +263,11 @@ public class TableViewList extends UIList {
return this; return this;
} }
@Override
public Dimension getPreferredSize() {
return new Dimension(super.getPreferredSize().width, FineUIScale.scale(24));
}
} }
/** /**

3
designer-base/src/main/java/com/fr/design/gui/itable/SortableJTable.java

@ -1,5 +1,7 @@
package com.fr.design.gui.itable; package com.fr.design.gui.itable;
import com.fine.theme.light.ui.FineTableHeaderUI;
import javax.swing.JTable; import javax.swing.JTable;
public class SortableJTable extends JTable{ public class SortableJTable extends JTable{
@ -7,5 +9,6 @@ public class SortableJTable extends JTable{
super(tableModel); super(tableModel);
tableModel.setTableHeader(getTableHeader()); tableModel.setTableHeader(getTableHeader());
setShowGrid(true); setShowGrid(true);
getTableHeader().setUI(new FineTableHeaderUI());
} }
} }

4
designer-base/src/main/java/com/fr/design/gui/itable/TableSorter.java

@ -14,10 +14,10 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.swing.Icon;
import com.fr.common.inputevent.InputEventBaseOnOS; import com.fr.common.inputevent.InputEventBaseOnOS;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import javax.swing.Icon;
import javax.swing.JTable; import javax.swing.JTable;
import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener; import javax.swing.event.TableModelListener;

14
designer-base/src/main/java/com/fr/design/gui/itableeditorpane/ParameterTableModel.java

@ -1,7 +1,7 @@
package com.fr.design.gui.itableeditorpane; package com.fr.design.gui.itableeditorpane;
import com.fine.theme.light.ui.FineTableHeaderUI;
import com.fine.theme.utils.FineUIStyle; import com.fine.theme.utils.FineUIStyle;
import com.formdev.flatlaf.ui.FlatUIUtils;
import com.fr.base.Parameter; import com.fr.base.Parameter;
import com.fr.design.editor.ValueEditorPane; import com.fr.design.editor.ValueEditorPane;
import com.fr.design.editor.ValueEditorPaneFactory; import com.fr.design.editor.ValueEditorPaneFactory;
@ -14,7 +14,6 @@ import com.fr.stable.StringUtils;
import javax.swing.*; import javax.swing.*;
import javax.swing.event.CellEditorListener; import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeEvent;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellEditor;
import java.awt.*; import java.awt.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
@ -231,11 +230,10 @@ public class ParameterTableModel extends UITableModelAdapter<ParameterProvider>
} }
private class ParameterValueRenderer extends DefaultTableCellRenderer { private class ParameterValueRenderer extends FineTableHeaderUI.TableRenderer {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private ValueEditorPane editor; private ValueEditorPane editor;
private UILabel disableLable; private UILabel disableLable;
public ParameterValueRenderer(int paraUseType) { public ParameterValueRenderer(int paraUseType) {
this(ValueEditorPaneFactory.createVallueEditorPaneWithUseType(paraUseType)); this(ValueEditorPaneFactory.createVallueEditorPaneWithUseType(paraUseType));
} }
@ -243,15 +241,13 @@ public class ParameterTableModel extends UITableModelAdapter<ParameterProvider>
public ParameterValueRenderer(ValueEditorPane valueEditorPane) { public ParameterValueRenderer(ValueEditorPane valueEditorPane) {
disableLable = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Paramete_Name")); disableLable = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Set_Paramete_Name"));
FineUIStyle.setStyle(disableLable, FineUIStyle.LABEL_WARNING_TIP); FineUIStyle.setStyle(disableLable, FineUIStyle.LABEL_WARNING_TIP);
disableLable.setHorizontalAlignment(SwingConstants.LEFT);
disableLable.setOpaque(true); disableLable.setOpaque(true);
disableLable.setBackground(FlatUIUtils.getUIColor("background.normal", Color.WHITE)); disableLable.setHorizontalAlignment(SwingConstants.LEFT);
disableLable.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, UIManager.getColor("defaultBorderColor")));
editor = valueEditorPane; editor = valueEditorPane;
} }
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
JComponent component = ((JComponent) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column));
if (table.isCellEditable(row, column)) { if (table.isCellEditable(row, column)) {
if (value == null) { if (value == null) {
editor.populate(""); editor.populate("");
@ -260,6 +256,8 @@ public class ParameterTableModel extends UITableModelAdapter<ParameterProvider>
} }
return editor; return editor;
} else { } else {
disableLable.setBorder(component.getBorder());
disableLable.setBackground(component.getBackground());
return disableLable; return disableLable;
} }
} }

113
designer-base/src/main/java/com/fr/design/gui/itableeditorpane/UITableEditorPane.java

@ -1,41 +1,27 @@
package com.fr.design.gui.itableeditorpane; package com.fr.design.gui.itableeditorpane;
import com.fine.swing.ui.layout.Layouts;
import com.fine.swing.ui.layout.Row;
import com.fine.theme.light.ui.FineRoundBorder; import com.fine.theme.light.ui.FineRoundBorder;
import com.fine.theme.light.ui.FineTableHeaderUI;
import com.fine.theme.light.ui.FineTableScrollBarPaneUI;
import com.fine.theme.utils.FineUIScale; import com.fine.theme.utils.FineUIScale;
import com.formdev.flatlaf.ui.FlatUIUtils;
import com.formdev.flatlaf.util.ScaledEmptyBorder;
import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.general.GeneralUtils;
import com.fr.stable.StringUtils;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JScrollPane; import javax.swing.JScrollPane;
import javax.swing.JTable; import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.event.TableModelListener; import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableCellRenderer;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.GridLayout; import java.awt.GridLayout;
import java.awt.Insets; import java.awt.Insets;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.util.List; import java.util.List;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.column;
import static com.fine.swing.ui.layout.Layouts.row;
/** /**
* 表格编辑面板,一般是两列.- 用泛型实现用的时候请定义T.model里面的T要一样 * 表格编辑面板,一般是两列.- 用泛型实现用的时候请定义T.model里面的T要一样
* *
@ -47,7 +33,7 @@ public class UITableEditorPane<T> extends BasicPane {
* *
*/ */
private static final long serialVersionUID = 6855793816972735815L; private static final long serialVersionUID = 6855793816972735815L;
protected static JTable editTable; protected JTable editTable;
// 放置action 的按钮. // 放置action 的按钮.
protected UITableModelAdapter<T> tableModel; protected UITableModelAdapter<T> tableModel;
private String leftLabelName; private String leftLabelName;
@ -91,39 +77,12 @@ public class UITableEditorPane<T> extends BasicPane {
controlPane.add(buttonPane, BorderLayout.EAST); controlPane.add(buttonPane, BorderLayout.EAST);
controlPane.add(content == null ? l : content, BorderLayout.WEST); controlPane.add(content == null ? l : content, BorderLayout.WEST);
pane.add(column(cell(controlPane), cell(buildScrollTablePane(scrollPane)).weight(1)).getComponent()); scrollPane.getVerticalScrollBar().setUI(new FineTableScrollBarPaneUI(editTable));
pane.add(Layouts.column(10, Layouts.cell(controlPane), Layouts.cell(scrollPane).weight(1)).getComponent());
this.editTable.getTableHeader().setDefaultRenderer(new TableHeaderRenderer()); this.editTable.getTableHeader().setUI(new FineTableHeaderUI());
this.editTable.setDefaultRenderer(Object.class, new TableRenderer());
this.editTable.setRowHeight(FineUIScale.scale(24)); this.editTable.setRowHeight(FineUIScale.scale(24));
} }
/**
* 组合 jtable 和垂直滚动条
* @param scrollPane
* @return
*/
protected JPanel buildScrollTablePane(JScrollPane scrollPane) {
verticalScrollBar = column(
cell(new UILabel()).with(it -> {
it.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 1, UIManager.getColor("defaultBorderColor")));
it.setPreferredSize(new Dimension(scrollPane.getVerticalScrollBar().getWidth(), (int) editTable.getTableHeader().getPreferredSize().getHeight()));
}),
cell(scrollPane.getVerticalScrollBar()).weight(1).with(it -> {
it.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 1, UIManager.getColor("defaultBorderColor")));
})
).getComponent();
scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {
@Override
public void adjustmentValueChanged(AdjustmentEvent e) {
verticalScrollBar.setVisible(editTable.getHeight() > scrollPane.getViewport().getHeight());
verticalScrollBar.repaint();
}
});
return row(cell(scrollPane).weight(1), cell(verticalScrollBar)).getComponent();
}
public UITableModelAdapter<T> getTableModel() { public UITableModelAdapter<T> getTableModel() {
return tableModel; return tableModel;
} }
@ -132,7 +91,7 @@ public class UITableEditorPane<T> extends BasicPane {
buttonPane = new JPanel(); buttonPane = new JPanel();
if (action != null) { if (action != null) {
buttonPane.setLayout(new GridLayout(1, action.length, 3, 3)); buttonPane.setLayout(new GridLayout(1, action.length, FineUIScale.scale(2), 0));
for (int i = 0; i < action.length; i++) { for (int i = 0; i < action.length; i++) {
final UIButton newButton = new UIButton(action[i]); final UIButton newButton = new UIButton(action[i]);
newButton.set4ToolbarButton(); newButton.set4ToolbarButton();
@ -140,9 +99,9 @@ public class UITableEditorPane<T> extends BasicPane {
newButton.setText(""); newButton.setText("");
newButton.setName(action[i].getName()); newButton.setName(action[i].getName());
newButton.setToolTipText(action[i].getName()); newButton.setToolTipText(action[i].getName());
newButton.setBorder(null);
newButton.setMargin(null); newButton.setMargin(null);
newButton.setOpaque(false); newButton.setOpaque(false);
newButton.setPreferredSize(FineUIScale.scale(new Dimension(24, 24)));
buttonPane.add(newButton); buttonPane.add(newButton);
} }
} }
@ -211,7 +170,7 @@ public class UITableEditorPane<T> extends BasicPane {
/** /**
* @return jTable * @return jTable
*/ */
public static JTable getEditTable() { public JTable getEditTable() {
return editTable; return editTable;
} }
@ -234,54 +193,4 @@ public class UITableEditorPane<T> extends BasicPane {
editTable.getTableHeader().setResizingAllowed(resizingAllowed); editTable.getTableHeader().setResizingAllowed(resizingAllowed);
} }
/**
* 设置 TableHeader 文字左对齐
*/
public static class TableHeaderRenderer extends DefaultTableCellRenderer {
public TableHeaderRenderer() {
setHorizontalAlignment(SwingConstants.LEFT);
setPreferredSize(new Dimension(this.getWidth(), FineUIScale.scale(24)));
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (column == table.getColumnCount() - 1) {
((JComponent) component).setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, UIManager.getColor("defaultBorderColor")));
} else {
((JComponent) component).setBorder(BorderFactory.createMatteBorder(0, 0, 1, 1, UIManager.getColor("defaultBorderColor")));
}
return component;
}
}
/**
* 设置 Table 表身格式
*/
public static class TableRenderer extends DefaultTableCellRenderer {
public TableRenderer() {
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if(component instanceof JLabel) {
String toolTipText = GeneralUtils.objectToString(value);
if (StringUtils.isNotEmpty(toolTipText)) {
((JLabel) component).setToolTipText(toolTipText);
}
}
if (column == table.getColumnCount() - 1) {
((JComponent) component).setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createMatteBorder(0, 0, 1, 0, UIManager.getColor("defaultBorderColor")),
new ScaledEmptyBorder(0,4,0,0)));
} else {
((JComponent) component).setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createMatteBorder(0, 0, 1, 1, UIManager.getColor("defaultBorderColor")),
new ScaledEmptyBorder(0,4,0,0)));
}
component.setBackground(FlatUIUtils.getUIColor("background.normal", Color.WHITE));
return component;
}
}
} }

22
designer-base/src/main/java/com/fr/design/layout/FRGUIPaneFactory.java

@ -1,5 +1,6 @@
package com.fr.design.layout; package com.fr.design.layout;
import com.fine.theme.utils.FineUIScale;
import com.fr.design.border.UITitledBorder; import com.fr.design.border.UITitledBorder;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.stable.AssistUtils; import com.fr.stable.AssistUtils;
@ -114,6 +115,16 @@ public class FRGUIPaneFactory {
return new BorderLayout(); return new BorderLayout();
} }
/**
* 创建一个适应 DPI 缩放的边框布局
* @param hgap 水平间距
* @param vgap 竖直间距
* @return JPanel对象
*/
public static LayoutManager createScaledBorderLayout(int hgap, int vgap) {
return new BorderLayout(FineUIScale.scale(hgap), FineUIScale.scale(vgap));
}
/** /**
* 创建一个边框布局间距4,4 * 创建一个边框布局间距4,4
* *
@ -660,6 +671,17 @@ public class FRGUIPaneFactory {
return jp; return jp;
} }
/**
* 创建包含水平垂直间距的边框面板S
*
* @return JPanel对象
*/
public static JPanel createScaledBorderLayout_S_Pane(int hgap, int vgap) {
JPanel jp = new JPanel();
jp.setLayout(FRGUIPaneFactory.createScaledBorderLayout(hgap, vgap));
return jp;
}
public static JPanel createBorderLayout_NO_Opaque_Pane() { public static JPanel createBorderLayout_NO_Opaque_Pane() {
JPanel jp = new JPanel(); JPanel jp = new JPanel();
jp.setOpaque(false); jp.setOpaque(false);

2
designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java

@ -72,7 +72,7 @@ public class CenterRegionContainerPane extends JPanel {
public CenterRegionContainerPane() { public CenterRegionContainerPane() {
toolbarPane = new JPanel(); toolbarPane = new JPanel();
toolbarPane.setBorder(new ScaledEmptyBorder(6, 0, 0, 0)); toolbarPane.setBorder(new ScaledEmptyBorder(10, 0, 0, 0));
toolbarPane.setLayout(FRGUIPaneFactory.createBorderLayout()); toolbarPane.setLayout(FRGUIPaneFactory.createBorderLayout());
eastPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); eastPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
largeToolbar = getToolBarMenuDock().createLargeToolbar(); largeToolbar = getToolBarMenuDock().createLargeToolbar();

2
designer-base/src/main/java/com/fr/design/mainframe/DottedLine.java

@ -1 +1 @@
package com.fr.design.mainframe; import com.fr.design.constants.UIConstants; import com.fr.design.gui.iscrollbar.UIScrollBar; import javax.swing.*; import java.awt.*; import java.awt.geom.GeneralPath; import java.awt.geom.Path2D; /** * Author : daisy * Date: 13-9-11 * Time: 上午10:14 */ public class DottedLine extends JPanel { public static final int HEIGHT = 3; private static final int BLUE_WIDTH = 12;//蓝色线长度,白色线长度是其半 private int direction = UIScrollBar.HORIZONTAL; public DottedLine(int direction, int width) { //水平方向的虚线框 if (direction == UIScrollBar.HORIZONTAL) { this.setPreferredSize(new Dimension(width, HEIGHT)); } else { this.setPreferredSize(new Dimension(HEIGHT, width)); } this.direction = direction; this.setBackground(new Color(255, 255, 255));//设置白色背景 } public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; //如果是水平方向的 if (direction == UIScrollBar.HORIZONTAL) { paintHorizontal(g2d); } else { paintVertical(g2d); } } private void paintHorizontal(Graphics2D g2d) { int totalWidth = getWidth(); int paintX = 0; while (paintX < totalWidth) { int endX = paintX + BLUE_WIDTH; if (endX > totalWidth) { endX = totalWidth; } int[] x = new int[]{paintX, endX, endX, paintX, paintX}; int[] y = new int[]{0, 0, HEIGHT, HEIGHT, 0}; paintBlueArea(g2d, x, y); paintX += BLUE_WIDTH + BLUE_WIDTH / 2; } } private void paintVertical(Graphics2D g2d) { int totalHeight = getHeight(); int paintY = 0; while (paintY < totalHeight) { int endY = paintY + BLUE_WIDTH; if (endY > totalHeight) { endY = totalHeight; } int[] x = new int[]{0, HEIGHT, HEIGHT, 0, 0}; int[] y = new int[]{paintY, paintY, endY, endY, paintY}; paintBlueArea(g2d, x, y); paintY += BLUE_WIDTH + BLUE_WIDTH / 2; } } private void paintBlueArea(Graphics2D g2d, int[] x, int[] y) { g2d.setPaint(UIConstants.DOTTED_LINE_COLOR); GeneralPath generalPath = new GeneralPath(Path2D.WIND_EVEN_ODD, x.length); generalPath.moveTo(x[0], y[0]); for (int index = 1; index < x.length; index++) { generalPath.lineTo(x[index], y[index]); } generalPath.closePath(); g2d.fill(generalPath); } } package com.fr.design.mainframe; import com.formdev.flatlaf.ui.FlatUIUtils; import com.fr.design.constants.UIConstants; import com.fr.design.gui.iscrollbar.UIScrollBar; import javax.swing.*; import java.awt.*; import java.awt.geom.GeneralPath; import java.awt.geom.Path2D; /** * Author : daisy * Date: 13-9-11 * Time: 上午10:14 */ public class DottedLine extends JPanel { public static final int HEIGHT = 3; private static final int BLUE_WIDTH = 12;//蓝色线长度,白色线长度是其半 private int direction = UIScrollBar.HORIZONTAL; public DottedLine(int direction, int width) { //水平方向的虚线框 if (direction == UIScrollBar.HORIZONTAL) { this.setPreferredSize(new Dimension(width, HEIGHT)); } else { this.setPreferredSize(new Dimension(HEIGHT, width)); } this.direction = direction; this.setBackground(new Color(255, 255, 255));//设置白色背景 } public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; //如果是水平方向的 if (direction == UIScrollBar.HORIZONTAL) { paintHorizontal(g2d); } else { paintVertical(g2d); } } private void paintHorizontal(Graphics2D g2d) { int totalWidth = getWidth(); int paintX = 0; while (paintX < totalWidth) { int endX = paintX + BLUE_WIDTH; if (endX > totalWidth) { endX = totalWidth; } int[] x = new int[]{paintX, endX, endX, paintX, paintX}; int[] y = new int[]{0, 0, HEIGHT, HEIGHT, 0}; paintBlueArea(g2d, x, y); paintX += BLUE_WIDTH + BLUE_WIDTH / 2; } } private void paintVertical(Graphics2D g2d) { int totalHeight = getHeight(); int paintY = 0; while (paintY < totalHeight) { int endY = paintY + BLUE_WIDTH; if (endY > totalHeight) { endY = totalHeight; } int[] x = new int[]{0, HEIGHT, HEIGHT, 0, 0}; int[] y = new int[]{paintY, paintY, endY, endY, paintY}; paintBlueArea(g2d, x, y); paintY += BLUE_WIDTH + BLUE_WIDTH / 2; } } private void paintBlueArea(Graphics2D g2d, int[] x, int[] y) { g2d.setPaint(FlatUIUtils.getUIColor("DottedLine.defaultColor", new Color(37,118,239,1))); GeneralPath generalPath = new GeneralPath(Path2D.WIND_EVEN_ODD, x.length); generalPath.moveTo(x[0], y[0]); for (int index = 1; index < x.length; index++) { generalPath.lineTo(x[index], y[index]); } generalPath.closePath(); g2d.fill(generalPath); } }

7
designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java

@ -334,7 +334,11 @@ public abstract class AbstractSupportSelectTablePane<T extends TableEntity> exte
component.setForeground(tableHeader.getForeground()); component.setForeground(tableHeader.getForeground());
component.setBackground(tableHeader.getBackground()); component.setBackground(tableHeader.getBackground());
component.setFont(tableHeader.getFont()); component.setFont(tableHeader.getFont());
component.setBorder(UIManager.getBorder("TableHeader.cellBorder")); if (column != 0) {
component.setBorder(UIManager.getBorder("TableHeader.cellBorder"));
} else {
component.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 1, UIManager.getColor("defaultBorderColor")));
}
return component; return component;
} }
@ -366,6 +370,7 @@ public abstract class AbstractSupportSelectTablePane<T extends TableEntity> exte
setColumnClass(classes); setColumnClass(classes);
this.setDefaultEditor(Boolean.class, new BooleanEditor()); this.setDefaultEditor(Boolean.class, new BooleanEditor());
this.setDefaultRenderer(Boolean.class, new BooleanRenderer()); this.setDefaultRenderer(Boolean.class, new BooleanRenderer());
this.setDefaultRenderer(UILabel.class, new ToolTipTableCellRenderer());
this.createTable().getColumnModel().getColumn(0).setCellRenderer(new BooleanRenderer()); this.createTable().getColumnModel().getColumn(0).setCellRenderer(new BooleanRenderer());
} }

3
designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java

@ -123,7 +123,7 @@ public class RecyclePane extends AbstractSupportSelectTablePane<VcsTableEntity>
searchTextField.setPlaceholder(Toolkit.i18nText("Fine-Design_Vcs_Start_Search")); searchTextField.setPlaceholder(Toolkit.i18nText("Fine-Design_Vcs_Start_Search"));
searchTextField.setColumns(COLUMNS_COUNT); searchTextField.setColumns(COLUMNS_COUNT);
UILabel searchLabel = new UILabel(ICON_SEARCH); UILabel searchLabel = new UILabel(ICON_SEARCH);
searchLabel.setBorder(new ScaledEmptyBorder(0, 3, 0, 3)); searchLabel.setBorder(new ScaledEmptyBorder(0, 4, 0, 4));
searchTextField.setBorder(null); searchTextField.setBorder(null);
leftPane = row(cell(searchLabel), cell(searchTextField).weight(1)).with(it -> { leftPane = row(cell(searchLabel), cell(searchTextField).weight(1)).with(it -> {
it.setBorder(new FineRoundBorder()); it.setBorder(new FineRoundBorder());
@ -148,7 +148,6 @@ public class RecyclePane extends AbstractSupportSelectTablePane<VcsTableEntity>
} }
tableTopPane.add(leftPane, BorderLayout.EAST); tableTopPane.add(leftPane, BorderLayout.EAST);
tableTopPane.add(rightPane, BorderLayout.WEST); tableTopPane.add(rightPane, BorderLayout.WEST);
tableTopPane.setBorder(new ScaledEmptyBorder(0, 0, 10, 0));
} }

4
designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ToolTipTableCellRenderer.java

@ -1,11 +1,11 @@
package com.fr.design.mainframe.vcs.ui; package com.fr.design.mainframe.vcs.ui;
import com.fine.theme.light.ui.FineTableHeaderUI;
import com.fr.general.GeneralUtils; import com.fr.general.GeneralUtils;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import javax.swing.JTable; import javax.swing.JTable;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.table.DefaultTableCellRenderer;
import java.awt.*; import java.awt.*;
@ -16,7 +16,7 @@ import java.awt.*;
* @since 11.0 * @since 11.0
* Created on 2023/7/21 * Created on 2023/7/21
*/ */
public class ToolTipTableCellRenderer extends DefaultTableCellRenderer { public class ToolTipTableCellRenderer extends FineTableHeaderUI.TableRenderer {
@Override @Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

1
designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java

@ -127,6 +127,7 @@ public class VcsNewPane extends RecyclePane {
this.operatorPane = createOperatorPane(); this.operatorPane = createOperatorPane();
this.model.setDefaultEditor(VcsOperatorPane.class, new VcsCellEditor(createOperatorPane())); this.model.setDefaultEditor(VcsOperatorPane.class, new VcsCellEditor(createOperatorPane()));
this.model.setDefaultRenderer(VcsOperatorPane.class, new VcsCellRender(createOperatorPane())); this.model.setDefaultRenderer(VcsOperatorPane.class, new VcsCellRender(createOperatorPane()));
this.model.setDefaultRenderer(UILabel.class, new ToolTipTableCellRenderer());
} }

2
designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsOperatorPane.java

@ -46,7 +46,7 @@ public class VcsOperatorPane extends JPanel {
panel.add(value); panel.add(value);
} }
panel.setOpaque(false); panel.setOpaque(false);
add(column(flex(), row(fix(4), cell(panel)), flex()) add(column(flex(), row(fix(6), cell(panel)), flex())
.with(it -> { .with(it -> {
it.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 1, UIManager.getColor("defaultBorderColor"))); it.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 1, UIManager.getColor("defaultBorderColor")));
it.setBackground(FlatUIUtils.getUIColor("background.normal", Color.WHITE)); it.setBackground(FlatUIUtils.getUIColor("background.normal", Color.WHITE));

1
designer-base/src/main/java/com/fr/design/style/AbstractSelectBox.java

@ -45,6 +45,7 @@ public abstract class AbstractSelectBox<T> extends AbstractPopBox implements Mou
// 初始化组件布局 // 初始化组件布局
JPanel displayPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel displayPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
displayPane.setBorder(null); displayPane.setBorder(null);
displayPane.setOpaque(false);
displayPane.add(displayComponent, BorderLayout.CENTER); displayPane.add(displayComponent, BorderLayout.CENTER);
displayComponent.setSize(new Dimension(preWidth, displayPane.getPreferredSize().height)); displayComponent.setSize(new Dimension(preWidth, displayPane.getPreferredSize().height));
// 添加事件监听 // 添加事件监听

19
designer-base/src/main/java/com/fr/design/style/FormatPane.java

@ -22,10 +22,10 @@ import com.fr.general.ComparatorUtils;
import com.fr.stable.ArrayUtils; import com.fr.stable.ArrayUtils;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup; import javax.swing.ButtonGroup;
import javax.swing.DefaultListCellRenderer; import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel; import javax.swing.DefaultListModel;
import javax.swing.JLabel;
import javax.swing.JList; import javax.swing.JList;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JScrollPane; import javax.swing.JScrollPane;
@ -139,21 +139,24 @@ public class FormatPane extends BasicPane {
patternList.setCellRenderer(new DefaultListCellRenderer(){ patternList.setCellRenderer(new DefaultListCellRenderer(){
public Component getListCellRendererComponent(JList list, Object value, public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) { int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); JLabel renderer = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
setOpaque(false); list.setSelectionBackground(UIManager.getColor("List.selectBackgroundColor"));
return this; setOpaque(true);
if (isSelected) {
renderer.setBackground(list.getSelectionBackground());
} else {
renderer.setBackground(list.getBackground());
}
return renderer;
} }
}); });
patternList.setBackground(FlatUIUtils.getUIColor("background.normal", Color.WHITE));
patternList.addListSelectionListener(patternListSelectionListener); patternList.addListSelectionListener(patternListSelectionListener);
} }
private JScrollPane initPatternScrollPanel() { private JScrollPane initPatternScrollPanel() {
JScrollPane scrollPane = new JScrollPane(patternList); JScrollPane scrollPane = new JScrollPane(patternList);
patternList.setOpaque(false);
scrollPane.getViewport().setOpaque(false);
scrollPane.getVerticalScrollBar().setOpaque(false);
scrollPane.setBorder(new FineRoundBorder()); scrollPane.setBorder(new FineRoundBorder());
scrollPane.setBackground(FlatUIUtils.getUIColor("background.normal", Color.WHITE));
return scrollPane; return scrollPane;
} }

3
designer-base/src/main/java/com/fr/design/style/background/impl/ImageBackgroundPane.java

@ -1,6 +1,7 @@
package com.fr.design.style.background.impl; package com.fr.design.style.background.impl;
import com.fine.theme.light.ui.FineRoundBorder; import com.fine.theme.light.ui.FineRoundBorder;
import com.fine.theme.utils.FineUIStyle;
import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.ui.FlatUIUtils;
import com.fr.base.Style; import com.fr.base.Style;
import com.fr.base.background.ImageBackground; import com.fr.base.background.ImageBackground;
@ -66,7 +67,7 @@ public class ImageBackgroundPane extends BackgroundDetailPane {
this.add(column( this.add(column(
5, 5,
cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview"))), cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview"))).with(it -> FineUIStyle.setStyle(it, FineUIStyle.LABEL_TIP)),
row( row(
10, 10,
cell(new JScrollPane(previewPane)).with(it -> { cell(new JScrollPane(previewPane)).with(it -> {

3
designer-base/src/main/java/com/fr/design/style/color/DetailColorSelectPane.java

@ -12,6 +12,7 @@ import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import com.fine.theme.light.ui.FineRoundBorder; import com.fine.theme.light.ui.FineRoundBorder;
import com.fine.theme.utils.FineUIStyle;
import com.fine.theme.utils.FineUIUtils; import com.fine.theme.utils.FineUIUtils;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
@ -79,7 +80,7 @@ public class DetailColorSelectPane extends BasicPane {
row( row(
20, 20,
cell(colorSelectPane.transparentButton).weight(0.3), cell(colorSelectPane.transparentButton).weight(0.3),
cell(new UILabel("<html><font color=gray>" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview") + "</font></html>")).weight(0.53) cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview"))).weight(0.53).with(it -> FineUIStyle.setStyle(it, FineUIStyle.LABEL_TIP))
), ),
row( row(
20, 20,

44
designer-base/src/main/java/com/fr/design/write/submit/DBManipulationPane.java

@ -3,6 +3,7 @@ package com.fr.design.write.submit;
import com.fine.swing.ui.layout.Layouts; import com.fine.swing.ui.layout.Layouts;
import com.fine.theme.icon.LazyIcon; import com.fine.theme.icon.LazyIcon;
import com.fine.swing.ui.layout.Spacer; import com.fine.swing.ui.layout.Spacer;
import com.fine.theme.light.ui.FineTableHeaderUI;
import com.fine.theme.utils.FineClientProperties; import com.fine.theme.utils.FineClientProperties;
import com.fine.theme.utils.FineUIScale; import com.fine.theme.utils.FineUIScale;
import com.fine.theme.utils.FineUIUtils; import com.fine.theme.utils.FineUIUtils;
@ -55,12 +56,15 @@ import com.fr.write.config.InsertConfig;
import com.fr.write.config.IntelliDMLConfig; import com.fr.write.config.IntelliDMLConfig;
import com.fr.write.config.UpdateConfig; import com.fr.write.config.UpdateConfig;
import java.awt.*;
import java.awt.event.WindowAdapter; import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; import java.awt.event.WindowEvent;
import javax.swing.AbstractCellEditor; import javax.swing.AbstractCellEditor;
import javax.swing.BorderFactory;
import javax.swing.DefaultCellEditor; import javax.swing.DefaultCellEditor;
import javax.swing.DefaultComboBoxModel; import javax.swing.DefaultComboBoxModel;
import javax.swing.Icon; import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JList; import javax.swing.JList;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.JPanel; import javax.swing.JPanel;
@ -70,17 +74,14 @@ import javax.swing.JTree;
import javax.swing.ListSelectionModel; import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.plaf.UIResource;
import javax.swing.table.AbstractTableModel; import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn; import javax.swing.table.TableColumn;
import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.DefaultTreeModel;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Window;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter; import java.awt.event.FocusAdapter;
@ -172,9 +173,7 @@ public class DBManipulationPane extends BasicBeanPane<DBManipulation> {
keyColumnValuesTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); keyColumnValuesTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
keyColumnValuesTable.setPreferredScrollableViewportSize(FineUIScale.scale(new Dimension(280, 150))); keyColumnValuesTable.setPreferredScrollableViewportSize(FineUIScale.scale(new Dimension(280, 150)));
keyColumnValuesTable.setShowHorizontalLines(true); keyColumnValuesTable.setShowHorizontalLines(true);
DefaultTableCellRenderer headerRenderer = new DefaultTableCellRenderer(); keyColumnValuesTable.getTableHeader().setUI(new FineTableHeaderUI());
headerRenderer.setHorizontalAlignment(SwingConstants.LEFT);
keyColumnValuesTable.getTableHeader().setDefaultRenderer(headerRenderer);
northPane.add(column(10, northPane.add(column(10,
cell(FineUIUtils.wrapComponentWithTitle(typePane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Write_Submit_Type"))), cell(FineUIUtils.wrapComponentWithTitle(typePane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Write_Submit_Type"))),
@ -700,7 +699,7 @@ public class DBManipulationPane extends BasicBeanPane<DBManipulation> {
private void initJTableColumn() { private void initJTableColumn() {
TableColumn column0 = this.keyColumnValuesTable.getColumnModel().getColumn(0); TableColumn column0 = this.keyColumnValuesTable.getColumnModel().getColumn(0);
column0.setMaxWidth(50); column0.setMaxWidth(50);
column0.setCellRenderer(new ColumnNameTableCellRenderer()); column0.setCellRenderer(new BooleanRenderer());
TableColumn column1 = this.keyColumnValuesTable.getColumnModel().getColumn(1); TableColumn column1 = this.keyColumnValuesTable.getColumnModel().getColumn(1);
column1.setCellRenderer(new ColumnNameTableCellRenderer()); column1.setCellRenderer(new ColumnNameTableCellRenderer());
@ -1187,7 +1186,7 @@ public class DBManipulationPane extends BasicBeanPane<DBManipulation> {
/* /*
* ColumnNameTableCellRenderer * ColumnNameTableCellRenderer
*/ */
public static class ColumnNameTableCellRenderer extends DefaultTableCellRenderer { public static class ColumnNameTableCellRenderer extends FineTableHeaderUI.TableRenderer {
@Override @Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
@ -1203,7 +1202,7 @@ public class DBManipulationPane extends BasicBeanPane<DBManipulation> {
/* /*
* ColumnValueTableCellRenderer * ColumnValueTableCellRenderer
*/ */
private static class ColumnValueTableCellRenderer extends DefaultTableCellRenderer { private static class ColumnValueTableCellRenderer extends FineTableHeaderUI.TableRenderer {
@Override @Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
@ -1224,4 +1223,25 @@ public class DBManipulationPane extends BasicBeanPane<DBManipulation> {
return this; return this;
} }
} }
/**
* checkBox cellRender
*/
public static class BooleanRenderer extends UICheckBox implements TableCellRenderer, UIResource {
public BooleanRenderer() {
super();
setHorizontalAlignment(JLabel.CENTER);
setBorderPainted(true);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
setSelected((value != null && ((Boolean) value).booleanValue()));
setUI(getUICheckBoxUI());
setBorder(BorderFactory.createMatteBorder(0, 0, 1, 1, UIManager.getColor("defaultBorderColor")));
setBackground(Color.WHITE);
return this;
}
}
} }

29
designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLightLaf.properties

@ -427,9 +427,10 @@ HelpButton.innerFocusWidth = $?Button.innerFocusWidth
List.border = 0,0,0,0 List.border = 0,0,0,0
List.cellMargins = 1,12,1,12 List.cellMargins = 1,12,1,12
List.selectionInsets = 0,0,0,0 List.selectionInsets = 0,4,0,4
List.selectionArc = 0 List.selectionArc = 2
List.cellFocusColor = @cellFocusColor List.cellFocusColor = @cellFocusColor
List.selectionBackground = fade(#2576EF,12%)
List.cellNoFocusBorder = com.formdev.flatlaf.ui.FlatListCellBorder$Default List.cellNoFocusBorder = com.formdev.flatlaf.ui.FlatListCellBorder$Default
List.focusCellHighlightBorder = com.formdev.flatlaf.ui.FlatListCellBorder$Focused List.focusCellHighlightBorder = com.formdev.flatlaf.ui.FlatListCellBorder$Focused
List.focusSelectedCellHighlightBorder = com.formdev.flatlaf.ui.FlatListCellBorder$Selected List.focusSelectedCellHighlightBorder = com.formdev.flatlaf.ui.FlatListCellBorder$Selected
@ -742,8 +743,8 @@ GradientBar.recHeight=30
#---- Spinner ---- #---- Spinner ----
Spinner.border = com.formdev.flatlaf.ui.FlatRoundBorder Spinner.border = com.formdev.flatlaf.ui.FlatRoundBorder
Spinner.background = @componentBackground Spinner.background = $fill.normal
Spinner.buttonBackground = darken($Spinner.background,2%) Spinner.buttonBackground = $fill.normal
Spinner.buttonSeparatorColor = $Component.borderColor Spinner.buttonSeparatorColor = $Component.borderColor
Spinner.buttonDisabledSeparatorColor = $Component.disabledBorderColor Spinner.buttonDisabledSeparatorColor = $Component.disabledBorderColor
Spinner.buttonArrowColor = @buttonArrowColor Spinner.buttonArrowColor = @buttonArrowColor
@ -898,7 +899,7 @@ Table.scrollPaneBorder = com.formdev.flatlaf.ui.FlatBorder
Table.ascendingSortIcon = com.formdev.flatlaf.icons.FlatAscendingSortIcon Table.ascendingSortIcon = com.formdev.flatlaf.icons.FlatAscendingSortIcon
Table.descendingSortIcon = com.formdev.flatlaf.icons.FlatDescendingSortIcon Table.descendingSortIcon = com.formdev.flatlaf.icons.FlatDescendingSortIcon
Table.sortIconColor = @icon Table.sortIconColor = @icon
Table.cellMargins = 2,3,2,3 Table.cellMargins = 2,6,2,3
Table.cellFocusColor = @cellFocusColor Table.cellFocusColor = @cellFocusColor
Table.cellNoFocusBorder = com.formdev.flatlaf.ui.FlatTableCellBorder$Default Table.cellNoFocusBorder = com.formdev.flatlaf.ui.FlatTableCellBorder$Default
Table.focusCellHighlightBorder = com.formdev.flatlaf.ui.FlatTableCellBorder$Focused Table.focusCellHighlightBorder = com.formdev.flatlaf.ui.FlatTableCellBorder$Focused
@ -913,13 +914,14 @@ Table.dropCellForeground = @dropCellForeground
Table.dropLineColor = @dropLineColor Table.dropLineColor = @dropLineColor
Table.dropLineShortColor = @dropLineShortColor Table.dropLineShortColor = @dropLineShortColor
Table.gridColor = darken($Table.background,8%) Table.gridColor = darken($Table.background,8%)
Table.default.background = $default.background
#---- TableHeader ---- #---- TableHeader ----
TableHeader.height = 25 TableHeader.height = 25
TableHeader.cellBorder = com.formdev.flatlaf.ui.FlatTableHeaderBorder TableHeader.cellBorder = com.formdev.flatlaf.ui.FlatTableHeaderBorder
TableHeader.cellMargins = 2,3,2,3 TableHeader.cellMargins = 2,6,2,3
TableHeader.focusCellBackground = $TableHeader.background TableHeader.focusCellBackground = $TableHeader.background
TableHeader.background = @componentBackground TableHeader.background = @componentBackground
TableHeader.showTrailingVerticalLine = false TableHeader.showTrailingVerticalLine = false
@ -1148,6 +1150,10 @@ Tree.icon.closedColor = @icon
Tree.icon.openColor = @icon Tree.icon.openColor = @icon
Tree.hash = darken($Tree.background,10%) Tree.hash = darken($Tree.background,10%)
# ---- DottedLine ----
DottedLine.defaultColor=@BrandColor
#---- West ---- #---- West ----
West.border = $defaultBorderColor West.border = $defaultBorderColor
#---- ExpandablePane ---- #---- ExpandablePane ----
@ -1362,3 +1368,14 @@ chart.selectedBorderColor = #2576EF
hoverBackground: #E6E9EF; \ hoverBackground: #E6E9EF; \
pressedBackground: #DADEE7; \ pressedBackground: #DADEE7; \
selectedBackground: null selectedBackground: null
[style]Table.defaultTable = \
background: $Table.default.background
[style]Button.whiteButton = \
border: com.fine.theme.light.ui.FineRoundBorder; \
background: $fill.normal
[style]Button.originalButton = \
border: 4,4,4,4; \
background: null;

111
designer-base/src/test/java/com/fr/design/gui/storybook/components/TableStoryBoard.java

@ -0,0 +1,111 @@
package com.fr.design.gui.storybook.components;
import com.fine.theme.light.ui.FineRoundBorder;
import com.fine.theme.light.ui.FineTableHeaderUI;
import com.fine.theme.light.ui.FineTableScrollBarPaneUI;
import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.storybook.StoryBoard;
import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.plaf.UIResource;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.column;
public class TableStoryBoard extends StoryBoard {
public TableStoryBoard() {
super("表格");
DefaultTableModel model1 = new DefaultTableModel(new Object[][] {
{"1", "Alice", "Female", "Engineering"},
{"2", "Bob", "Male", "Marketing"},
{"3", "Carol", "Female", "Design"},
{"4", "Dave", "Male", "Finance"},
{"4", "Dave", "Male", "Finance"},
{"4", "Dave", "Male", "Finance"},
{"4", "Dave", "Male", "Finance"},
{"4", "Dave", "Male", "Finance"},
{"4", "Dave", "Male", "Finance"},
{"4", "Dave", "Male", "Finance"},
{"4", "Dave", "Male", "Finance"},
{"4", "Dave", "Male", "Finance"},
{"4", "Dave", "Male", "Finance"},
{"4", "Dave", "Male", "Finance"},
{"4", "Dave", "Male", "Finance"},
{"4", "Dave", "Male", "Finance"},
{"4", "Dave", "Male", "Finance"},
{"4", "Dave", "Male", "Finance"},
{"4", "Dave", "Male", "Finance"},
{"4", "Dave", "Male", "Finance"},
{"4", "Dave", "Male", "Finance"},
{"4", "Dave", "Male", "Finance"}
}, new String[] {"ID", "Name", "Gender", "Department"});
JTable table1 = new JTable(model1);
table1.getTableHeader().setUI(new FineTableHeaderUI());
DefaultTableModel model2 = new DefaultTableModel(new Object[][] {
{"1", "Alice", "Female", "Engineering"},
{"2", "Bob", "Male", "Marketing"},
{"3", "Carol", "Female", "Design"},
{"4", "Dave", "Male", "Finance"}
}, new String[] {"ID", "Name", "Gender", "Department"});
JTable table2 = new JTable(model2);
table2.getTableHeader().setUI(new FineTableHeaderUI());
DefaultTableModel model3 = new DefaultTableModel(new Object[][] {
{false, "1", "Alice", "Female", "Engineering"},
{false, "2", "Bob", "Male", "Marketing"},
{false, "3", "Carol", "Female", "Design"},
{false, "4", "Dave", "Male", "Finance"}
}, new String[] {"选中", "ID", "Name", "Gender", "Department"}) {
private static final long serialVersionUID = 1L;
Class<?>[] types = new Class<?>[]{Boolean.class, UILabel.class, UILabel.class, UILabel.class, UILabel.class};
public Class<?> getColumnClass(int columnIndex) {
return types[columnIndex];
}
};
JTable table3 = new JTable(model3);
table3.getTableHeader().setUI(new FineTableHeaderUI());
table3.getTableHeader().getColumnModel().getColumn(0).setCellRenderer(new BooleanRenderer());
add(column(20, cell(new UIScrollPane(table1)).with(this::setFixSize).with(it -> it.getVerticalScrollBar().setUI(new FineTableScrollBarPaneUI(table1))),
cell(new UIScrollPane(table2)).with(this::setFixSize),
cell(new UIScrollPane(table3)).with(this::setFixSize)).getComponent());
}
private void setFixSize(JComponent component) {
component.setPreferredSize(new Dimension(component.getWidth(), 150));
component.setBorder(new FineRoundBorder());
}
public static class BooleanRenderer extends JCheckBox implements TableCellRenderer, UIResource {
public BooleanRenderer() {
super();
setHorizontalAlignment(JLabel.CENTER);
setOpaque(false);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
setSelected((value != null && ((Boolean) value).booleanValue()));
setBorder(BorderFactory.createMatteBorder(0, 0, 1, 1, UIManager.getColor("defaultBorderColor")));
setBackground(Color.WHITE);
return this;
}
}
}

2
designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java

@ -159,7 +159,7 @@ public class ITReplaceNorthPanel {
public ITReplaceNorthPanel() { public ITReplaceNorthPanel() {
cardLayout = new CardLayout(); cardLayout = new CardLayout();
cardPanel = new JPanel(cardLayout); cardPanel = new JPanel(cardLayout);
cardPanel.setBorder(new ScaledEmptyBorder(20, 20, 20, 20)); cardPanel.setBorder(new ScaledEmptyBorder(20, 20, 10, 20));
upContentPanel = new JPanel(null); upContentPanel = new JPanel(null);
upSettingPanel = new JPanel(null); upSettingPanel = new JPanel(null);

1
designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceSouthPanel.java

@ -3,7 +3,6 @@ package com.fr.design.actions.replace.ui;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.RowSorter; import javax.swing.RowSorter;
import javax.swing.table.TableRowSorter; import javax.swing.table.TableRowSorter;
import java.awt.Color;
/** /**
* 下面板 * 下面板

13
designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java

@ -1,17 +1,8 @@
package com.fr.design.actions.replace.ui; package com.fr.design.actions.replace.ui;
import com.fine.theme.icon.LazyIcon; import com.fine.theme.icon.LazyIcon;
import com.fr.base.TRL;
import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.JTemplate;
import com.fr.file.FILE;
import com.fr.file.FILEFactory;
import com.fr.general.GeneralUtils;
import com.fr.stable.StringUtils;
import javax.swing.AbstractCellEditor; import javax.swing.AbstractCellEditor;
@ -21,10 +12,6 @@ import javax.swing.UIManager;
import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer; import javax.swing.table.TableCellRenderer;
import java.awt.Component; import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import static com.fr.design.actions.replace.ui.ITTableEditorPane.getEditTable;
/** /**
* 放进表格中的定位按钮 * 放进表格中的定位按钮

1
designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditor.java

@ -60,7 +60,6 @@ public class ITTableEditor extends UITableModelAdapter {
}); });
this.setDefaultRenderer(UILabel.class, new UITableEditorPane.TableRenderer());
this.setDefaultEditor(ITTableButton.class, new ITTableButton()); this.setDefaultEditor(ITTableButton.class, new ITTableButton());
this.setDefaultRenderer(ITTableButton.class, new ITTableButton()); this.setDefaultRenderer(ITTableButton.class, new ITTableButton());
this.setDefaultEditor(Boolean.class, new ITBooleanEditor()); this.setDefaultEditor(Boolean.class, new ITBooleanEditor());

30
designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditorPane.java

@ -1,21 +1,25 @@
package com.fr.design.actions.replace.ui; package com.fr.design.actions.replace.ui;
import com.fine.theme.icon.LazyIcon; import com.fine.theme.icon.LazyIcon;
import com.fine.theme.light.ui.FineTableHeaderUI;
import com.fine.theme.light.ui.FineTableScrollBarPaneUI;
import com.fine.theme.utils.FineUIStyle;
import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.ui.FlatUIUtils;
import com.fr.base.TRL; import com.fr.base.TRL;
import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.dialog.BasicPane;
import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.itableeditorpane.UITableEditAction; import com.fr.design.gui.itableeditorpane.UITableEditAction;
import com.fr.design.gui.itableeditorpane.UITableEditorPane;
import com.fr.design.gui.itableeditorpane.UITableModelAdapter; import com.fr.design.gui.itableeditorpane.UITableModelAdapter;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.share.ui.base.MouseClickListener; import com.fr.design.mainframe.share.ui.base.MouseClickListener;
import com.fr.general.GeneralUtils; import com.fr.general.GeneralUtils;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import sun.swing.DefaultLookup;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
@ -28,10 +32,8 @@ import javax.swing.SwingConstants;
import javax.swing.UIManager; import javax.swing.UIManager;
import javax.swing.table.JTableHeader; import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer; import javax.swing.table.TableCellRenderer;
import java.awt.BorderLayout;
import java.awt.Color; import java.awt.Color;
import java.awt.Component; import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.util.List; import java.util.List;
@ -47,13 +49,15 @@ import static com.fine.swing.ui.layout.Layouts.cell;
* @since * @since
* Created On * Created On
*/ */
public class ITTableEditorPane<T> extends UITableEditorPane<T> { public class ITTableEditorPane<T> extends BasicPane {
public static JTable editTable;
private UITableModelAdapter<T> tableModel;
private String leftLabelName; private String leftLabelName;
private JPanel buttonPane; private JPanel buttonPane;
public ITTableEditorPane(UITableModelAdapter<T> model) { public ITTableEditorPane(UITableModelAdapter<T> model) {
super(model); this.tableModel = model;
this.initComponent(model.createAction());
} }
@ -65,6 +69,7 @@ public class ITTableEditorPane<T> extends UITableEditorPane<T> {
public void initComponent(UITableEditAction[] action) { public void initComponent(UITableEditAction[] action) {
this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setLayout(FRGUIPaneFactory.createBorderLayout());
editTable = tableModel.createTable(); editTable = tableModel.createTable();
FineUIStyle.setStyle(editTable, FineUIStyle.DEFAULT_TABLE);
editTable.addMouseListener(new MouseClickListener() { editTable.addMouseListener(new MouseClickListener() {
@Override @Override
public void mouseClicked(MouseEvent e) { public void mouseClicked(MouseEvent e) {
@ -88,9 +93,10 @@ public class ITTableEditorPane<T> extends UITableEditorPane<T> {
} }
}); });
UIScrollPane scrollPane = new UIScrollPane(editTable);
add(cell(buildScrollTablePane(scrollPane)).weight(1).getComponent()); UIScrollPane scrollPane = new UIScrollPane(editTable);
scrollPane.getVerticalScrollBar().setUI(new FineTableScrollBarPaneUI(editTable));
add(cell(scrollPane).weight(1).getComponent());
} }
/** /**
@ -136,7 +142,7 @@ public class ITTableEditorPane<T> extends UITableEditorPane<T> {
/** /**
* 表头渲染 * 表头渲染
*/ */
public static class ITHeaderRenderer implements TableCellRenderer { public static class ITHeaderRenderer extends FineTableHeaderUI.TableHeaderRenderer {
JTableHeader tableHeader; JTableHeader tableHeader;
final UICheckBox selectBox; final UICheckBox selectBox;
private boolean ascSort = true; private boolean ascSort = true;
@ -221,8 +227,8 @@ public class ITTableEditorPane<T> extends UITableEditorPane<T> {
component.setForeground(tableHeader.getForeground()); component.setForeground(tableHeader.getForeground());
component.setBackground(tableHeader.getBackground()); component.setBackground(tableHeader.getBackground());
component.setFont(tableHeader.getFont()); component.setFont(tableHeader.getFont());
if (column == table.getColumnCount() - 1) { if (column != ITReplaceSouthPanel.CHECKBOX_INDEX) {
component.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, UIManager.getColor("defaultBorderColor"))); component.setBorder(DefaultLookup.getBorder(this, this.ui, "TableHeader.cellBorder"));
} else { } else {
component.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 1, UIManager.getColor("defaultBorderColor"))); component.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 1, UIManager.getColor("defaultBorderColor")));
} }
@ -239,7 +245,7 @@ public class ITTableEditorPane<T> extends UITableEditorPane<T> {
* @param table * @param table
*/ */
public static void makeFace(JTable table) { public static void makeFace(JTable table) {
table.getTableHeader().setBackground(FlatUIUtils.getUIColor("TableHeader.background", Color.WHITE)); table.getTableHeader().setUI(new FineTableHeaderUI());
table.getTableHeader().setDefaultRenderer(new ITHeaderRenderer(table)); table.getTableHeader().setDefaultRenderer(new ITHeaderRenderer(table));
} }

7
designer-realize/src/main/java/com/fr/design/cell/smartaction/SmartJTablePane.java

@ -3,6 +3,8 @@ package com.fr.design.cell.smartaction;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Window; import java.awt.Window;
import com.fine.theme.light.ui.FineTableHeaderUI;
import com.fine.theme.light.ui.FineTableScrollBarPaneUI;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import javax.swing.JScrollPane; import javax.swing.JScrollPane;
@ -60,6 +62,7 @@ public abstract class SmartJTablePane extends BasicPane {
// BasicPane的center放JTable // BasicPane的center放JTable
table = new JTable(model); table = new JTable(model);
this.add(scrollPane = new JScrollPane(table), BorderLayout.CENTER); this.add(scrollPane = new JScrollPane(table), BorderLayout.CENTER);
scrollPane.getVerticalScrollBar().setUI(new FineTableScrollBarPaneUI(table));
// 鼠标切换选中项时,editingRowIndex也要跟着变 // 鼠标切换选中项时,editingRowIndex也要跟着变
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@ -73,9 +76,7 @@ public abstract class SmartJTablePane extends BasicPane {
} }
} }
}); });
DefaultTableCellRenderer headerRenderer = new DefaultTableCellRenderer(); table.getTableHeader().setUI(new FineTableHeaderUI());
headerRenderer.setHorizontalAlignment(SwingConstants.LEFT);
table.getTableHeader().setDefaultRenderer(headerRenderer);
setCellRenderer(); setCellRenderer();
actionReportPane.addSelectionChangeListener(gridSelectionChangeL); actionReportPane.addSelectionChangeListener(gridSelectionChangeL);

3
designer-realize/src/main/java/com/fr/design/condition/ForeGroundPane.java

@ -13,6 +13,8 @@ import java.awt.*;
import static com.fine.swing.ui.layout.Layouts.cell; import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.row; import static com.fine.swing.ui.layout.Layouts.row;
import static com.fine.theme.utils.FineClientProperties.ADAPTIVE_COMBO_BOX;
import static com.fine.theme.utils.FineClientProperties.COMBO_BOX_TYPE;
/** /**
* @author richie * @author richie
@ -34,6 +36,7 @@ public class ForeGroundPane extends ConditionAttrSingleConditionPane<HighlightAc
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Current_Cell"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Current_Cell"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Current_Row"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Current_Row"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Current_Column") }); com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Current_Column") });
this.foreScopeComboBox.putClientProperty(COMBO_BOX_TYPE, ADAPTIVE_COMBO_BOX);
this.foregroundColorPane.setSelectObject(Color.black); this.foregroundColorPane.setSelectObject(Color.black);
this.setLayout(new BorderLayout()); this.setLayout(new BorderLayout());

3
designer-realize/src/main/java/com/fr/design/condition/PaddingPane.java

@ -23,6 +23,8 @@ import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.column; import static com.fine.swing.ui.layout.Layouts.column;
import static com.fine.swing.ui.layout.Layouts.flex; import static com.fine.swing.ui.layout.Layouts.flex;
import static com.fine.swing.ui.layout.Layouts.row; import static com.fine.swing.ui.layout.Layouts.row;
import static com.fine.theme.utils.FineClientProperties.ADAPTIVE_COMBO_BOX;
import static com.fine.theme.utils.FineClientProperties.COMBO_BOX_TYPE;
/** /**
* @author richie * @author richie
@ -49,6 +51,7 @@ public class PaddingPane extends ConditionAttrSingleConditionPane<HighlightActio
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Current_Cell"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Current_Cell"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Current_Row"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Current_Row"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Current_Column") }); com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Current_Column") });
this.paddingScopeComboBox.putClientProperty(COMBO_BOX_TYPE, ADAPTIVE_COMBO_BOX);
this.paddingLeftSpinner.setValue(new Integer(0)); this.paddingLeftSpinner.setValue(new Integer(0));
this.paddingRightSpinner.setValue(new Integer(0)); this.paddingRightSpinner.setValue(new Integer(0));
GeneralContext.listenPluginRunningChanged(new PluginEventListener() { GeneralContext.listenPluginRunningChanged(new PluginEventListener() {

3
designer-realize/src/main/java/com/fr/design/condition/PagePane.java

@ -11,6 +11,8 @@ import java.awt.BorderLayout;
import static com.fine.swing.ui.layout.Layouts.cell; import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.row; import static com.fine.swing.ui.layout.Layouts.row;
import static com.fine.theme.utils.FineClientProperties.ADAPTIVE_COMBO_BOX;
import static com.fine.theme.utils.FineClientProperties.COMBO_BOX_TYPE;
/** /**
* @author richie * @author richie
@ -30,6 +32,7 @@ public class PagePane extends ConditionAttrSingleConditionPane<HighlightAction>
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cell_Write_Page_Before_Row"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cell_Write_Page_Before_Row"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cell_Write_Page_After_Column"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cell_Write_Page_After_Column"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cell_Write_Page_Before_Column") }); com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cell_Write_Page_Before_Column") });
this.pageComboBox.putClientProperty(COMBO_BOX_TYPE, ADAPTIVE_COMBO_BOX);
this.pageComboBox.setSelectedIndex(0); this.pageComboBox.setSelectedIndex(0);
this.setLayout(new BorderLayout()); this.setLayout(new BorderLayout());

25
designer-realize/src/main/java/com/fr/design/headerfooter/HeaderFooterEditPane.java

@ -5,9 +5,9 @@ package com.fr.design.headerfooter;
import com.fine.theme.icon.LazyIcon; import com.fine.theme.icon.LazyIcon;
import com.fine.theme.light.ui.FineRoundBorder; import com.fine.theme.light.ui.FineRoundBorder;
import com.fine.theme.utils.FineUIStyle;
import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.ui.FlatUIUtils;
import com.formdev.flatlaf.util.ScaledEmptyBorder; import com.formdev.flatlaf.util.ScaledEmptyBorder;
import com.fr.base.BaseUtils;
import com.fr.base.GraphHelper; import com.fr.base.GraphHelper;
import com.fr.base.PaperSize; import com.fr.base.PaperSize;
import com.fr.base.ScreenResolution; import com.fr.base.ScreenResolution;
@ -29,7 +29,6 @@ import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.ispinner.UISpinner; import com.fr.design.gui.ispinner.UISpinner;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.style.background.BackgroundPane; import com.fr.design.style.background.BackgroundPane;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.Background; import com.fr.general.Background;
import com.fr.page.ReportSettingsProvider; import com.fr.page.ReportSettingsProvider;
import com.fr.report.core.ReportHF; import com.fr.report.core.ReportHF;
@ -40,10 +39,8 @@ import com.fr.stable.unit.INCH;
import com.fr.stable.unit.MM; import com.fr.stable.unit.MM;
import com.fr.stable.unit.UNIT; import com.fr.stable.unit.UNIT;
import javax.swing.BorderFactory;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JScrollPane; import javax.swing.JScrollPane;
import javax.swing.JToolBar;
import javax.swing.JViewport; import javax.swing.JViewport;
import javax.swing.Scrollable; import javax.swing.Scrollable;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
@ -67,6 +64,7 @@ import java.awt.geom.Rectangle2D;
import static com.fine.swing.ui.layout.Layouts.cell; import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.column; import static com.fine.swing.ui.layout.Layouts.column;
import static com.fine.swing.ui.layout.Layouts.fix;
import static com.fine.swing.ui.layout.Layouts.row; import static com.fine.swing.ui.layout.Layouts.row;
/** /**
@ -133,36 +131,33 @@ public class HeaderFooterEditPane extends JPanel {
private void addCenterPanel() { private void addCenterPanel() {
JPanel controlContentPane = row( JPanel controlContentPane = row(
2, 4,
cell(createContainerSection(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_HF_Left_Section") + ":", leftHFContainer)).weight(0.1), cell(createContainerSection(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_HF_Left_Section") + ":", leftHFContainer)).weight(0.1),
cell(createContainerSection(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_HF_Center_Section") + ":", centerHFContainer)).weight(0.1), cell(createContainerSection(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_HF_Center_Section") + ":", centerHFContainer)).weight(0.1),
cell(createContainerSection(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_HF_Right_Section") + ":", rightHFContainer)).weight(0.1) cell(createContainerSection(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_HF_Right_Section") + ":", rightHFContainer)).weight(0.1)
).getComponent(); ).getComponent();
initToolbar();
JPanel centerPane = JPanel centerPane =
column( column(
10, 10,
cell(createToolbar()), cell(iconToolPanel),
cell(controlContentPane).weight(0.3), cell(controlContentPane).weight(0.3),
column( column(
2, 2,
cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview"))).weight(0.1), cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview"))).weight(0.1).with(it -> FineUIStyle.setStyle(it, FineUIStyle.LABEL_TIP)),
cell(scrollPreviewPane).weight(1.2).with(it -> it.setBorder(new FineRoundBorder())) cell(scrollPreviewPane).weight(1.2).with(it -> it.setBorder(new FineRoundBorder()))
).weight(0.75) ).weight(0.75)
).with(it -> it.setBorder(new ScaledEmptyBorder(0,10,0,0))).getComponent(); ).with(it -> it.setBorder(new ScaledEmptyBorder(0,10,0,0))).getComponent();
this.add(centerPane, BorderLayout.CENTER); this.add(centerPane, BorderLayout.CENTER);
} }
private JToolBar createToolbar() { private void initToolbar() {
//toolbar. //toolbar.
JToolBar toolbar = new JToolBar();
toolbar.setFloatable(false);
printBackgroundCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ReportGUI_Print_Background")); printBackgroundCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ReportGUI_Print_Background"));
headerUnitFieldPane = new AdjustHeightPane(); headerUnitFieldPane = new AdjustHeightPane();
footerUnitFieldPane = new AdjustHeightPane(); footerUnitFieldPane = new AdjustHeightPane();
headFootUnitFieldPane = new AdjustHeightPane(); headFootUnitFieldPane = new AdjustHeightPane();
initIconToolPanel(); initIconToolPanel();
toolbar.add(iconToolPanel);
return toolbar;
} }
private UIButton initCustomBackgroundButton() { private UIButton initCustomBackgroundButton() {
@ -191,7 +186,7 @@ public class HeaderFooterEditPane extends JPanel {
private void initIconToolPanel() { private void initIconToolPanel() {
iconToolPanel = row( iconToolPanel = row(
6, 2,
cell(this.createHFInsertButton(new TextHFElement())), cell(this.createHFInsertButton(new TextHFElement())),
cell(this.createHFInsertButton(new FormulaHFElement())), cell(this.createHFInsertButton(new FormulaHFElement())),
cell(this.createHFInsertButton(new PageNumberHFElement())), cell(this.createHFInsertButton(new PageNumberHFElement())),
@ -201,11 +196,13 @@ public class HeaderFooterEditPane extends JPanel {
cell(this.createHFInsertButton(new ImageHFElement())), cell(this.createHFInsertButton(new ImageHFElement())),
cell(this.createHFInsertButton(new NewLineHFElement())), cell(this.createHFInsertButton(new NewLineHFElement())),
cell(initCustomBackgroundButton()), cell(initCustomBackgroundButton()),
fix(6),
cell(printBackgroundCheckBox), cell(printBackgroundCheckBox),
fix(6),
row( row(
cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Height") + ":")), cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Height") + ":")),
cell(headFootUnitFieldPane) cell(headFootUnitFieldPane)
).with(it -> it.setBorder(new ScaledEmptyBorder(2,0,2,0))) )
).getComponent(); ).getComponent();
} }

11
designer-realize/src/main/java/com/fr/design/headerfooter/HeaderFooterPane.java

@ -59,7 +59,7 @@ public abstract class HeaderFooterPane extends BasicPane {
reportHFYypeList reportHFYypeList
.addListSelectionListener(reportHFTypeSelectionListener); .addListSelectionListener(reportHFTypeSelectionListener);
reportHFYypeList.setBackground(FlatUIUtils.getUIColor("background.normal", Color.WHITE)); reportHFYypeList.setBackground(FlatUIUtils.getUIColor("background.normal", Color.WHITE));
reportHFYypeList.setBorder(BorderFactory.createCompoundBorder(new FineRoundBorder(), new ScaledEmptyBorder(4, 4, 4, 4))); reportHFYypeList.setBorder(BorderFactory.createCompoundBorder(new FineRoundBorder(), new ScaledEmptyBorder(6, 2, 6, 2)));
JScrollPane hfTypeListScrollPane = new JScrollPane(reportHFYypeList); JScrollPane hfTypeListScrollPane = new JScrollPane(reportHFYypeList);
leftPane.add(hfTypeListScrollPane, BorderLayout.CENTER); leftPane.add(hfTypeListScrollPane, BorderLayout.CENTER);
@ -75,10 +75,10 @@ public abstract class HeaderFooterPane extends BasicPane {
.addElement(new Integer(ReportConstants.REPORTPAGE_EVEN)); .addElement(new Integer(ReportConstants.REPORTPAGE_EVEN));
// CenterPane. // CenterPane.
JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel centerPane = FRGUIPaneFactory.createScaledBorderLayout_S_Pane(0, 10);
this.add(centerPane, BorderLayout.CENTER); this.add(centerPane, BorderLayout.CENTER);
JPanel definePane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); JPanel definePane = new JPanel(new BorderLayout());
centerPane.add(definePane, BorderLayout.NORTH); centerPane.add(definePane, BorderLayout.NORTH);
defineCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Report_HF_Whether_To_Define_The_Selected_Type"), true); //是否定义选中的类型 defineCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Report_HF_Whether_To_Define_The_Selected_Type"), true); //是否定义选中的类型
@ -229,11 +229,6 @@ public abstract class HeaderFooterPane extends BasicPane {
return this; return this;
} }
@Override
public Dimension getPreferredSize() {
return new Dimension(super.getPreferredSize().width, FineUIScale.scale(24));
}
}; };

23
designer-realize/src/main/java/com/fr/design/report/NewReportBackgroundPane.java

@ -3,6 +3,7 @@ package com.fr.design.report;
import com.fine.swing.ui.layout.Layouts; import com.fine.swing.ui.layout.Layouts;
import com.fine.theme.light.ui.FineRoundBorder; import com.fine.theme.light.ui.FineRoundBorder;
import com.fine.theme.utils.FineUIScale; import com.fine.theme.utils.FineUIScale;
import com.fine.theme.utils.FineUIStyle;
import com.formdev.flatlaf.util.ScaledEmptyBorder; import com.formdev.flatlaf.util.ScaledEmptyBorder;
import com.fr.base.theme.ReportTheme; import com.fr.base.theme.ReportTheme;
import com.fr.base.theme.TemplateTheme; import com.fr.base.theme.TemplateTheme;
@ -34,9 +35,6 @@ import java.awt.Graphics2D;
import java.awt.Shape; import java.awt.Shape;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.column;
public class NewReportBackgroundPane extends BasicPane { public class NewReportBackgroundPane extends BasicPane {
private final UICheckBox isPrintBackgroundCheckBox; private final UICheckBox isPrintBackgroundCheckBox;
private final UICheckBox isExportBackgroundCheckBox; private final UICheckBox isExportBackgroundCheckBox;
@ -50,16 +48,9 @@ public class NewReportBackgroundPane extends BasicPane {
isPrintBackgroundCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Print_Background")); isPrintBackgroundCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Print_Background"));
isExportBackgroundCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Export_Background")); isExportBackgroundCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Export_Background"));
add(column(10, cell(profilePane).weight(1), cell(createBottomPane())).getComponent()); add(Layouts.column(10, Layouts.cell(profilePane).weight(1), Layouts.row(10, Layouts.cell(isPrintBackgroundCheckBox), Layouts.cell(isExportBackgroundCheckBox))).getComponent());
} }
private JPanel createBottomPane() {
JPanel container = new JPanel();
container.setPreferredSize(new Dimension(container.getPreferredSize().width, FineUIScale.scale(30)));
container.add(isExportBackgroundCheckBox);
container.add(isPrintBackgroundCheckBox);
return container;
}
@Override @Override
protected String title4PopupWindow() { protected String title4PopupWindow() {
@ -143,9 +134,9 @@ public class NewReportBackgroundPane extends BasicPane {
} }
}); });
JPanel contentContainer = column( JPanel contentContainer = Layouts.column(
10, 10,
Layouts.row(10, cell(createLeftPane()).weight(1), cell(createRightPane())).weight(1) Layouts.row(10, Layouts.cell(createLeftPane()).weight(1), Layouts.cell(createRightPane())).weight(1)
).getComponent(); ).getComponent();
contentContainer.setPreferredSize(FineUIScale.scale(new Dimension(600, 540))); contentContainer.setPreferredSize(FineUIScale.scale(new Dimension(600, 540)));
@ -169,10 +160,10 @@ public class NewReportBackgroundPane extends BasicPane {
JPanel panel = new JPanel(new BorderLayout()); JPanel panel = new JPanel(new BorderLayout());
panel.add(previewPane, BorderLayout.CENTER); panel.add(previewPane, BorderLayout.CENTER);
return column( return Layouts.column(
10, 10,
cell(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Preview"))), Layouts.cell(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Preview"))).with(it -> FineUIStyle.setStyle(it, FineUIStyle.LABEL_TIP)),
cell(panel).weight(1).with(it -> it.setBorder(new FineRoundBorder())) Layouts.cell(panel).weight(1).with(it -> it.setBorder(new FineRoundBorder()))
).getComponent(); ).getComponent();
} }

23
designer-realize/src/main/java/com/fr/design/report/ReportColumnsPane.java

@ -1,10 +1,10 @@
package com.fr.design.report; package com.fr.design.report;
import com.fine.theme.utils.FineUIScale; import com.fine.theme.utils.FineUIScale;
import com.fine.theme.utils.FineUIStyle;
import com.formdev.flatlaf.util.ScaledEmptyBorder; import com.formdev.flatlaf.util.ScaledEmptyBorder;
import com.fr.base.GraphHelper; import com.fr.base.GraphHelper;
import com.fr.design.border.UIRoundedBorder; import com.fr.design.border.UIRoundedBorder;
import com.fr.design.border.UITitledBorder;
import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.ibutton.UIButtonGroup; import com.fr.design.gui.ibutton.UIButtonGroup;
import com.fr.design.gui.ibutton.UIRadioButton; import com.fr.design.gui.ibutton.UIRadioButton;
@ -25,7 +25,6 @@ import com.fr.stable.Constants;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.SpinnerNumberModel; import javax.swing.SpinnerNumberModel;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
@ -36,7 +35,6 @@ import java.awt.Container;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.FlowLayout; import java.awt.FlowLayout;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
@ -127,7 +125,6 @@ public class ReportColumnsPane extends BasicPane{
buttonGroupPane.add(onOffButtonGroup); buttonGroupPane.add(onOffButtonGroup);
north.add(buttonGroupPane, BorderLayout.EAST); north.add(buttonGroupPane, BorderLayout.EAST);
this.setBorder(new ScaledEmptyBorder(10, 10, 10, 10));
JPanel northV2 = column( JPanel northV2 = column(
20, 20,
row( row(
@ -229,12 +226,12 @@ public class ReportColumnsPane extends BasicPane{
colButton.addActionListener(colChangeListener); colButton.addActionListener(colChangeListener);
return row( return row(
row( row(
3, 4,
column(cell(rowButton)), column(cell(rowButton)),
cell(new UILabel(IOUtils.readIcon("/com/fr/design/images/reportcolumns/" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Row_Icon_File_Name")))) cell(new UILabel(IOUtils.readIcon("/com/fr/design/images/reportcolumns/" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Row_Icon_File_Name"))))
).weight(0.2), ).weight(0.2),
row( row(
3, 4,
column(cell(colButton)), column(cell(colButton)),
cell(new UILabel(IOUtils.readIcon("/com/fr/design/images/reportcolumns/" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Col_Icon_File_Name")))) cell(new UILabel(IOUtils.readIcon("/com/fr/design/images/reportcolumns/" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Col_Icon_File_Name"))))
).weight(0.3) ).weight(0.3)
@ -288,14 +285,14 @@ public class ReportColumnsPane extends BasicPane{
toUILabel = new UILabel(COLUMN_ROW_TEXTS[1 - rowOrColumn]); toUILabel = new UILabel(COLUMN_ROW_TEXTS[1 - rowOrColumn]);
return row( return row(
row( row(
3, 4,
cell(maxRadioButton), cell(maxRadioButton),
cell(maxNumberSpinner), cell(maxNumberSpinner),
cell(maxUILabel), cell(maxUILabel),
cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Report_Columns_Columns_Optional"))) cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Report_Columns_Columns_Optional")))
).weight(0.2), ).weight(0.2),
row( row(
3, 4,
cell(toXRadioButton), cell(toXRadioButton),
cell(toXSpinner), cell(toXSpinner),
cell(toUILabel) cell(toUILabel)
@ -334,23 +331,25 @@ public class ReportColumnsPane extends BasicPane{
*/ */
private JPanel createRowPane() { private JPanel createRowPane() {
repeatColDataTextField = new UITextField(); repeatColDataTextField = new UITextField();
copyLabel = new UILabel(REPORT_COLUMN_RAPEAT[rowOrColumn] + ":"); copyLabel = new UILabel(REPORT_COLUMN_RAPEAT[rowOrColumn]);
copyTitleTextField = new UITextField(); copyTitleTextField = new UITextField();
JPanel colPane = column( JPanel colPane = column(
10, 10,
row( row(
10, 10,
cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Column_Data") + ":")).weight(0.12), cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Column_Data"))).weight(0.12),
cell(repeatColDataTextField).weight(0.33), cell(repeatColDataTextField).weight(0.33),
cell(new UILabel("<html><font color=gray>" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_Format") + ": A2:D5 " + "</font></html>")).weight(0.2), cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_Format") + ": A2:D5 ")).weight(0.2)
.with(it -> FineUIStyle.setStyle(it, FineUIStyle.LABEL_TIP)),
flex(0.35) flex(0.35)
), ),
row( row(
10, 10,
cell(copyLabel).weight(0.12), cell(copyLabel).weight(0.12),
cell(copyTitleTextField).weight(0.33), cell(copyTitleTextField).weight(0.33),
cell(new UILabel("<html><font color=gray>" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_Format") + ": 1,2-3,5,18" + "</font></html>")).weight(0.2), cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_Format") + ": 1,2-3,5,18")).weight(0.2)
.with(it -> FineUIStyle.setStyle(it, FineUIStyle.LABEL_TIP)),
flex(0.35) flex(0.35)
) )
).getComponent(); ).getComponent();

42
designer-realize/src/main/java/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java

@ -1,11 +1,11 @@
package com.fr.design.report.freeze; package com.fr.design.report.freeze;
import com.fine.theme.utils.FineUIStyle;
import com.fr.base.FRContext; import com.fr.base.FRContext;
import com.fr.design.constants.UIConstants; import com.fr.design.constants.UIConstants;
import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.BasicPane;
import com.fr.design.extra.WebViewDlgHelper; import com.fr.design.extra.WebViewDlgHelper;
import com.fr.design.gui.frpane.FineTabbedPane; import com.fr.design.gui.frpane.FineTabbedPane;
import com.fr.design.gui.frpane.UITabbedPane;
import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.ilable.ActionLabel; import com.fr.design.gui.ilable.ActionLabel;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
@ -27,7 +27,6 @@ import java.awt.event.ActionListener;
import static com.fine.swing.ui.layout.Layouts.cell; import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.column; import static com.fine.swing.ui.layout.Layouts.column;
import static com.fine.swing.ui.layout.Layouts.fix;
import static com.fine.swing.ui.layout.Layouts.flex; import static com.fine.swing.ui.layout.Layouts.flex;
import static com.fine.swing.ui.layout.Layouts.row; import static com.fine.swing.ui.layout.Layouts.row;
import static com.fine.theme.utils.FineUIUtils.wrapComponentWithTitle; import static com.fine.theme.utils.FineUIUtils.wrapComponentWithTitle;
@ -94,7 +93,7 @@ public class RepeatAndFreezeSettingPane extends BasicPane {
repeatTitleRowPane = new RepeatRowPane(); repeatTitleRowPane = new RepeatRowPane();
return row( return row(
2, 4,
cell(useRepeatTitleRCheckBox), cell(useRepeatTitleRCheckBox),
cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Title_Start_Row_Form"))), cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Title_Start_Row_Form"))),
cell(repeatTitleRowPane), cell(repeatTitleRowPane),
@ -111,7 +110,7 @@ public class RepeatAndFreezeSettingPane extends BasicPane {
repeatTitleColPane = new RepeatColPane(); repeatTitleColPane = new RepeatColPane();
return row( return row(
2, 4,
cell(useRepeatTitleCCheckBox), cell(useRepeatTitleCCheckBox),
cell(new UILabel(Toolkit.i18nText("Fine-Design_Report_Title_Start_Column_Form"))), cell(new UILabel(Toolkit.i18nText("Fine-Design_Report_Title_Start_Column_Form"))),
cell(repeatTitleColPane), cell(repeatTitleColPane),
@ -121,7 +120,7 @@ public class RepeatAndFreezeSettingPane extends BasicPane {
private JPanel initPageRepeatPane() { private JPanel initPageRepeatPane() {
return row( return row(
10, 20,
column( column(
10, 10,
cell(new UILabel(REPEAT_AND_FROZEN_HEAD)).weight(0.5), cell(new UILabel(REPEAT_AND_FROZEN_HEAD)).weight(0.5),
@ -138,7 +137,7 @@ public class RepeatAndFreezeSettingPane extends BasicPane {
private JPanel initPageRepeatFootPane() { private JPanel initPageRepeatFootPane() {
return row( return row(
10, 20,
column( column(
10, 10,
cell(new UILabel(REPEAT_AND_FROZEN_FOOT)).weight(0.5), cell(new UILabel(REPEAT_AND_FROZEN_FOOT)).weight(0.5),
@ -161,7 +160,7 @@ public class RepeatAndFreezeSettingPane extends BasicPane {
repeatFinisRowPane = new RepeatRowPane(); repeatFinisRowPane = new RepeatRowPane();
return row( return row(
2, 4,
cell(useRepeatFinisRCheckBox), cell(useRepeatFinisRCheckBox),
cell(new UILabel(Toolkit.i18nText("Fine-Design_Report_Finis_Start_Row_Form"))), cell(new UILabel(Toolkit.i18nText("Fine-Design_Report_Finis_Start_Row_Form"))),
cell(repeatFinisRowPane), cell(repeatFinisRowPane),
@ -178,7 +177,7 @@ public class RepeatAndFreezeSettingPane extends BasicPane {
repeatFinisColPane = new RepeatColPane(); repeatFinisColPane = new RepeatColPane();
return row( return row(
2, 4,
cell(useRepeatFinisCCheckBox), cell(useRepeatFinisCCheckBox),
cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Finis_Start_Column_Form"))), cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Finis_Start_Column_Form"))),
cell(repeatFinisColPane), cell(repeatFinisColPane),
@ -208,7 +207,7 @@ public class RepeatAndFreezeSettingPane extends BasicPane {
usePageHeadFrozenCCheckBox = new UICheckBox(); usePageHeadFrozenCCheckBox = new UICheckBox();
return row( return row(
10, 20,
column( column(
10, 10,
cell(new UILabel(REPEAT_AND_FROZEN_HEAD)).weight(0.5), cell(new UILabel(REPEAT_AND_FROZEN_HEAD)).weight(0.5),
@ -217,12 +216,12 @@ public class RepeatAndFreezeSettingPane extends BasicPane {
column( column(
10, 10,
row( row(
2, 4,
cell(usePageHeadFrozenRCheckBox), cell(usePageHeadFrozenRCheckBox),
cell(freezePageRowPane) cell(freezePageRowPane)
).weight(0.5), ).weight(0.5),
row( row(
2, 4,
cell(usePageHeadFrozenCCheckBox), cell(usePageHeadFrozenCCheckBox),
cell(freezePageColPane) cell(freezePageColPane)
).weight(0.5) ).weight(0.5)
@ -239,7 +238,7 @@ public class RepeatAndFreezeSettingPane extends BasicPane {
freezeFootColPane = new FreezePagePane(false, true); freezeFootColPane = new FreezePagePane(false, true);
return row( return row(
10, 20,
column( column(
10, 10,
cell(new UILabel(REPEAT_AND_FROZEN_FOOT)).weight(0.5), cell(new UILabel(REPEAT_AND_FROZEN_FOOT)).weight(0.5),
@ -248,12 +247,12 @@ public class RepeatAndFreezeSettingPane extends BasicPane {
column( column(
10, 10,
row( row(
2, 4,
cell(usePageFootFrozenRCheckBox), cell(usePageFootFrozenRCheckBox),
cell(freezeFootRowPane) cell(freezeFootRowPane)
).weight(0.5), ).weight(0.5),
row( row(
2, 4,
cell(usePageFootFrozenCCheckBox), cell(usePageFootFrozenCCheckBox),
cell(freezeFootColPane) cell(freezeFootColPane)
).weight(0.5) ).weight(0.5)
@ -287,7 +286,7 @@ public class RepeatAndFreezeSettingPane extends BasicPane {
freezeWriteColPane = new FreezeWriteColPane(); freezeWriteColPane = new FreezeWriteColPane();
return row( return row(
10, 20,
column( column(
10, 10,
cell(new UILabel(Toolkit.i18nText("Fine-Design_Report_Face_Write_Frozen"))).weight(0.5), cell(new UILabel(Toolkit.i18nText("Fine-Design_Report_Face_Write_Frozen"))).weight(0.5),
@ -296,12 +295,12 @@ public class RepeatAndFreezeSettingPane extends BasicPane {
column( column(
10, 10,
row( row(
2, 4,
cell(useWriteFrozenRCheckBox), cell(useWriteFrozenRCheckBox),
cell(freezeWriteRowPane) cell(freezeWriteRowPane)
).weight(0.5), ).weight(0.5),
row( row(
2, 4,
cell(useWriteFrozenCCheckBox), cell(useWriteFrozenCCheckBox),
cell(freezeWriteColPane) cell(freezeWriteColPane)
).weight(0.5) ).weight(0.5)
@ -325,15 +324,12 @@ public class RepeatAndFreezeSettingPane extends BasicPane {
).getComponent(); ).getComponent();
JPanel pagePanel = column( JPanel pagePanel = column(
10, 20,
fix(10),
cell(wrapComponentWithTitle(outrepeatPanel, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Repeat"))), cell(wrapComponentWithTitle(outrepeatPanel, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Repeat"))),
cell(wrapComponentWithTitle(outfreezePanel, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_Frozen"))), cell(wrapComponentWithTitle(outfreezePanel, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_Frozen"))),
cell(new UILabel("<html><font color=gray>"+ Toolkit.i18nText("Fine-Design_Report_Engine_Freeze_Tip") + "</font></html>")) cell(new UILabel(Toolkit.i18nText("Fine-Design_Report_Engine_Freeze_Tip"))).with(it -> FineUIStyle.setStyle(it, FineUIStyle.LABEL_TIP))
).getComponent(); ).getComponent();
// 重复打印部分
// 重复打印标题的起始行
JPanel labelPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); JPanel labelPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
labelPanel.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_Select_the_repeated_row_and_column") + ":")); labelPanel.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_Select_the_repeated_row_and_column") + ":"));
UILabel warning = new UILabel("(" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_FreezeWarning") + ")"); UILabel warning = new UILabel("(" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_FreezeWarning") + ")");
@ -342,8 +338,6 @@ public class RepeatAndFreezeSettingPane extends BasicPane {
JPanel writeOutrepeatPanel = initWriteFrozenPane(); JPanel writeOutrepeatPanel = initWriteFrozenPane();
JPanel writePanel = column( JPanel writePanel = column(
10,
fix(10),
cell(wrapComponentWithTitle(writeOutrepeatPanel, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_Frozen"))) cell(wrapComponentWithTitle(writeOutrepeatPanel, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_Frozen")))
).getComponent(); ).getComponent();
addWriteFrozen(writePanel, pagePanel); addWriteFrozen(writePanel, pagePanel);

8
designer-realize/src/main/java/com/fr/design/write/submit/SmartInsertDBManipulationPane.java

@ -1,6 +1,7 @@
package com.fr.design.write.submit; package com.fr.design.write.submit;
import com.fine.theme.icon.LazyIcon; import com.fine.theme.icon.LazyIcon;
import com.fine.theme.light.ui.FineTableHeaderUI;
import com.fr.cache.list.IntList; import com.fr.cache.list.IntList;
import com.fr.data.ClassSubmitJob; import com.fr.data.ClassSubmitJob;
import com.fr.design.actions.UpdateAction; import com.fr.design.actions.UpdateAction;
@ -40,7 +41,6 @@ import javax.swing.JTable;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import javax.swing.SwingWorker; import javax.swing.SwingWorker;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumn; import javax.swing.table.TableColumn;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Component; import java.awt.Component;
@ -355,7 +355,7 @@ public class SmartInsertDBManipulationPane extends DBManipulationPane {
column0.setMaxWidth(LEFT_COLUMN_MAX_WIDTH); column0.setMaxWidth(LEFT_COLUMN_MAX_WIDTH);
ColumnNameTableCellRenderer cellRenderer = new ColumnNameTableCellRenderer(); ColumnNameTableCellRenderer cellRenderer = new ColumnNameTableCellRenderer();
cellRenderer.setHorizontalAlignment(SwingConstants.LEFT); cellRenderer.setHorizontalAlignment(SwingConstants.LEFT);
column0.setCellRenderer(cellRenderer); column0.setCellRenderer(new BooleanRenderer());
/* /*
* 设置Column 1的Renderer * 设置Column 1的Renderer
*/ */
@ -554,7 +554,7 @@ public class SmartInsertDBManipulationPane extends DBManipulationPane {
/* /*
* ColumnValueTableCellRenderer * ColumnValueTableCellRenderer
*/ */
private class SelectedColumnValueTableCellRenderer extends DefaultTableCellRenderer { private class SelectedColumnValueTableCellRenderer extends FineTableHeaderUI.TableRenderer {
@Override @Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
@ -577,7 +577,7 @@ public class SmartInsertDBManipulationPane extends DBManipulationPane {
} }
} }
private class ColumnRowGroupCellRenderer2 extends DefaultTableCellRenderer { private class ColumnRowGroupCellRenderer2 extends FineTableHeaderUI.TableRenderer {
@Override @Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

Loading…
Cancel
Save