diff --git a/designer-realize/src/main/java/com/fr/design/sort/header/HeaderAreaPane.java b/designer-realize/src/main/java/com/fr/design/sort/header/HeaderAreaPane.java index cd9c616d26..9984c4c97e 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/header/HeaderAreaPane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/header/HeaderAreaPane.java @@ -13,8 +13,10 @@ import com.fr.report.core.sort.header.SortHeader; import com.fr.report.elementcase.TemplateElementCase; import com.fr.stable.ColumnRow; -import javax.swing.*; -import java.awt.*; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import javax.swing.JPanel; +import java.awt.BorderLayout; import java.util.ArrayList; import java.util.Iterator; @@ -34,6 +36,7 @@ public class HeaderAreaPane extends JPanel { SortColumnRowPane columnRowPane; UIComboBox uiComboBox; JPanel sortColumnRowPanel; + boolean showHeaderArea; HeaderAreaPane(int headerAreaPaneWidth, int headerAreaPaneRightWidth) { this.headerAreaPaneWidth = headerAreaPaneWidth; @@ -57,12 +60,43 @@ public class HeaderAreaPane extends JPanel { } private void initChangeListener() { - uiComboBox.addItemListener(e -> { - sortColumnRowPanel.setVisible(uiComboBox.getSelectedIndex() == 1); + uiComboBox.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + boolean headerVisible = (uiComboBox.getSelectedIndex() == 1); + sortColumnRowPanel.setVisible(headerVisible); + // 仅在单元格状态改变时触发 + if (showHeaderArea != headerVisible) { + showHeaderArea = headerVisible; + triggerItemChanged(headerVisible); + } + } }); uiComboBox.setSelectedIndex(0); } + private void triggerItemChanged(boolean isHeaderVisible) { + if (isHeaderVisible) { + handleCustomHeader(); + } else { + handleNoHeader(); + } + } + + private void handleCustomHeader() { + ColumnRow columnRow = columnRowPane.updateBean(); + if (cellSelectionManager.isNotSelectables(columnRow)) { + columnRowPane.setColumnRow(ColumnRow.ERROR); + } else { + cellSelectionManager.addNotSelectables(columnRow); + } + } + + private void handleNoHeader() { + cellSelectionManager.removeNotSelectables(columnRowPane.updateBean()); + columnRowPane.cancelSelectState(); + } + public void populateBean(ColumnRow columnRow, boolean showHeaderArea, TemplateCellElement cellElement) { this.cellElement = cellElement; boolean enabled = true; @@ -75,9 +109,11 @@ public class HeaderAreaPane extends JPanel { private void populateColumnRowPane(ColumnRow columnRow, boolean showHeaderArea, boolean enabled) { cellSelectionManager.build(cellElement, columnRow); - if(showHeaderArea){ + if (showHeaderArea) { columnRow = cellSelectionManager.buildCurrentCell(cellElement, columnRow); } + // 更新当前单元格是否已配置自定义排序表头排序 + this.showHeaderArea = showHeaderArea; columnRowPane.populateBean(columnRow, enabled, cellSelectionManager); uiComboBox.setSelectedIndex(showHeaderArea ? 1 : 0); uiComboBox.setEnabled(enabled);