@ -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 ) ;