Browse Source

REPORT-3348 数据列设置使用单独的滚动条

master
yaoh.wu 7 years ago
parent
commit
244e9a06c8
  1. 97
      designer/src/com/fr/design/mainframe/cell/CellEditorPane.java
  2. 256
      designer/src/com/fr/quickeditor/CellQuickEditor.java
  3. 5
      designer/src/com/fr/quickeditor/cellquick/CellBiasTextPainterEditor.java
  4. 18
      designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java
  5. 41
      designer/src/com/fr/quickeditor/cellquick/CellElementBarLayout.java
  6. 5
      designer/src/com/fr/quickeditor/cellquick/CellFormulaQuickEditor.java
  7. 5
      designer/src/com/fr/quickeditor/cellquick/CellImageQuickEditor.java
  8. 5
      designer/src/com/fr/quickeditor/cellquick/CellRichTextEditor.java
  9. 5
      designer/src/com/fr/quickeditor/cellquick/CellStringQuickEditor.java
  10. 4
      designer/src/com/fr/quickeditor/cellquick/CellSubReportEditor.java

97
designer/src/com/fr/design/mainframe/cell/CellEditorPane.java

@ -1,6 +1,15 @@
package com.fr.design.mainframe.cell;
import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.iscrollbar.UIScrollBar;
import com.fr.design.mainframe.CellElementPropertyPane;
import com.fr.quickeditor.cellquick.CellElementBarLayout;
import javax.swing.*;
import java.awt.*;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
/**
* 右侧单元格元素面板抽象类
@ -9,7 +18,20 @@ import com.fr.design.dialog.BasicPane;
* @version 2017年7月25日
* @since 9.0
*/
public abstract class CellEditorPane extends BasicPane {
public abstract class CellEditorPane extends JPanel {
/*滚动条相关配置*/
private static final int MAXVALUE = 100;
private static final int TITLE_HEIGHT = 95;
private static final int CONTENT_PANE_WIDTH_GAP = 3;
private static final int SCROLLBAR_WIDTH = 7;
private static final int MOUSE_WHEEL_SPEED = 5;
private int maxHeight = 280;
private JPanel leftContentPane;
private UIScrollBar scrollBar;
protected abstract JPanel createContentPane();
public abstract String getIconPath();
@ -22,7 +44,76 @@ public abstract class CellEditorPane extends BasicPane {
/**
* 更新面板数据
*
*/
public abstract void populate();
protected void createScrollPane() {
leftContentPane = this.createContentPane();
this.prepareScrollBar();
leftContentPane.setBorder(BorderFactory.createMatteBorder(10, 10, 0, 0, this.getBackground()));
this.setLayout(new CellElementBarLayout(leftContentPane) {
@Override
public void layoutContainer(Container parent) {
maxHeight = CellElementPropertyPane.getInstance().getHeight() - TITLE_HEIGHT;
int beginY;
if ((MAXVALUE - scrollBar.getVisibleAmount()) == 0) {
beginY = 0;
} else {
int preferredHeight = leftContentPane.getPreferredSize().height;
int value = scrollBar.getValue();
beginY = value * (preferredHeight - maxHeight) / (MAXVALUE - scrollBar.getVisibleAmount());
}
int width = parent.getWidth();
int height = parent.getHeight();
if (leftContentPane.getPreferredSize().height > maxHeight) {
leftContentPane.setBounds(0, -beginY, width - SCROLLBAR_WIDTH - CONTENT_PANE_WIDTH_GAP, height + beginY);
scrollBar.setBounds(width - SCROLLBAR_WIDTH - CONTENT_PANE_WIDTH_GAP, 0, SCROLLBAR_WIDTH + CONTENT_PANE_WIDTH_GAP, height);
} else {
leftContentPane.setBounds(0, 0, width - SCROLLBAR_WIDTH - CONTENT_PANE_WIDTH_GAP, height);
}
}
});
this.add(scrollBar);
this.add(leftContentPane);
}
private void prepareScrollBar() {
scrollBar = new UIScrollBar(UIScrollBar.VERTICAL) {
@Override
public int getVisibleAmount() {
int preferredHeight = leftContentPane.getPreferredSize().height;
int e = MAXVALUE * (maxHeight) / preferredHeight;
setVisibleAmount(e);
return e;
}
@Override
public int getMaximum() {
return MAXVALUE;
}
};
scrollBar.addAdjustmentListener(new AdjustmentListener() {
@Override
public void adjustmentValueChanged(AdjustmentEvent e) {
doLayout();
}
});
this.addMouseWheelListener(new MouseWheelListener() {
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
int value = scrollBar.getValue();
value += MOUSE_WHEEL_SPEED * e.getWheelRotation();
scrollBar.setValue(value);
doLayout();
}
});
scrollBar.setPreferredSize(new Dimension(SCROLLBAR_WIDTH + CONTENT_PANE_WIDTH_GAP, this.getHeight()));
scrollBar.setBlockIncrement(SCROLLBAR_WIDTH + CONTENT_PANE_WIDTH_GAP);
scrollBar.setBorder(BorderFactory.createMatteBorder(0, CONTENT_PANE_WIDTH_GAP, 0, 0, this.getBackground()));
}
}

256
designer/src/com/fr/quickeditor/CellQuickEditor.java

@ -18,6 +18,7 @@ import com.fr.design.menu.ShortCut;
import com.fr.design.selection.QuickEditor;
import com.fr.general.Inter;
import com.fr.grid.selection.CellSelection;
import com.fr.quickeditor.cellquick.CellElementBarLayout;
import com.fr.report.cell.TemplateCellElement;
import com.fr.stable.ColumnRow;
@ -33,37 +34,145 @@ import java.util.ArrayList;
*/
public abstract class CellQuickEditor extends QuickEditor<ElementCasePane> {
/*滚动条相关配置*/
private static final int MAXVALUE = 100;
private static final int TITLE_HEIGHT = 50;
private static final int MOUSE_WHEEL_SPEED = 5;
private static final int CONTENT_PANE_WIDTH_GAP = 4;
private static final int SCROLLBAR_WIDTH = 8;
private int maxHeight = 280;
/*面板配置*/
protected UITextField columnRowTextField;
protected TemplateCellElement cellElement;
/*占位label*/
protected static final Dimension LABEL_DIMENSION = new Dimension(60, 20);
protected static final UILabel EMPTY_LABEL = new UILabel();
protected static final int VGAP = 10, HGAP = 8, VGAP_INNER = 3;
static {
EMPTY_LABEL.setPreferredSize(LABEL_DIMENSION);
}
protected static final int VGAP = 10, HGAP = 8, VGAP_INNER = 3;
/*滚动条相关配置*/
private static final int MAXVALUE = 100;
private static final int CONTENT_PANE_WIDTH_GAP = 3;
private static final int MOUSE_WHEEL_SPEED = 5;
private static final int SCROLLBAR_WIDTH = 7;
private int maxHeight = 280;
private static final int TITLE_HEIGHT = 50;
private UIComboBox comboBox;
private UpdateAction[] cellInsertActions;
private int selectedIndex;
private int currentSelectedIndex;
private JPanel leftContentPane;
private UIScrollBar scrollBar;
/*占位label*/
protected static UILabel emptyLabel = new UILabel();
private int currentSelectedIndex;
public CellQuickEditor() {
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double[] columnSize = {p, f};
double[] rowSize = {p, p};
JComponent centerBody = createCenterBody();
JPanel topContent = initTopContent();
if (isScrollAll()) {
prepareScrollBar();
topContent.setBorder(BorderFactory.createMatteBorder(10, 10, 0, 0, this.getBackground()));
centerBody.setBorder(BorderFactory.createMatteBorder(0, 10, 0, 0, this.getBackground()));
Component[][] components = new Component[][]{
new Component[]{topContent, null},
new Component[]{centerBody, null}
};
leftContentPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP);
this.setLayout(new CellElementBarLayout(leftContentPane) {
@Override
public void layoutContainer(Container parent) {
maxHeight = CellElementPropertyPane.getInstance().getHeight() - TITLE_HEIGHT;
int beginY;
if ((MAXVALUE - scrollBar.getVisibleAmount()) == 0) {
beginY = 0;
} else {
int preferredHeight = leftContentPane.getPreferredSize().height;
int value = scrollBar.getValue();
beginY = value * (preferredHeight - maxHeight) / (MAXVALUE - scrollBar.getVisibleAmount());
}
int width = parent.getWidth();
int height = parent.getHeight();
if (leftContentPane.getPreferredSize().height > maxHeight) {
leftContentPane.setBounds(0, -beginY, width - SCROLLBAR_WIDTH - CONTENT_PANE_WIDTH_GAP, height + beginY);
scrollBar.setBounds(width - SCROLLBAR_WIDTH - CONTENT_PANE_WIDTH_GAP, 0, SCROLLBAR_WIDTH + CONTENT_PANE_WIDTH_GAP, height);
} else {
leftContentPane.setBounds(0, 0, width - SCROLLBAR_WIDTH - CONTENT_PANE_WIDTH_GAP, height);
}
leftContentPane.validate();
}
});
this.add(scrollBar);
this.add(leftContentPane);
} else {
topContent.setBorder(BorderFactory.createMatteBorder(10, 10, 0, 10, this.getBackground()));
centerBody.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 0, this.getBackground()));
Component[][] components = new Component[][]{
new Component[]{topContent, null},
new Component[]{centerBody, null}
};
this.setLayout(new BorderLayout());
this.add(TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP), BorderLayout.CENTER);
}
}
/**
* 初始化详细信息面板
*
* @return JComponent 待显示的详细信息面板
*/
public abstract JComponent createCenterBody();
/**
* 是否全局具有滚动条
*
* @return boolean 是否全局具有滚动条
*/
public abstract boolean isScrollAll();
/**
* 初始化下拉框中的类型
*
* @return JComponent 待显示的详细信息面板
*/
public abstract Object getComboBoxSelected();
/**
* 刷新
*/
@Override
protected void refresh() {
CellSelection cs = (CellSelection) tc.getSelection();
ColumnRow columnRow = ColumnRow.valueOf(cs.getColumn(), cs.getRow());
columnRowTextField.setText(columnRow.toString());
cellElement = tc.getEditingElementCase().getTemplateCellElement(cs.getColumn(), cs.getRow());
refreshDetails();
}
/**
* 刷新详细信息
*/
protected abstract void refreshDetails();
private JPanel initTopContent() {
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double[] columnSize = {p, f};
double[] rowSize = {p, p};
UILabel cellLabel = new UILabel(Inter.getLocText("FR-Designer_Cell"));
cellLabel.setPreferredSize(LABEL_DIMENSION);
UILabel insertContentLabel = new UILabel(Inter.getLocText("FR-Designer_Insert_Cell_Element"));
insertContentLabel.setPreferredSize(LABEL_DIMENSION);
UIComboBox cellElementEditComboBox = initCellElementEditComboBox();
Component[][] components = new Component[][]{
new Component[]{cellLabel, columnRowTextField = initColumnRowTextField()},
new Component[]{insertContentLabel, cellElementEditComboBox},
};
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP);
}
private void prepareScrollBar() {
scrollBar = new UIScrollBar(UIScrollBar.VERTICAL) {
@Override
public int getVisibleAmount() {
@ -77,7 +186,6 @@ public abstract class CellQuickEditor extends QuickEditor<ElementCasePane> {
public int getMaximum() {
return MAXVALUE;
}
};
scrollBar.addAdjustmentListener(new AdjustmentListener() {
@ -98,43 +206,11 @@ public abstract class CellQuickEditor extends QuickEditor<ElementCasePane> {
}
});
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double[] columnSize = {p, f};
double[] rowSize = {p, p};
JComponent centerBody = createCenterBody();
centerBody.setBorder(BorderFactory.createMatteBorder(0, 10, 0, 0, this.getBackground()));
Component[][] components = new Component[][]{
new Component[]{initTopContent(), null},
new Component[]{centerBody, null}
};
leftContentPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP);
this.setLayout(new BarLayout());
this.add(scrollBar);
this.add(leftContentPane);
scrollBar.setPreferredSize(new Dimension(SCROLLBAR_WIDTH + CONTENT_PANE_WIDTH_GAP, this.getHeight()));
scrollBar.setBlockIncrement(SCROLLBAR_WIDTH + CONTENT_PANE_WIDTH_GAP);
scrollBar.setBorder(BorderFactory.createMatteBorder(0, CONTENT_PANE_WIDTH_GAP, 0, 0, this.getBackground()));
}
private JPanel initTopContent() {
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double[] columnSize = {p, f};
double[] rowSize = {p, p};
UILabel cellLabel = new UILabel(Inter.getLocText("FR-Designer_Cell"));
cellLabel.setPreferredSize(LABEL_DIMENSION);
UILabel insertContentLabel = new UILabel(Inter.getLocText("FR-Designer_Insert_Cell_Element"));
insertContentLabel.setPreferredSize(LABEL_DIMENSION);
UIComboBox cellElementEditComboBox = initCellElementEditComboBox();
Component[][] components = new Component[][]{
new Component[]{cellLabel, columnRowTextField = initColumnRowTextField()},
new Component[]{insertContentLabel, cellElementEditComboBox},
};
JPanel topContent = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP);
topContent.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 0));
return topContent;
}
/**
* 初始化添加按钮
*
@ -209,88 +285,4 @@ public abstract class CellQuickEditor extends QuickEditor<ElementCasePane> {
});
return columnRowTextField;
}
/**
* 初始化详细信息面板
*
* @return JComponent 待显示的详细信息面板
*/
public abstract JComponent createCenterBody();
/**
* 初始化下拉框中的类型
*
* @return JComponent 待显示的详细信息面板
*/
public abstract Object getComboBoxSelected();
/**
* 刷新
*/
@Override
protected void refresh() {
CellSelection cs = (CellSelection) tc.getSelection();
ColumnRow columnRow = ColumnRow.valueOf(cs.getColumn(), cs.getRow());
columnRowTextField.setText(columnRow.toString());
cellElement = tc.getEditingElementCase().getTemplateCellElement(cs.getColumn(), cs.getRow());
refreshDetails();
}
/**
* 刷新详细信息
*/
protected abstract void refreshDetails();
/**
* 属性面板的滚动条和内容区域的布局管理类
* yaoh.wu 由于这边不能继承{@link com.fr.design.mainframe.AbstractAttrPane.BarLayout}所以冗余了一份滚动条代码进来
*
* @see com.fr.design.mainframe.AbstractAttrPane.BarLayout
*/
protected class BarLayout implements LayoutManager {
@Override
public void addLayoutComponent(String name, Component comp) {
}
@Override
public void removeLayoutComponent(Component comp) {
}
@Override
public Dimension preferredLayoutSize(Container parent) {
return leftContentPane.getPreferredSize();
}
@Override
public Dimension minimumLayoutSize(Container parent) {
return leftContentPane.getMinimumSize();
}
@Override
public void layoutContainer(Container parent) {
maxHeight = CellElementPropertyPane.getInstance().getHeight() - TITLE_HEIGHT;
int beginY;
if ((MAXVALUE - scrollBar.getVisibleAmount()) == 0) {
beginY = 0;
} else {
int preferredHeight = leftContentPane.getPreferredSize().height;
int value = scrollBar.getValue();
beginY = value * (preferredHeight - maxHeight) / (MAXVALUE - scrollBar.getVisibleAmount());
}
int width = parent.getWidth();
int height = parent.getHeight();
if (leftContentPane.getPreferredSize().height > maxHeight) {
leftContentPane.setBounds(0, -beginY, width - scrollBar.getWidth() - CONTENT_PANE_WIDTH_GAP, height + beginY);
scrollBar.setBounds(width - scrollBar.getWidth() - 1, 0, scrollBar.getWidth(), height);
} else {
leftContentPane.setBounds(0, 0, width - SCROLLBAR_WIDTH - CONTENT_PANE_WIDTH_GAP, height);
}
leftContentPane.validate();
}
}
}

5
designer/src/com/fr/quickeditor/cellquick/CellBiasTextPainterEditor.java

@ -68,4 +68,9 @@ public class CellBiasTextPainterEditor extends CellQuickEditor {
protected void refreshDetails() {
}
@Override
public boolean isScrollAll() {
return true;
}
}

18
designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java

@ -98,6 +98,11 @@ public class CellDSColumnEditor extends CellQuickEditor {
return centerPane;
}
@Override
public boolean isScrollAll() {
return false;
}
/**
* 内容全部重新动态生成不然容易出错
* 刷新详细信息面板
@ -158,9 +163,11 @@ public class CellDSColumnEditor extends CellQuickEditor {
paneList = new ArrayList<>();
/*基本设置面板*/
DSColumnBasicEditorPane cellDSColumnBasicPane = new DSColumnBasicEditorPane();
paneList.add(cellDSColumnBasicPane);
/*高级设置面板*/
cellDSColumnAdvancedPane = new DSColumnAdvancedEditorPane();
paneList.add(cellDSColumnAdvancedPane);
}
@ -209,7 +216,6 @@ public class CellDSColumnEditor extends CellQuickEditor {
};
DSColumnBasicEditorPane() {
this.setLayout(new BorderLayout());
dataPane = new SelectedDataColumnPane(true, true, tc, cellElement);
groupPane = new ResultSetGroupDockingPane(tc);
dataPane.addListener(dataListener);
@ -231,8 +237,9 @@ public class CellDSColumnEditor extends CellQuickEditor {
new Component[]{uiLabel, uiButton}
};
conditionPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP);
this.add(this.createContentPane(), BorderLayout.CENTER);
this.createScrollPane();
this.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));
}
@ -265,7 +272,7 @@ public class CellDSColumnEditor extends CellQuickEditor {
*
* @return content JPanel
*/
private JPanel createContentPane() {
protected JPanel createContentPane() {
double[] columnSize = {F};
double[] rowSize = {P, P, P};
@ -303,9 +310,8 @@ public class CellDSColumnEditor extends CellQuickEditor {
public DSColumnAdvancedEditorPane() {
this.setLayout(new BorderLayout());
this.add(this.createContentPane(), BorderLayout.CENTER);
this.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));
this.createScrollPane();
}
@ -415,7 +421,7 @@ public class CellDSColumnEditor extends CellQuickEditor {
*
* @return 内容面板
*/
private JPanel createContentPane() {
protected JPanel createContentPane() {
this.setLayout(FRGUIPaneFactory.createBorderLayout());
//结果集排序
sortPane = new ResultSetSortConfigPane();

41
designer/src/com/fr/quickeditor/cellquick/CellElementBarLayout.java

@ -0,0 +1,41 @@
package com.fr.quickeditor.cellquick;
import javax.swing.*;
import java.awt.*;
/**
* 单元格元素面板的滚动条
*
* @see com.fr.design.mainframe.AbstractAttrPane.BarLayout
*/
public abstract class CellElementBarLayout implements LayoutManager {
private JPanel leftContentPane;
protected CellElementBarLayout(JPanel leftContentPane) {
this.leftContentPane = leftContentPane;
}
@Override
public void addLayoutComponent(String name, Component comp) {
}
@Override
public void removeLayoutComponent(Component comp) {
}
@Override
public Dimension preferredLayoutSize(Container parent) {
return leftContentPane.getPreferredSize();
}
@Override
public Dimension minimumLayoutSize(Container parent) {
return leftContentPane.getMinimumSize();
}
@Override
public abstract void layoutContainer(Container parent);
}

5
designer/src/com/fr/quickeditor/cellquick/CellFormulaQuickEditor.java

@ -203,4 +203,9 @@ public class CellFormulaQuickEditor extends CellQuickEditor {
formulaTextField.getDocument().addDocumentListener(documentListener);
}
@Override
public boolean isScrollAll() {
return true;
}
}

5
designer/src/com/fr/quickeditor/cellquick/CellImageQuickEditor.java

@ -72,6 +72,11 @@ public class CellImageQuickEditor extends CellQuickEditor {
}
@Override
public boolean isScrollAll() {
return true;
}
@Override
public Object getComboBoxSelected() {
return ActionFactory.createAction(ImageCellAction.class);

5
designer/src/com/fr/quickeditor/cellquick/CellRichTextEditor.java

@ -49,4 +49,9 @@ public class CellRichTextEditor extends CellQuickEditor {
richTextButton.setAction(subReportCellAction);
}
@Override
public boolean isScrollAll() {
return true;
}
}

5
designer/src/com/fr/quickeditor/cellquick/CellStringQuickEditor.java

@ -90,6 +90,11 @@ public class CellStringQuickEditor extends CellQuickEditor {
return content;
}
@Override
public boolean isScrollAll() {
return true;
}
private void changeReportPaneCell(String tmpText) {
isEditing = true;

4
designer/src/com/fr/quickeditor/cellquick/CellSubReportEditor.java

@ -50,4 +50,8 @@ public class CellSubReportEditor extends CellQuickEditor {
return ActionFactory.createAction(SubReportCellAction.class);
}
@Override
public boolean isScrollAll() {
return true;
}
}
Loading…
Cancel
Save