Browse Source

REPORT-3348 事件修改,避免查看数据列高级设置的时候也触发保存;修改TableLayout隐藏部分面板时 间距遗留的问题

master
yaoh.wu 7 years ago
parent
commit
09e98f1195
  1. 8
      designer/src/com/fr/design/dscolumn/ResultSetGroupDockingPane.java
  2. 2
      designer/src/com/fr/quickeditor/CellQuickEditor.java
  3. 65
      designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java
  4. 194
      designer_base/src/com/fr/design/layout/TableLayoutHelper.java

8
designer/src/com/fr/design/dscolumn/ResultSetGroupDockingPane.java

@ -34,6 +34,7 @@ public class ResultSetGroupDockingPane extends ResultSetGroupPane {
private UIButton advancedButton; private UIButton advancedButton;
private FunctionComboBox functionComboBox; private FunctionComboBox functionComboBox;
private JPanel contentPane;
private JPanel cardPane; private JPanel cardPane;
private CardLayout cardLayout; private CardLayout cardLayout;
private UIComboBox goBox; private UIComboBox goBox;
@ -48,9 +49,9 @@ public class ResultSetGroupDockingPane extends ResultSetGroupPane {
public void initComponents(ElementCasePane ePane) { public void initComponents(ElementCasePane ePane) {
goBox = new UIComboBox(new String[]{Inter.getLocText("BindColumn-Group"), Inter.getLocText("BindColumn-Select"), Inter.getLocText("BindColumn-Summary")}); goBox = new UIComboBox(new String[]{Inter.getLocText("BindColumn-Group"), Inter.getLocText("BindColumn-Select"), Inter.getLocText("BindColumn-Summary")});
initCardPane(); initCardPane();
JPanel pane = layoutPane(); contentPane = layoutPane();
this.setLayout(new BorderLayout()); this.setLayout(new BorderLayout());
this.add(pane, BorderLayout.CENTER); this.add(contentPane, BorderLayout.CENTER);
} }
private JPanel layoutPane() { private JPanel layoutPane() {
@ -70,12 +71,15 @@ public class ResultSetGroupDockingPane extends ResultSetGroupPane {
if (i == BIND_GROUP) { if (i == BIND_GROUP) {
cardLayout.show(cardPane, "groupPane"); cardLayout.show(cardPane, "groupPane");
cardPane.setPreferredSize(new Dimension(156, 20)); cardPane.setPreferredSize(new Dimension(156, 20));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane,2,10);
} else if (i == BIND_SELECTED) { } else if (i == BIND_SELECTED) {
cardLayout.show(cardPane, "listPane"); cardLayout.show(cardPane, "listPane");
cardPane.setPreferredSize(new Dimension(0, 0)); cardPane.setPreferredSize(new Dimension(0, 0));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane,2,0);
} else if (i == BIND_SUMMARY) { } else if (i == BIND_SUMMARY) {
cardLayout.show(cardPane, "summaryPane"); cardLayout.show(cardPane, "summaryPane");
cardPane.setPreferredSize(new Dimension(156, 20)); cardPane.setPreferredSize(new Dimension(156, 20));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane,2,10);
CellExpandAttr cellExpandAttr = cellElement.getCellExpandAttr(); CellExpandAttr cellExpandAttr = cellElement.getCellExpandAttr();
cellExpandAttr.setDirection(Constants.NONE); cellExpandAttr.setDirection(Constants.NONE);
} }

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

@ -55,7 +55,7 @@ public abstract class CellQuickEditor extends QuickEditor<ElementCasePane> {
emptyLabel.setPreferredSize(new Dimension(60, 20)); emptyLabel.setPreferredSize(new Dimension(60, 20));
} }
protected static final int VGAP = 10, HGAP = 8; protected static final int VGAP = 10, HGAP = 8, VGAP_INNER = 3;
public CellQuickEditor() { public CellQuickEditor() {

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

@ -436,12 +436,6 @@ public class CellDSColumnEditor extends CellQuickEditor {
filterPane.update(cellElement); filterPane.update(cellElement);
fireTargetModified(); fireTargetModified();
} }
}, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
filterPane.update(cellElement);
fireTargetModified();
}
} }
); );
//自定义值显示 //自定义值显示
@ -489,6 +483,7 @@ public class CellDSColumnEditor extends CellQuickEditor {
} }
}, new double[]{P}, new double[]{P, F}, HGAP, VGAP }, new double[]{P}, new double[]{P, F}, HGAP, VGAP
); );
multiPane.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));
multiNumPane.add(multiPane); multiNumPane.add(multiPane);
useMultiplyNumCheckBox.addActionListener(new ActionListener() { useMultiplyNumCheckBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
@ -505,7 +500,6 @@ public class CellDSColumnEditor extends CellQuickEditor {
} }
}); });
double[] rowSize = {P, P, P, P, P, P}; double[] rowSize = {P, P, P, P, P, P};
double[] columnSize = {F}; double[] columnSize = {F};
@ -537,6 +531,7 @@ public class CellDSColumnEditor extends CellQuickEditor {
* @see DSColumnAdvancedPane.SortPane * @see DSColumnAdvancedPane.SortPane
*/ */
public class ResultSetSortConfigPane extends JPanel { public class ResultSetSortConfigPane extends JPanel {
private JPanel contentPane;
//面板 //面板
private UIButtonGroup sortTypePane; private UIButtonGroup sortTypePane;
private JFormulaField formulaField; private JFormulaField formulaField;
@ -570,8 +565,10 @@ public class CellDSColumnEditor extends CellQuickEditor {
cardLayout.show(centerPane, noContent ? "none" : "content"); cardLayout.show(centerPane, noContent ? "none" : "content");
if (noContent) { if (noContent) {
centerPane.setPreferredSize(new Dimension(0, 0)); centerPane.setPreferredSize(new Dimension(0, 0));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0);
} else { } else {
centerPane.setPreferredSize(new Dimension(165, 20)); centerPane.setPreferredSize(new Dimension(165, 20));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP);
} }
} }
}); });
@ -582,9 +579,8 @@ public class CellDSColumnEditor extends CellQuickEditor {
}; };
double[] rowSize = {P, P}, columnSize = {P, F}; double[] rowSize = {P, P}, columnSize = {P, F};
this.add(TableLayoutHelper.createGapTableLayoutPane( contentPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP);
components, rowSize, columnSize, HGAP, VGAP this.add(contentPane, BorderLayout.CENTER);
), BorderLayout.CENTER);
} }
@ -605,8 +601,10 @@ public class CellDSColumnEditor extends CellQuickEditor {
cardLayout.show(centerPane, noContent ? "none" : "content"); cardLayout.show(centerPane, noContent ? "none" : "content");
if (noContent) { if (noContent) {
centerPane.setPreferredSize(new Dimension(0, 0)); centerPane.setPreferredSize(new Dimension(0, 0));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0);
} else { } else {
centerPane.setPreferredSize(new Dimension(156, 20)); centerPane.setPreferredSize(new Dimension(156, 20));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP);
} }
String sortFormula = dSColumn.getSortFormula(); String sortFormula = dSColumn.getSortFormula();
if (sortFormula != null && sortFormula.length() >= 1) { if (sortFormula != null && sortFormula.length() >= 1) {
@ -650,7 +648,7 @@ public class CellDSColumnEditor extends CellQuickEditor {
* @see DSColumnAdvancedPane.SelectCountPane * @see DSColumnAdvancedPane.SelectCountPane
*/ */
public class ResultSetFilterConfigPane extends JPanel { public class ResultSetFilterConfigPane extends JPanel {
private JPanel contentPane;
private UIComboBox rsComboBox; private UIComboBox rsComboBox;
private JPanel setCardPane; private JPanel setCardPane;
private JPanel tipCardPane; private JPanel tipCardPane;
@ -681,44 +679,52 @@ public class CellDSColumnEditor extends CellQuickEditor {
tipCardPaneLayout.show(tipCardPane, FilterType.TOP.name()); tipCardPaneLayout.show(tipCardPane, FilterType.TOP.name());
//隐藏tip 显示set //隐藏tip 显示set
setCardPane.setPreferredSize(new Dimension(156, 20)); setCardPane.setPreferredSize(new Dimension(156, 20));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP);
tipCardPane.setPreferredSize(new Dimension(0, 0)); tipCardPane.setPreferredSize(new Dimension(0, 0));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, 0);
} else if (selectIndex == 2) { } else if (selectIndex == 2) {
//后N个 //后N个
setCardPaneLayout.show(setCardPane, FilterType.BOTTOM.name()); setCardPaneLayout.show(setCardPane, FilterType.BOTTOM.name());
tipCardPaneLayout.show(tipCardPane, FilterType.BOTTOM.name()); tipCardPaneLayout.show(tipCardPane, FilterType.BOTTOM.name());
//隐藏tip 显示set //隐藏tip 显示set
setCardPane.setPreferredSize(new Dimension(156, 20)); setCardPane.setPreferredSize(new Dimension(156, 20));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP);
tipCardPane.setPreferredSize(new Dimension(0, 0)); tipCardPane.setPreferredSize(new Dimension(0, 0));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, 0);
} else if (selectIndex == 3) { } else if (selectIndex == 3) {
//奇数 //奇数
setCardPaneLayout.show(setCardPane, FilterType.ODD.name()); setCardPaneLayout.show(setCardPane, FilterType.ODD.name());
tipCardPaneLayout.show(tipCardPane, FilterType.ODD.name()); tipCardPaneLayout.show(tipCardPane, FilterType.ODD.name());
//隐藏set 显示tip //隐藏set 显示tip
setCardPane.setPreferredSize(new Dimension(0, 0)); setCardPane.setPreferredSize(new Dimension(0, 0));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0);
tipCardPane.setPreferredSize(new Dimension(224, 40)); tipCardPane.setPreferredSize(new Dimension(224, 40));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, VGAP_INNER);
} else if (selectIndex == 4) { } else if (selectIndex == 4) {
setCardPaneLayout.show(setCardPane, FilterType.EVEN.name()); setCardPaneLayout.show(setCardPane, FilterType.EVEN.name());
tipCardPaneLayout.show(tipCardPane, FilterType.EVEN.name()); tipCardPaneLayout.show(tipCardPane, FilterType.EVEN.name());
//隐藏set 显示tip //隐藏set 显示tip
setCardPane.setPreferredSize(new Dimension(0, 0)); setCardPane.setPreferredSize(new Dimension(0, 0));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0);
tipCardPane.setPreferredSize(new Dimension(224, 40)); tipCardPane.setPreferredSize(new Dimension(224, 40));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, VGAP_INNER);
} else if (selectIndex == 5) { } else if (selectIndex == 5) {
setCardPaneLayout.show(setCardPane, FilterType.SPECIFY.name()); setCardPaneLayout.show(setCardPane, FilterType.SPECIFY.name());
tipCardPaneLayout.show(tipCardPane, FilterType.SPECIFY.name()); tipCardPaneLayout.show(tipCardPane, FilterType.SPECIFY.name());
//显示set和tip //显示set和tip
setCardPane.setPreferredSize(new Dimension(156, 20)); setCardPane.setPreferredSize(new Dimension(156, 20));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP);
tipCardPane.setPreferredSize(new Dimension(224, 40)); tipCardPane.setPreferredSize(new Dimension(224, 40));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, VGAP_INNER);
} else { } else {
setCardPaneLayout.show(setCardPane, FilterType.UNDEFINE.name()); setCardPaneLayout.show(setCardPane, FilterType.UNDEFINE.name());
tipCardPaneLayout.show(tipCardPane, FilterType.UNDEFINE.name()); tipCardPaneLayout.show(tipCardPane, FilterType.UNDEFINE.name());
//隐藏set和tip //隐藏set和tip
setCardPane.setPreferredSize(new Dimension(0, 0)); setCardPane.setPreferredSize(new Dimension(0, 0));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0);
tipCardPane.setPreferredSize(new Dimension(0, 0)); tipCardPane.setPreferredSize(new Dimension(0, 0));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, 0);
} }
setCardPane.revalidate();
tipCardPane.revalidate();
setCardPane.repaint();
tipCardPane.repaint();
} }
}); });
//配置展示CardLayout //配置展示CardLayout
@ -746,7 +752,6 @@ public class CellDSColumnEditor extends CellQuickEditor {
oddTip.setForeground(TIP_FONT_COLOR); oddTip.setForeground(TIP_FONT_COLOR);
tipCardPane.add(oddTip, FilterType.ODD.name()); tipCardPane.add(oddTip, FilterType.ODD.name());
//偶数 UILabel 占一行作为提示信息 //偶数 UILabel 占一行作为提示信息
setCardPane.add(new JPanel(), FilterType.EVEN.name()); setCardPane.add(new JPanel(), FilterType.EVEN.name());
MultilineLabel evenTip = new MultilineLabel(Inter.getLocText("FS-Designer_DS_Filter_Even_Tip")); MultilineLabel evenTip = new MultilineLabel(Inter.getLocText("FS-Designer_DS_Filter_Even_Tip"));
@ -759,12 +764,13 @@ public class CellDSColumnEditor extends CellQuickEditor {
MultilineLabel specifyTip = new MultilineLabel(Inter.getLocText("FS-Designer_DS_Filter_Specify_Tip")); MultilineLabel specifyTip = new MultilineLabel(Inter.getLocText("FS-Designer_DS_Filter_Specify_Tip"));
specifyTip.setForeground(TIP_FONT_COLOR); specifyTip.setForeground(TIP_FONT_COLOR);
tipCardPane.add(specifyTip, FilterType.SPECIFY.name()); tipCardPane.add(specifyTip, FilterType.SPECIFY.name());
contentPane = TableLayoutHelper.createDiffVGapTableLayoutPane(new Component[][]{
this.add(TableLayoutHelper.createGapTableLayoutPane(new Component[][]{
{filterLabel, rsComboBox}, {filterLabel, rsComboBox},
{null, setCardPane}, {null, setCardPane},
{tipCardPane, null} {tipCardPane, null}
}, new double[]{P, P, P}, new double[]{P, F}, HGAP, VGAP), BorderLayout.CENTER); }, new double[]{P, P, P}, new double[]{P, F}, HGAP, new double[]{VGAP, VGAP_INNER});
this.add(contentPane, BorderLayout.CENTER);
} }
public void populate(CellElement cellElement) { public void populate(CellElement cellElement) {
@ -783,39 +789,53 @@ public class CellDSColumnEditor extends CellQuickEditor {
this.topFormulaPane.populate(selectCount.getFormulaCount()); this.topFormulaPane.populate(selectCount.getFormulaCount());
//隐藏tip 显示set //隐藏tip 显示set
setCardPane.setPreferredSize(new Dimension(156, 20)); setCardPane.setPreferredSize(new Dimension(156, 20));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP);
tipCardPane.setPreferredSize(new Dimension(0, 0)); tipCardPane.setPreferredSize(new Dimension(0, 0));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, 0);
break; break;
case SelectCount.BOTTOM: case SelectCount.BOTTOM:
this.bottomFormulaPane.populate(selectCount.getFormulaCount()); this.bottomFormulaPane.populate(selectCount.getFormulaCount());
//隐藏tip 显示set //隐藏tip 显示set
setCardPane.setPreferredSize(new Dimension(156, 20)); setCardPane.setPreferredSize(new Dimension(156, 20));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP);
tipCardPane.setPreferredSize(new Dimension(0, 0)); tipCardPane.setPreferredSize(new Dimension(0, 0));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, 0);
break; break;
case SelectCount.SPECIFY: case SelectCount.SPECIFY:
this.serialTextField.setText(selectCount.getSerial()); this.serialTextField.setText(selectCount.getSerial());
//显示set和tip //显示set和tip
setCardPane.setPreferredSize(new Dimension(156, 20)); setCardPane.setPreferredSize(new Dimension(156, 20));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, VGAP);
tipCardPane.setPreferredSize(new Dimension(224, 40)); tipCardPane.setPreferredSize(new Dimension(224, 40));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, VGAP_INNER);
break; break;
case SelectCount.EVEN: case SelectCount.EVEN:
//隐藏set 显示tip //隐藏set 显示tip
setCardPane.setPreferredSize(new Dimension(0, 0)); setCardPane.setPreferredSize(new Dimension(0, 0));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0);
tipCardPane.setPreferredSize(new Dimension(224, 40)); tipCardPane.setPreferredSize(new Dimension(224, 40));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, VGAP_INNER);
break; break;
case SelectCount.ODD: case SelectCount.ODD:
//隐藏set 显示tip //隐藏set 显示tip
setCardPane.setPreferredSize(new Dimension(0, 0)); setCardPane.setPreferredSize(new Dimension(0, 0));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0);
tipCardPane.setPreferredSize(new Dimension(224, 40)); tipCardPane.setPreferredSize(new Dimension(224, 40));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, VGAP_INNER);
break; break;
default: default:
//隐藏set和tip //隐藏set和tip
setCardPane.setPreferredSize(new Dimension(0, 0)); setCardPane.setPreferredSize(new Dimension(0, 0));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0);
tipCardPane.setPreferredSize(new Dimension(0, 0)); tipCardPane.setPreferredSize(new Dimension(0, 0));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, 0);
} }
} else { } else {
//隐藏set和tip //隐藏set和tip
setCardPane.setPreferredSize(new Dimension(0, 0)); setCardPane.setPreferredSize(new Dimension(0, 0));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 2, 0);
tipCardPane.setPreferredSize(new Dimension(0, 0)); tipCardPane.setPreferredSize(new Dimension(0, 0));
TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, 0);
} }
} }
} }
@ -848,13 +868,12 @@ public class CellDSColumnEditor extends CellQuickEditor {
/** /**
* 添加事件监听器 * 添加事件监听器
* *
* @param formulaListener 公式输入框改动事件监听器 * @param formulaListener 输入框改动事件监听器
* @param actionListener 筛选类型下拉框改动事件监听器
*/ */
public void addListener(UIObserverListener formulaListener, ActionListener actionListener) { public void addListener(UIObserverListener formulaListener) {
topFormulaPane.addListener(formulaListener); topFormulaPane.addListener(formulaListener);
bottomFormulaPane.addListener(formulaListener); bottomFormulaPane.addListener(formulaListener);
rsComboBox.addActionListener(actionListener); rsComboBox.registerChangeListener(formulaListener);
} }
} }

194
designer_base/src/com/fr/design/layout/TableLayoutHelper.java

@ -4,11 +4,10 @@ package com.fr.design.layout;
import com.fr.design.constants.LayoutConstants; import com.fr.design.constants.LayoutConstants;
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.ilable.UILabel;
import com.fr.general.Inter;
import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.Inter;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
@ -19,6 +18,7 @@ public class TableLayoutHelper {
public static final int FILL_LASTCOL_AND_ROW = 3; public static final int FILL_LASTCOL_AND_ROW = 3;
private static final int FIVE = 5; private static final int FIVE = 5;
private static final int TEN = 10; private static final int TEN = 10;
private TableLayoutHelper() { private TableLayoutHelper() {
} }
@ -34,11 +34,12 @@ public class TableLayoutHelper {
*/ */
/** /**
*最常用的最后一行列fill或者都是prefer的tablelayout * 最常用的最后一行列fill或者都是prefer的tablelayout
*
* @param components 组件 * @param components 组件
* @return * @return
*/ */
public static JPanel createTableLayoutPane(Component[][] components, int fillType){ public static JPanel createTableLayoutPane(Component[][] components, int fillType) {
return createGapTableLayoutPane(components, fillType, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); return createGapTableLayoutPane(components, fillType, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM);
} }
@ -49,33 +50,35 @@ public class TableLayoutHelper {
/** /**
* 标题布局(二级菜单距左边框46) * 标题布局(二级菜单距左边框46)
*
* @param title 标题 * @param title 标题
* @param component 组件 * @param component 组件
* @return 布局好的组件 * @return 布局好的组件
*/ */
public static JPanel createTableLayoutPaneWithTitle(String title, Component component){ public static JPanel createTableLayoutPaneWithTitle(String title, Component component) {
return createTitlePane(title, component, LayoutConstants.CHART_ATTR_TOMARGIN); return createTitlePane(title, component, LayoutConstants.CHART_ATTR_TOMARGIN);
} }
public static JPanel createTitlePane(String title, Component component, int gap){ public static JPanel createTitlePane(String title, Component component, int gap) {
return createTitlePaneWithUILabel(new UILabel(title), component, gap); return createTitlePaneWithUILabel(new UILabel(title), component, gap);
} }
/** /**
* 标题布局指定gap * 标题布局指定gap
*
* @param label 标题label * @param label 标题label
* @param component 组件 * @param component 组件
* @param gap 距左侧距离 * @param gap 距左侧距离
* @return 布局好的组件 * @return 布局好的组件
*/ */
public static JPanel createTitlePaneWithUILabel(UILabel label, Component component, int gap){ public static JPanel createTitlePaneWithUILabel(UILabel label, Component component, int gap) {
double p = TableLayout.PREFERRED; double p = TableLayout.PREFERRED;
double f = TableLayout.FILL; double f = TableLayout.FILL;
double[] columnSize = {gap, f}; double[] columnSize = {gap, f};
double[] rowSize = {p, p}; double[] rowSize = {p, p};
Component[][] components = new Component[][]{ Component[][] components = new Component[][]{
new Component[]{label,null}, new Component[]{label, null},
new Component[]{null,component}, new Component[]{null, component},
}; };
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
} }
@ -90,17 +93,17 @@ public class TableLayoutHelper {
double p = TableLayout.PREFERRED; double p = TableLayout.PREFERRED;
double f = TableLayout.FILL; double f = TableLayout.FILL;
int maxColCount = 0; int maxColCount = 0;
for (int i = 0 ; i < components.length; i ++) { for (int i = 0; i < components.length; i++) {
if (components[i].length > maxColCount) { if (components[i].length > maxColCount) {
maxColCount = components[i].length; maxColCount = components[i].length;
} }
} }
double[] rowSize = new double[components.length]; double[] rowSize = new double[components.length];
for (int i = 0; i < components.length; i ++) { for (int i = 0; i < components.length; i++) {
rowSize[i] = p; rowSize[i] = p;
} }
double[] columnSize = new double[maxColCount]; double[] columnSize = new double[maxColCount];
for (int i = 0; i < maxColCount; i ++) { for (int i = 0; i < maxColCount; i++) {
columnSize[i] = p; columnSize[i] = p;
} }
if (fillType == FILL_LASTCOLUMN && columnSize.length > 0) { if (fillType == FILL_LASTCOLUMN && columnSize.length > 0) {
@ -109,7 +112,7 @@ public class TableLayoutHelper {
if (fillType == FILL_LASTROW && rowSize.length > 0) { if (fillType == FILL_LASTROW && rowSize.length > 0) {
rowSize[rowSize.length - 1] = f; rowSize[rowSize.length - 1] = f;
} }
if (fillType == FILL_LASTCOL_AND_ROW ) { if (fillType == FILL_LASTCOL_AND_ROW) {
if (columnSize.length > 0) { if (columnSize.length > 0) {
columnSize[columnSize.length - 1] = f; columnSize[columnSize.length - 1] = f;
} }
@ -121,28 +124,26 @@ public class TableLayoutHelper {
} }
public static JPanel createGapTableLayoutPane(Component[][] components, public static JPanel createGapTableLayoutPane(Component[][] components,
double[] rowSize, double[] columnSize, double horizontalGap, double verticalGap) { double[] rowSize,
double[] columnSize,
double horizontalGap,
double verticalGap) {
JPanel resultPane = setPanelLayout(rowSize, columnSize, horizontalGap, verticalGap); JPanel resultPane = setPanelLayout(rowSize, columnSize, horizontalGap, verticalGap);
for (int i = 0; i < components.length; i++) { addComponent2ResultPane(components, rowSize, columnSize, resultPane);
if (i >= rowSize.length) {
break;
}
Component[] rowComponents = components[i];
for (int j = 0; j < rowComponents.length && j < columnSize.length; j++) {
if (rowComponents[j] == null) {
continue;
}
if (isNextAllNull(rowComponents, j + 1)) { return resultPane;
resultPane.add(rowComponents[j], (2 * j + 1) + "," + (2 * i + 1) + "," + (2 * rowComponents.length - 1) + ",0");
} else {
resultPane.add(rowComponents[j], (2 * j + 1) + "," + (2 * i + 1));
}
}
} }
public static JPanel createDiffVGapTableLayoutPane(Component[][] components,
double[] rowSize,
double[] columnSize,
double horizontalGap,
double[] verticalGap) {
JPanel resultPane = setPanelLayout(rowSize, columnSize, horizontalGap, verticalGap);
addComponent2ResultPane(components, rowSize, columnSize, resultPane);
return resultPane; return resultPane;
} }
@ -198,6 +199,57 @@ public class TableLayoutHelper {
return resultPane; return resultPane;
} }
/**
* 修改TableLayout布局的容器指定位置垂直间距的大小
*
* @param container 容器
* @param index vgap的索引ContainervGapA[ComponentA]vGapB[ComponentB]vGapC,vGapB index=2,
* 详情见{@link TableLayout#setRow(int, double)}
* @param vgap vgap的新值
*/
public static void modifyTableLayoutIndexVGap(Container container, int index, double vgap) {
TableLayout layout = (TableLayout) container.getLayout();
layout.setRow(index, vgap);
layout.layoutContainer(container);
container.repaint();
}
/**
* 修改TableLayout布局的容器指定位置水平间距的大小
*
* @param container 容器
* @param index hgap的索引ContainerhGapA[ComponentA]hGapB[ComponentB],hGapB index=2,
* 详情见{@link TableLayout#setColumn(int, double)}
* @param hgap hgap的新值
*/
public static void modifyTableLayoutIndexHGap(Container container, int index, double hgap) {
TableLayout layout = (TableLayout) container.getLayout();
layout.setColumn(index, hgap);
layout.layoutContainer(container);
container.repaint();
}
private static void addComponent2ResultPane(Component[][] components, double[] rowSize, double[] columnSize, JPanel resultPane) {
for (int i = 0; i < components.length; i++) {
if (i >= rowSize.length) {
break;
}
Component[] rowComponents = components[i];
for (int j = 0; j < rowComponents.length && j < columnSize.length; j++) {
if (rowComponents[j] == null) {
continue;
}
if (isNextAllNull(rowComponents, j + 1)) {
resultPane.add(rowComponents[j], (2 * j + 1) + "," + (2 * i + 1) + "," + (2 * rowComponents.length - 1) + ",0");
} else {
resultPane.add(rowComponents[j], (2 * j + 1) + "," + (2 * i + 1));
}
}
}
}
private static boolean isNextAllNull(Component[] rowComponents, int currentIndex) { private static boolean isNextAllNull(Component[] rowComponents, int currentIndex) {
for (int i = currentIndex; i < rowComponents.length; i++) { for (int i = currentIndex; i < rowComponents.length; i++) {
@ -240,21 +292,63 @@ public class TableLayoutHelper {
return resultPane; return resultPane;
} }
/**
* 创建具有不同垂直间距的TableLayout面板
*
* @param rowSize
* @param columnSize
* @param horizontalGap 水平间距
* @param verticalGap 不同的垂直间距
* @return JPanel 具有不同垂直间距的TableLayout面板
*/
private static JPanel setPanelLayout(double[] rowSize, double[] columnSize, double horizontalGap, double[] verticalGap) {
double layoutSize[][] = new double[2][];
double layoutColumnSize[] = new double[2 * columnSize.length];
double layoutRowSize[] = new double[2 * rowSize.length];
for (int i = 0; i < columnSize.length; i++) {
if (i == 0) {
layoutColumnSize[i * 2] = 0;
} else {
layoutColumnSize[i * 2] = horizontalGap;
}
layoutColumnSize[i * 2 + 1] = columnSize[i];
}
for (int i = 0; i < rowSize.length; i++) {
if (i == 0) {
layoutRowSize[i * 2] = 0;
} else {
layoutRowSize[i * 2] = verticalGap[i - 1];
}
layoutRowSize[i * 2 + 1] = rowSize[i];
}
layoutSize[0] = layoutColumnSize;
layoutSize[1] = layoutRowSize;
JPanel resultPane = new JPanel();
resultPane.setLayout(new TableLayout(layoutSize));
return resultPane;
}
/** /**
* 图表属性表用的比较多的一种布局第一行是title,下面的components相当于二级菜单 * 图表属性表用的比较多的一种布局第一行是title,下面的components相当于二级菜单
* 二级菜单和上层面板的间距在layoutconstants里定义 * 二级菜单和上层面板的间距在layoutconstants里定义
*
* @param title * @param title
* @param components 二级菜单的内容 * @param components 二级菜单的内容
* @param rowSize 二级菜单的行数 * @param rowSize 二级菜单的行数
* @param columnSize 二级菜单的列数 * @param columnSize 二级菜单的列数
* @return * @return
*/ */
public static JPanel createTableLayoutPane4Chart(String[] title, Component[][] components, double[] rowSize, double[] columnSize){ public static JPanel createTableLayoutPane4Chart(String[] title, Component[][] components, double[] rowSize, double[] columnSize) {
JPanel secondMenu = createTableLayoutPane(components, rowSize, columnSize); JPanel secondMenu = createTableLayoutPane(components, rowSize, columnSize);
double p = TableLayout.PREFERRED; double p = TableLayout.PREFERRED;
double f = TableLayout.FILL; double f = TableLayout.FILL;
double[] column = {LayoutConstants.CHART_ATTR_TOMARGIN, f}; double[] column = {LayoutConstants.CHART_ATTR_TOMARGIN, f};
double[] row = { p,p}; double[] row = {p, p};
Component[][] comp = new Component[][]{ Component[][] comp = new Component[][]{
new Component[]{new UILabel(Inter.getLocText(title)), null}, new Component[]{new UILabel(Inter.getLocText(title)), null},
new Component[]{null, secondMenu}, new Component[]{null, secondMenu},
@ -262,35 +356,44 @@ public class TableLayoutHelper {
return createTableLayoutPane(comp, row, column); return createTableLayoutPane(comp, row, column);
} }
public static void main (String[] args) { public static void main(String[] args) {
JFrame jf = new JFrame("test"); JFrame jf = new JFrame("test");
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel content = (JPanel) jf.getContentPane(); JPanel content = (JPanel) jf.getContentPane();
content.setLayout(new GridLayout(2,2)); content.setLayout(new GridLayout(2, 3));
double p = TableLayout.PREFERRED; double p = TableLayout.PREFERRED;
double f = TableLayout.FILL; double f = TableLayout.FILL;
JPanel jp1 = TableLayoutHelper.createTableLayoutPane(createTestComponents("jp1"), TableLayoutHelper.FILL_NONE); JPanel jp1 = TableLayoutHelper.createTableLayoutPane(createTestComponents("jp1"), TableLayoutHelper.FILL_NONE);
JPanel jp2 = TableLayoutHelper.createGapTableLayoutPane(createTestComponents("jp2"), TableLayoutHelper.FILL_LASTCOL_AND_ROW, 2 * TEN, 2 * TEN); JPanel jp2 = TableLayoutHelper.createGapTableLayoutPane(createTestComponents("jp2"), TableLayoutHelper.FILL_LASTCOL_AND_ROW, 2 * TEN, 2 * TEN);
JPanel jp3 = TableLayoutHelper.createGapTableLayoutPane(createTestComponents("jp3"), JPanel jp3 = TableLayoutHelper.createGapTableLayoutPane(createTestComponents("jp3"),
new double[] {f,p,f,p}, new double[] {f,f}, 4,4); new double[]{f, p, f, p}, new double[]{f, f}, 4, 4);
JPanel jp4 = TableLayoutHelper.createGapTableLayoutPane(createTestComponents("jp4"), JPanel jp4 = TableLayoutHelper.createGapTableLayoutPane(createTestComponents("jp4"),
new double[] {p,FIVE * TEN,p,p,p,p},new double[] {p, f}, new int[][] {{1,3},{1,1},{1,1},{1,1},{1,1}}, 1, FIVE); new double[]{p, FIVE * TEN, p, p, p, p}, new double[]{p, f}, new int[][]{{1, 3}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}, 1, FIVE);
JPanel jp5 = TableLayoutHelper.createDiffVGapTableLayoutPane(createTestComponents("jp5"),
new double[]{p, p, p, p, p}, new double[]{p, f}, 4, new double[]{4, 8, 14, 4});
JPanel jp6 = new JPanel();
jp1.setBorder(BorderFactory.createLineBorder(Color.red)); jp1.setBorder(BorderFactory.createLineBorder(Color.red));
jp2.setBorder(BorderFactory.createLineBorder(Color.red)); jp2.setBorder(BorderFactory.createLineBorder(Color.red));
jp3.setBorder(BorderFactory.createLineBorder(Color.red)); jp3.setBorder(BorderFactory.createLineBorder(Color.red));
jp4.setBorder(BorderFactory.createLineBorder(Color.red)); jp4.setBorder(BorderFactory.createLineBorder(Color.red));
jp5.setBorder(BorderFactory.createLineBorder(Color.red));
jp6.setBorder(BorderFactory.createLineBorder(Color.red));
content.add(jp1); content.add(jp1);
content.add(jp2); content.add(jp2);
content.add(jp3); content.add(jp3);
content.add(jp4); content.add(jp4);
content.add(jp5);
content.add(jp6);
GUICoreUtils.centerWindow(jf); GUICoreUtils.centerWindow(jf);
jf.setSize(600, 600); jf.setSize(900, 600);
jf.setVisible(true); jf.setVisible(true);
} }
private static Component[][] createTestComponents (String name ) { private static Component[][] createTestComponents(String name) {
UILabel label1 = new UILabel(name + "laaaable1"); UILabel label1 = new UILabel(name + "laaaable1");
UILabel label2 = new UILabel(name + "lable2"); UILabel label2 = new UILabel(name + "lable2");
UILabel label3 = new UILabel(name + "lable3"); UILabel label3 = new UILabel(name + "lable3");
@ -312,13 +415,12 @@ public class TableLayoutHelper {
button2.setSize(button2.getPreferredSize()); button2.setSize(button2.getPreferredSize());
button1.setBackground(Color.darkGray); button1.setBackground(Color.darkGray);
button2.setBackground(Color.darkGray); button2.setBackground(Color.darkGray);
Component[][] components = new Component[][] { return new Component[][]{
new Component[] {label1, button1}, new Component[]{label1, button1},
new Component[] {label2, null}, new Component[]{label2, null},
new Component[] {label3}, new Component[]{label3},
new Component[] {null,label4}, new Component[]{null, label4},
new Component[] {button2, label5} new Component[]{button2, label5}
} ; };
return components;
} }
} }
Loading…
Cancel
Save