MoMeak
7 years ago
19 changed files with 1345 additions and 720 deletions
@ -1,238 +1,231 @@
|
||||
package com.fr.design.present; |
||||
|
||||
import java.awt.*; |
||||
|
||||
import javax.swing.JComponent; |
||||
|
||||
import com.fr.design.constants.UIConstants; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.SpinnerNumberModel; |
||||
import javax.swing.border.TitledBorder; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import javax.swing.event.DocumentEvent; |
||||
import javax.swing.event.DocumentListener; |
||||
|
||||
import com.fr.design.beans.FurtherBasicBeanPane; |
||||
import com.fr.design.border.UIRoundedBorder; |
||||
import com.fr.design.constants.UIConstants; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.ispinner.UIBasicSpinner; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.general.Inter; |
||||
import com.fr.report.cell.cellattr.CurrencyLineAttr; |
||||
import com.fr.report.cell.cellattr.CurrencyLinePresent; |
||||
import com.fr.report.cell.painter.barcode.BarcodeException; |
||||
import com.fr.report.core.CurrencyLineImpl; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.design.gui.ispinner.UIBasicSpinner; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.border.TitledBorder; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import javax.swing.event.DocumentEvent; |
||||
import javax.swing.event.DocumentListener; |
||||
import java.awt.*; |
||||
|
||||
/** |
||||
* |
||||
* @author zhou |
||||
* @since 2012-6-4下午7:34:52 |
||||
*/ |
||||
public class CurrencyLinePane extends FurtherBasicBeanPane<CurrencyLinePresent> { |
||||
private static final int VS_NUM = 4; |
||||
private static final int VG_NUM = 6; |
||||
private UIBasicSpinner intPartSpinner; |
||||
private UIBasicSpinner deciPartSpinner; |
||||
private UITextField textField; |
||||
private CurrencyLinePreviewPane CurrencyLinePreviewPane; |
||||
private int intPart = 9; |
||||
private int deciPart = 3; |
||||
|
||||
private static final int POSITION = 8; |
||||
ChangeListener listener2 = new ChangeListener() { |
||||
|
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
CurrencyLinePreviewPane.setObject(textField.getText(), update()); |
||||
} |
||||
|
||||
}; |
||||
|
||||
DocumentListener listener = new DocumentListener() { |
||||
@Override |
||||
public void insertUpdate(DocumentEvent e) { |
||||
CurrencyLinePreviewPane.setObject(textField.getText(), update()); |
||||
} |
||||
|
||||
@Override |
||||
public void removeUpdate(DocumentEvent e) { |
||||
CurrencyLinePreviewPane.setObject(textField.getText(), update()); |
||||
} |
||||
|
||||
@Override |
||||
public void changedUpdate(DocumentEvent e) { |
||||
CurrencyLinePreviewPane.setObject(textField.getText(), update()); |
||||
} |
||||
}; |
||||
|
||||
public CurrencyLinePane() { |
||||
this.initComponents(); |
||||
} |
||||
|
||||
protected void initComponents() { |
||||
// 整数位选择
|
||||
intPartSpinner = new UIBasicSpinner(new SpinnerNumberModel(9, 1, 20, 1)); |
||||
intPartSpinner.setPreferredSize(new Dimension(45, 20)); |
||||
|
||||
// 小数位选择
|
||||
deciPartSpinner = new UIBasicSpinner(new SpinnerNumberModel(2, 1, 10, 1)); |
||||
deciPartSpinner.setPreferredSize(new Dimension(45, 20)); |
||||
// 预览区域
|
||||
textField = new UITextField(10); |
||||
|
||||
CurrencyLinePreviewPane = new CurrencyLinePreviewPane(); |
||||
CurrencyLinePreviewPane.setPreferredSize(new Dimension(0, 145)); |
||||
JPanel borderPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
TitledBorder titledBorder = new TitledBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5), Inter.getLocText("StyleFormat-Sample"), 4, 2, this.getFont(), UIConstants.LINE_COLOR); |
||||
borderPane.setBorder(titledBorder); |
||||
borderPane.add(CurrencyLinePreviewPane, BorderLayout.CENTER); |
||||
|
||||
textField.requestFocus(); |
||||
|
||||
double vs = VS_NUM; |
||||
double vg = VG_NUM; |
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = { p, f }; |
||||
double[] rowSize = { p, p,p,p }; |
||||
private UIBasicSpinner intPartSpinner; |
||||
private UIBasicSpinner deciPartSpinner; |
||||
private UITextField textField; |
||||
private CurrencyLinePreviewPane CurrencyLinePreviewPane; |
||||
private int intPart = 9; |
||||
private int deciPart = 3; |
||||
|
||||
private static final int POSITION = 8; |
||||
ChangeListener listener2 = new ChangeListener() { |
||||
|
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
CurrencyLinePreviewPane.setObject(textField.getText(), update()); |
||||
} |
||||
|
||||
}; |
||||
|
||||
DocumentListener listener = new DocumentListener() { |
||||
@Override |
||||
public void insertUpdate(DocumentEvent e) { |
||||
CurrencyLinePreviewPane.setObject(textField.getText(), update()); |
||||
} |
||||
|
||||
@Override |
||||
public void removeUpdate(DocumentEvent e) { |
||||
CurrencyLinePreviewPane.setObject(textField.getText(), update()); |
||||
} |
||||
|
||||
@Override |
||||
public void changedUpdate(DocumentEvent e) { |
||||
CurrencyLinePreviewPane.setObject(textField.getText(), update()); |
||||
} |
||||
}; |
||||
|
||||
public CurrencyLinePane() { |
||||
this.initComponents(); |
||||
} |
||||
|
||||
protected void initComponents() { |
||||
// 整数位选择
|
||||
intPartSpinner = new UIBasicSpinner(new SpinnerNumberModel(9, 1, 20, 1)); |
||||
intPartSpinner.setPreferredSize(new Dimension(135, 20)); |
||||
|
||||
// 小数位选择
|
||||
deciPartSpinner = new UIBasicSpinner(new SpinnerNumberModel(2, 1, 10, 1)); |
||||
deciPartSpinner.setPreferredSize(new Dimension(135, 20)); |
||||
// 预览区域
|
||||
textField = new UITextField(10); |
||||
|
||||
CurrencyLinePreviewPane = new CurrencyLinePreviewPane(); |
||||
CurrencyLinePreviewPane.setPreferredSize(new Dimension(0, 145)); |
||||
JPanel borderPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
TitledBorder titledBorder = new TitledBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 5), Inter.getLocText("StyleFormat-Sample"), 4, 2, this.getFont(), UIConstants.LINE_COLOR); |
||||
borderPane.setBorder(titledBorder); |
||||
borderPane.add(CurrencyLinePreviewPane, BorderLayout.CENTER); |
||||
|
||||
textField.requestFocus(); |
||||
|
||||
double vs = VS_NUM; |
||||
double vg = VG_NUM; |
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = {p, f}; |
||||
double[] rowSize = {p, p, p, p}; |
||||
|
||||
|
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{new UILabel(Inter.getLocText("Data") + ":", UILabel.RIGHT),textField}, |
||||
new Component[]{borderPane,null}, |
||||
new Component[]{new UILabel(Inter.getLocText("IntPart") + ":", UILabel.RIGHT), groupPane(intPartSpinner)}, |
||||
new Component[]{new UILabel(Inter.getLocText("DeciPart") + ":", UILabel.RIGHT), groupPane(deciPartSpinner)} |
||||
new Component[]{new UILabel(Inter.getLocText("Data"), UILabel.LEFT), textField}, |
||||
new Component[]{borderPane, null}, |
||||
new Component[]{new UILabel(Inter.getLocText("IntPart"), UILabel.LEFT), groupPane(intPartSpinner)}, |
||||
new Component[]{new UILabel(Inter.getLocText("DeciPart"), UILabel.LEFT), groupPane(deciPartSpinner)} |
||||
|
||||
} ; |
||||
}; |
||||
|
||||
JPanel linePane = TableLayoutHelper.createTableLayoutPane(components,rowSize,columnSize); |
||||
JPanel linePane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
this.setLayout(new BorderLayout()); |
||||
this.add(linePane,BorderLayout.CENTER); |
||||
|
||||
this.add(linePane, BorderLayout.CENTER); |
||||
|
||||
|
||||
textField.getDocument().addDocumentListener(listener); |
||||
intPartSpinner.addChangeListener(listener2); |
||||
deciPartSpinner.addChangeListener(listener2); |
||||
textField.setText("123456.78"); |
||||
} |
||||
|
||||
textField.getDocument().addDocumentListener(listener); |
||||
intPartSpinner.addChangeListener(listener2); |
||||
deciPartSpinner.addChangeListener(listener2); |
||||
textField.setText("123456.78"); |
||||
} |
||||
|
||||
@Override |
||||
@Override |
||||
/** |
||||
* 窗口名 |
||||
* @return 同上 |
||||
* @return 同上 |
||||
*/ |
||||
public String title4PopupWindow() { |
||||
return Inter.getLocText("Currency_Line"); |
||||
} |
||||
public String title4PopupWindow() { |
||||
return Inter.getLocText("Currency_Line"); |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* |
||||
*/ |
||||
public CurrencyLineAttr update() { |
||||
CurrencyLineAttr currencylineAttr = new CurrencyLineAttr(); |
||||
currencylineAttr.setintPart(((Integer)this.intPartSpinner.getValue()).intValue()); |
||||
currencylineAttr.setdeciPart(((Integer)this.deciPartSpinner.getValue()).intValue()); |
||||
return currencylineAttr; |
||||
} |
||||
public CurrencyLineAttr update() { |
||||
CurrencyLineAttr currencylineAttr = new CurrencyLineAttr(); |
||||
currencylineAttr.setintPart(((Integer) this.intPartSpinner.getValue()).intValue()); |
||||
currencylineAttr.setdeciPart(((Integer) this.deciPartSpinner.getValue()).intValue()); |
||||
return currencylineAttr; |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* |
||||
*/ |
||||
public void setintPart(int intpart) { |
||||
this.intPart = intpart; |
||||
} |
||||
public void setintPart(int intpart) { |
||||
this.intPart = intpart; |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* |
||||
*/ |
||||
public void setdeciPart(int decipart) { |
||||
this.deciPart = decipart; |
||||
} |
||||
public void setdeciPart(int decipart) { |
||||
this.deciPart = decipart; |
||||
} |
||||
|
||||
private class CurrencyLinePreviewPane extends JPanel { |
||||
private String text; |
||||
CurrencyLineAttr currencyLineAttr; |
||||
private class CurrencyLinePreviewPane extends JPanel { |
||||
private String text; |
||||
CurrencyLineAttr currencyLineAttr; |
||||
|
||||
public CurrencyLinePreviewPane() { |
||||
public CurrencyLinePreviewPane() { |
||||
// setBackground(Color.white);
|
||||
} |
||||
|
||||
public void setObject(String text, CurrencyLineAttr currencyLineAttr) { |
||||
this.text = text; |
||||
this.currencyLineAttr = currencyLineAttr; |
||||
GUICoreUtils.repaint(this); |
||||
} |
||||
|
||||
@Override |
||||
public void paintComponent(Graphics g) { |
||||
super.paintComponent(g); |
||||
if (text == null){ |
||||
return; |
||||
} |
||||
|
||||
public void setObject(String text, CurrencyLineAttr currencyLineAttr) { |
||||
this.text = text; |
||||
this.currencyLineAttr = currencyLineAttr; |
||||
GUICoreUtils.repaint(this); |
||||
} |
||||
|
||||
@Override |
||||
public void paintComponent(Graphics g) { |
||||
super.paintComponent(g); |
||||
if (text == null) { |
||||
return; |
||||
} |
||||
Dimension size = this.getSize(); |
||||
try { |
||||
CurrencyLineImpl currencyLineImpl = new CurrencyLineImpl(text, currencyLineAttr); |
||||
currencyLineImpl.draw((Graphics2D)g, (int)(size.getWidth()), (int)(size.getHeight())); |
||||
} catch (BarcodeException e) { |
||||
Color oldColor = g.getColor(); |
||||
g.setColor(Color.red); |
||||
g.drawString(e.getMessage(), (int)(size.getWidth() / POSITION), (int)(size.getHeight() / POSITION)); |
||||
g.setColor(oldColor); |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
protected static JPanel groupPane(JComponent comp) { |
||||
JPanel jp = new JPanel(); |
||||
jp.setBorder(null); |
||||
jp.setLayout(new FlowLayout(FlowLayout.LEFT)); |
||||
jp.add(comp); |
||||
return jp; |
||||
} |
||||
|
||||
@Override |
||||
Dimension size = this.getSize(); |
||||
try { |
||||
CurrencyLineImpl currencyLineImpl = new CurrencyLineImpl(text, currencyLineAttr); |
||||
currencyLineImpl.draw((Graphics2D) g, (int) (size.getWidth()), (int) (size.getHeight())); |
||||
} catch (BarcodeException e) { |
||||
Color oldColor = g.getColor(); |
||||
g.setColor(Color.red); |
||||
g.drawString(e.getMessage(), (int) (size.getWidth() / POSITION), (int) (size.getHeight() / POSITION)); |
||||
g.setColor(oldColor); |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
protected static JPanel groupPane(JComponent comp) { |
||||
JPanel jp = new JPanel(); |
||||
jp.setBorder(null); |
||||
jp.setLayout(new FlowLayout(FlowLayout.LEFT)); |
||||
jp.add(comp); |
||||
return jp; |
||||
} |
||||
|
||||
@Override |
||||
/** |
||||
* 是否为该类型 |
||||
* @param ob 对象 |
||||
* @return 同上 |
||||
* |
||||
*/ |
||||
public boolean accept(Object ob) { |
||||
return ob instanceof CurrencyLinePresent; |
||||
} |
||||
public boolean accept(Object ob) { |
||||
return ob instanceof CurrencyLinePresent; |
||||
} |
||||
|
||||
/** |
||||
* 重置 |
||||
* 重置 |
||||
*/ |
||||
public void reset() { |
||||
this.intPartSpinner.setValue(9); |
||||
this.deciPartSpinner.setValue(3); |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(CurrencyLinePresent ob) { |
||||
CurrencyLineAttr currencyLine = ob.getCurrencyLineAttr(); |
||||
if (currencyLine == null) { |
||||
currencyLine = new CurrencyLineAttr(); |
||||
} |
||||
this.intPartSpinner.setValue(new Integer(currencyLine.getintPart())); |
||||
this.deciPartSpinner.setValue(new Integer(currencyLine.getdeciPart())); |
||||
} |
||||
|
||||
@Override |
||||
public CurrencyLinePresent updateBean() { |
||||
CurrencyLineAttr currencylineAttr = new CurrencyLineAttr(); |
||||
currencylineAttr.setintPart(((Integer)this.intPartSpinner.getValue()).intValue()); |
||||
currencylineAttr.setdeciPart(((Integer)this.deciPartSpinner.getValue()).intValue()); |
||||
return new CurrencyLinePresent(currencylineAttr); |
||||
} |
||||
public void reset() { |
||||
this.intPartSpinner.setValue(9); |
||||
this.deciPartSpinner.setValue(3); |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(CurrencyLinePresent ob) { |
||||
CurrencyLineAttr currencyLine = ob.getCurrencyLineAttr(); |
||||
if (currencyLine == null) { |
||||
currencyLine = new CurrencyLineAttr(); |
||||
} |
||||
this.intPartSpinner.setValue(new Integer(currencyLine.getintPart())); |
||||
this.deciPartSpinner.setValue(new Integer(currencyLine.getdeciPart())); |
||||
} |
||||
|
||||
@Override |
||||
public CurrencyLinePresent updateBean() { |
||||
CurrencyLineAttr currencylineAttr = new CurrencyLineAttr(); |
||||
currencylineAttr.setintPart(((Integer) this.intPartSpinner.getValue()).intValue()); |
||||
currencylineAttr.setdeciPart(((Integer) this.deciPartSpinner.getValue()).intValue()); |
||||
return new CurrencyLinePresent(currencylineAttr); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,418 @@
|
||||
package com.fr.design.editor; |
||||
|
||||
import com.fr.base.Formula; |
||||
import com.fr.design.DesignerEnvManager; |
||||
import com.fr.design.dialog.BasicPane; |
||||
import com.fr.design.editor.editor.*; |
||||
import com.fr.design.event.GlobalNameListener; |
||||
import com.fr.design.event.GlobalNameObserver; |
||||
import com.fr.design.event.UIObserver; |
||||
import com.fr.design.event.UIObserverListener; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.ibutton.UIButtonGroup; |
||||
import com.fr.design.gui.imenu.UIMenuItem; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.general.Inter; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import java.awt.*; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
|
||||
/** |
||||
* Created by MoMeak on 2017/7/26. |
||||
*/ |
||||
|
||||
public class DoubleDeckValueEditorPane extends BasicPane implements UIObserver, GlobalNameObserver { |
||||
|
||||
private static final int CENTERPANE_WIDTH = 200; |
||||
private Editor[] cards; |
||||
|
||||
private Editor currentEditor; |
||||
|
||||
private UIButton arrowButton; |
||||
private JPopupMenu menu; |
||||
private JPanel centerPane; |
||||
private CardLayout cardLayout; |
||||
private Object value; |
||||
private UIButtonGroup upButton; |
||||
private GlobalNameListener globalNameListener = null; |
||||
private UIObserverListener uiObserverListener = null; |
||||
|
||||
public DoubleDeckValueEditorPane(Editor[] cards) { |
||||
this(cards, null, null); |
||||
} |
||||
|
||||
public DoubleDeckValueEditorPane(Editor[] cards, String popupName, String textEditorValue) { |
||||
initComponents(cards, popupName, textEditorValue, CENTERPANE_WIDTH); |
||||
} |
||||
|
||||
public DoubleDeckValueEditorPane(Editor[] cards, String popupName, String textEditorValue, int centerPaneWidth) { |
||||
initComponents(cards, popupName, textEditorValue, centerPaneWidth); |
||||
} |
||||
|
||||
public static void main(String[] args) { |
||||
JFrame jf = new JFrame("test"); |
||||
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); |
||||
JPanel content = (JPanel) jf.getContentPane(); |
||||
content.setLayout(new BorderLayout()); |
||||
content.add(new DoubleDeckValueEditorPane(new Editor[]{new ColumnNameEditor(), new ColumnIndexEditor(), new FormulaEditor(Inter.getLocText("FR-Designer_Parameter-Formula"))}), BorderLayout.NORTH); |
||||
GUICoreUtils.centerWindow(jf); |
||||
jf.setSize(290, 400); |
||||
jf.setVisible(true); |
||||
} |
||||
|
||||
|
||||
private void initComponents(final Editor[] cards, String popupName, String textEditorValue, int centerPaneWidth) { |
||||
this.setLayout(new BorderLayout(0, 4)); |
||||
this.cards = cards; |
||||
|
||||
final String[] nameArray = new String[cards.length]; |
||||
for (int i = 0; i < cards.length; i++) { |
||||
nameArray[i] = cards[i].getName(); |
||||
} |
||||
upButton = new UIButtonGroup(nameArray); |
||||
upButton.setAllToolTips(nameArray); |
||||
this.add(upButton, BorderLayout.NORTH); |
||||
|
||||
|
||||
centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
|
||||
setCurrentEditor(0); |
||||
|
||||
centerPane.setPreferredSize(new Dimension(centerPaneWidth, centerPane.getPreferredSize().height)); |
||||
menu = createPopMenu(); |
||||
upButton.addChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
if (globalNameListener != null) { |
||||
globalNameListener.setGlobalName(Inter.getLocText("CellWrite-InsertRow_Policy")); |
||||
} |
||||
Object oldValue = currentEditor.getValue(); |
||||
setCurrentEditor(upButton.getSelectedIndex()); |
||||
currentEditor.selected(); |
||||
value = currentEditor.getValue(); |
||||
if (uiObserverListener != null) { |
||||
uiObserverListener.doChange(); |
||||
} |
||||
|
||||
DoubleDeckValueEditorPane.this.firePropertyChange("value", oldValue, value); |
||||
} |
||||
}); |
||||
this.add(centerPane, BorderLayout.CENTER); |
||||
|
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return Inter.getLocText("FR-Designer_Values-Editor"); |
||||
} |
||||
|
||||
public Editor getCurrentEditor() { |
||||
return currentEditor; |
||||
} |
||||
|
||||
public int getCurrentEditorIndex() { |
||||
for (int i = 0; i < cards.length; i++) { |
||||
if (cards[i].getClass() == currentEditor.getClass()) { |
||||
return i; |
||||
} |
||||
} |
||||
return 0; |
||||
} |
||||
|
||||
public void setCurrentEditor(int i) { |
||||
currentEditor = this.cards[i]; |
||||
centerPane.removeAll(); |
||||
centerPane.add(currentEditor); |
||||
centerPane.validate(); |
||||
centerPane.repaint(); |
||||
} |
||||
|
||||
public void setCurrentEditor(Class editorClass) { |
||||
for (int i = 0; i < cards.length; i++) { |
||||
if (cards[i].getClass() == editorClass) { |
||||
setCurrentEditor(i); |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
||||
private JPopupMenu createPopMenu() { |
||||
JPopupMenu scate = new JPopupMenu(); |
||||
|
||||
if (this.cards == null) { |
||||
return scate; |
||||
} |
||||
|
||||
for (int i = 0; i < this.cards.length; i++) { |
||||
UIMenuItem item = new UIMenuItem(cards[i].getName()); |
||||
final int j = i; |
||||
item.addActionListener(new ActionListener() { |
||||
public void actionPerformed(ActionEvent e) { |
||||
if (globalNameListener != null) { |
||||
globalNameListener.setGlobalName(Inter.getLocText("CellWrite-InsertRow_Policy")); |
||||
} |
||||
Object oldValue = currentEditor.getValue(); |
||||
setCurrentEditor(j); |
||||
currentEditor.selected(); |
||||
value = currentEditor.getValue(); |
||||
if (uiObserverListener != null) { |
||||
uiObserverListener.doChange(); |
||||
} |
||||
|
||||
DoubleDeckValueEditorPane.this.firePropertyChange("value", oldValue, value); |
||||
} |
||||
}); |
||||
scate.add(item); |
||||
if (i < cards.length - 1) { |
||||
scate.addSeparator(); |
||||
} |
||||
} |
||||
return scate; |
||||
} |
||||
|
||||
public void populate(Object object) { |
||||
for (int i = 0; i < cards.length; i++) { |
||||
if (cards[i].accept(object)) { |
||||
setCardValue(i, object); |
||||
|
||||
break; |
||||
} |
||||
} |
||||
} |
||||
|
||||
public void populate(Object object, String name) { |
||||
for (int i = 0; i < cards.length; i++) { |
||||
if (cards[i].accept(object) && ComparatorUtils.equals(cards[i].getName(), name)) { |
||||
setCardValue(i, object); |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
|
||||
private void setCardValue(int i, Object object) { |
||||
setCurrentEditor(i); |
||||
cards[i].setValue(object); |
||||
// kunsnat: bug7861 所有的Editor值都要跟随改变, 因为populate的editor 从""
|
||||
// 一定是最后的Editor哦.
|
||||
for (int j = 0; j < cards.length; j++) { |
||||
if (i == j) { |
||||
upButton.setSelectedIndex(i); |
||||
continue; |
||||
} |
||||
this.cards[j].setValue(null); |
||||
} |
||||
} |
||||
|
||||
public Object update() { |
||||
String name = currentEditor.getName(); |
||||
Object columnIndex = currentEditor.getValue(); |
||||
//bug86542,这边为啥要new一个公式出来,只保留content,其他属性全不要了?
|
||||
// if (ComparatorUtils.equals(name, Inter.getLocText("Formula"))) {
|
||||
// columnIndex = new Formula(columnIndex == null ? "" : columnIndex.toString());
|
||||
// }
|
||||
|
||||
return columnIndex; |
||||
} |
||||
|
||||
public Object update(String makeAdiff) { |
||||
String name = currentEditor.getName(); |
||||
Object columnIndex = currentEditor.getValue(); |
||||
Object columnName = StringUtils.EMPTY; |
||||
|
||||
if (ComparatorUtils.equals(name, Inter.getLocText("FR-Designer_Formula"))) { |
||||
columnIndex = new Formula(columnIndex == null ? "" : columnIndex.toString()); |
||||
} |
||||
|
||||
if (currentEditor instanceof ColumnNameEditor) { |
||||
columnName = ((ColumnNameEditor) currentEditor).getColumnName(); |
||||
} |
||||
|
||||
return new Object[]{columnIndex, columnName}; |
||||
} |
||||
|
||||
public Object update(boolean isXMLA) { |
||||
String name = currentEditor.getName(); |
||||
Object columnIndex = currentEditor.getValue(); |
||||
Object columnName = StringUtils.EMPTY; |
||||
|
||||
if (ComparatorUtils.equals(name, Inter.getLocText("FR-Designer_Formula"))) { |
||||
columnIndex = new Formula(columnIndex == null ? "" : columnIndex.toString()); |
||||
} |
||||
|
||||
if (isXMLA) { |
||||
columnName = ((XMLANameEditor) currentEditor).getColumnName(); |
||||
} |
||||
|
||||
return new Object[]{columnIndex, columnName}; |
||||
} |
||||
|
||||
public void setEditors(Editor[] editors, Object obj) { |
||||
this.cards = editors; |
||||
this.populate(obj); |
||||
} |
||||
|
||||
/** |
||||
* 检查是否有效 |
||||
* |
||||
* @throws Exception 异常 |
||||
*/ |
||||
public void checkValid() throws Exception { |
||||
if (!(currentEditor instanceof TextEditor)) { |
||||
return; |
||||
} |
||||
|
||||
int i; |
||||
boolean containFormulaType = false; |
||||
for (i = 0; i < cards.length; i++) { |
||||
if (ComparatorUtils.equals(cards[i].getName(), Inter.getLocText("FR-Engine_Parameter-Formula"))) { |
||||
containFormulaType = true; |
||||
break; |
||||
} |
||||
} |
||||
if (!containFormulaType) { |
||||
return; |
||||
} |
||||
|
||||
final int j = i; |
||||
|
||||
if (!(currentEditor instanceof TextEditor)) { |
||||
return; |
||||
} |
||||
String string = (String) currentEditor.getValue(); |
||||
if (isFormula(string)) { |
||||
DesignerEnvManager designerEnvManager = DesignerEnvManager.getEnvManager(); |
||||
if (designerEnvManager.isSupportStringToFormula()) { |
||||
if (!designerEnvManager.isDefaultStringToFormula()) { |
||||
int returnValue = JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("FR-Designer_Edit_String_To_Formula") |
||||
+ "?", Inter.getLocText("FR-Designer_Tooltips"), JOptionPane.YES_NO_OPTION); |
||||
if (returnValue == JOptionPane.OK_OPTION) { |
||||
|
||||
setCurrentEditor(j); |
||||
Formula formula = new Formula(string); |
||||
currentEditor.setValue(formula); |
||||
} |
||||
} else { |
||||
setCurrentEditor(j); |
||||
Formula formula = new Formula(string); |
||||
currentEditor.setValue(formula); |
||||
} |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
private boolean isFormula(String string) { |
||||
return StringUtils.isNotBlank(string) && (string.length() > 0 && string.charAt(0) == '='); |
||||
} |
||||
|
||||
@Override |
||||
public void setEnabled(boolean enabled) { |
||||
arrowButton.setEnabled(enabled); |
||||
for (Editor card : cards) { |
||||
card.setEnabled(enabled); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 重置组件 |
||||
*/ |
||||
public void resetComponets() { |
||||
for (Editor card : cards) { |
||||
card.reset(); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 清除组件数据 |
||||
*/ |
||||
public void clearComponentsData() { |
||||
for (Editor card : cards) { |
||||
card.clearData(); |
||||
} |
||||
} |
||||
|
||||
public Editor[] getCards() { |
||||
return this.cards; |
||||
} |
||||
|
||||
public JPopupMenu getMenu() { |
||||
return this.menu; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 注册全局名字监听事件 |
||||
* |
||||
* @param listener 观察者监听事件 |
||||
*/ |
||||
public void registerNameListener(GlobalNameListener listener) { |
||||
globalNameListener = listener; |
||||
} |
||||
|
||||
/** |
||||
* 是否对名字listener监听器做出响应 |
||||
* |
||||
* @return 如果要做出响应,则返回true |
||||
*/ |
||||
public boolean shouldResponseNameListener() { |
||||
return false; |
||||
} |
||||
|
||||
public void setGlobalName(String name) { |
||||
for (Editor card : cards) { |
||||
setComponentGlobalName(card, name); |
||||
} |
||||
} |
||||
|
||||
private void setComponentGlobalName(Container card, String name) { |
||||
for (int i = 0, len = card.getComponentCount(); i < len; i++) { |
||||
Component component = card.getComponent(i); |
||||
if (component instanceof GlobalNameObserver) { |
||||
((GlobalNameObserver) component).setGlobalName(name); |
||||
} else { |
||||
setComponentGlobalName((Container) component, name); |
||||
} |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 给组件登记一个观察者监听事件 |
||||
* |
||||
* @param listener 观察者监听事件 |
||||
*/ |
||||
public void registerChangeListener(UIObserverListener listener) { |
||||
uiObserverListener = listener; |
||||
for (Editor card : cards) { |
||||
doLoop(card, listener); |
||||
} |
||||
} |
||||
|
||||
private void doLoop(Container card, UIObserverListener listener) { |
||||
for (int i = 0, len = card.getComponentCount(); i < len; i++) { |
||||
Component component = card.getComponent(i); |
||||
if (component instanceof UIObserver) { |
||||
((UIObserver) component).registerChangeListener(listener); |
||||
} else { |
||||
doLoop((Container) component, listener); |
||||
} |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 组件是否需要响应添加的观察者事件 |
||||
* |
||||
* @return 如果需要响应观察者事件则返回true,否则返回false |
||||
*/ |
||||
public boolean shouldResponseChangeListener() { |
||||
return true; |
||||
} |
||||
} |
@ -1,107 +1,123 @@
|
||||
package com.fr.design.present.dict; |
||||
|
||||
import java.awt.*; |
||||
|
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.event.DocumentListener; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.base.Formula; |
||||
import com.fr.data.impl.FormulaDictionary; |
||||
import com.fr.design.beans.FurtherBasicBeanPane; |
||||
import com.fr.design.editor.editor.FormulaEditor; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.editor.editor.FormulaEditor; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.general.Inter; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.event.DocumentListener; |
||||
import java.awt.*; |
||||
|
||||
public class FormulaDictPane extends FurtherBasicBeanPane<FormulaDictionary> { |
||||
private FormulaEditor keyFormulaEditor; |
||||
private FormulaEditor valueFormulaEditor; |
||||
|
||||
public FormulaDictPane() { |
||||
initComponents(); |
||||
} |
||||
private static final int EDITOR_COLUMN = 15; |
||||
private FormulaEditor keyFormulaEditor; |
||||
private FormulaEditor valueFormulaEditor; |
||||
|
||||
public FormulaDictPane() { |
||||
initComponents(); |
||||
} |
||||
|
||||
public static void main(String[] args) { |
||||
JFrame jf = new JFrame("test"); |
||||
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); |
||||
JPanel content = (JPanel) jf.getContentPane(); |
||||
content.setLayout(new BorderLayout()); |
||||
content.add(new FormulaDictPane(), BorderLayout.NORTH); |
||||
GUICoreUtils.centerWindow(jf); |
||||
jf.setSize(250, 400); |
||||
jf.setVisible(true); |
||||
} |
||||
|
||||
private void initComponents() { |
||||
keyFormulaEditor = new FormulaEditor(); |
||||
keyFormulaEditor.setColumns(EDITOR_COLUMN); |
||||
JPanel keyFormulaContainer = new JPanel(new FlowLayout(FlowLayout.RIGHT)); |
||||
keyFormulaEditor.setPreferredSize(new Dimension(148, 20)); |
||||
Icon icon = BaseUtils.readIcon("/com/fr/design/images/m_insert/formula.png"); |
||||
keyFormulaContainer.add(new JLabel(icon)); |
||||
keyFormulaContainer.add(keyFormulaEditor); |
||||
|
||||
valueFormulaEditor = new FormulaEditor(); |
||||
valueFormulaEditor.setColumns(EDITOR_COLUMN); |
||||
|
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = {p, f}; |
||||
double[] rowSize = {p, p, p, p, p, p}; |
||||
|
||||
UILabel tag = new UILabel(Inter.getLocText("Formula_Dictionary_Display_Examples_Html")); |
||||
JPanel t = new JPanel(new BorderLayout()); |
||||
t.add(tag, BorderLayout.NORTH); |
||||
|
||||
Formula vf = new Formula("$$$"); |
||||
valueFormulaEditor = new FormulaEditor("", vf); |
||||
|
||||
JPanel valueFormulaContainer = new JPanel(new FlowLayout(FlowLayout.RIGHT)); |
||||
valueFormulaEditor.setPreferredSize(new Dimension(148, 20)); |
||||
valueFormulaContainer.add(new JLabel(icon)); |
||||
valueFormulaContainer.add(valueFormulaEditor); |
||||
|
||||
private void initComponents() { |
||||
keyFormulaEditor = new FormulaEditor(); |
||||
keyFormulaEditor.setColumns(15); |
||||
valueFormulaEditor = new FormulaEditor(); |
||||
valueFormulaEditor.setColumns(15); |
||||
|
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = { f }; |
||||
double[] rowSize = { p,p,p,p,p }; |
||||
// ActionLabel tips = new ActionLabel("(对应实际值范围内的每个值)") {
|
||||
// @Override
|
||||
// public JToolTip createToolTip() {
|
||||
// MultiLineToolTip tip = new MultiLineToolTip();
|
||||
// tip.setComponent(this);
|
||||
// tip.setOpaque(false);
|
||||
// return tip;
|
||||
// }
|
||||
// };
|
||||
// tips.setToolTipText(Inter.getLocText("Formula_Dictionary_Display_Examples"));
|
||||
// JPanel cc = new JPanel(new BorderLayout());
|
||||
// cc.add(tips, BorderLayout.WEST);
|
||||
|
||||
UILabel tag = new UILabel(Inter.getLocText("Formula_Dictionary_Display_Examples_Html")); |
||||
JPanel t = new JPanel(new BorderLayout()); |
||||
t.add(tag, BorderLayout.WEST); |
||||
|
||||
Formula vf = new Formula("$$$"); |
||||
valueFormulaEditor = new FormulaEditor("",vf); |
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{new UILabel(Inter.getLocText("Actual_Value") + ":")}, |
||||
new Component[]{keyFormulaEditor}, |
||||
new Component[]{new UILabel(Inter.getLocText("Display_Value") + ":")}, |
||||
new Component[]{valueFormulaEditor}, |
||||
new Component[]{t} |
||||
new Component[]{null, null}, |
||||
new Component[]{new UILabel(Inter.getLocText("FR-Designer_Actual_Value"), UILabel.LEFT), keyFormulaContainer}, |
||||
new Component[]{null, null}, |
||||
new Component[]{new UILabel(Inter.getLocText("FR-Designer_Display_Value"), UILabel.LEFT), valueFormulaContainer}, |
||||
new Component[]{null, null}, |
||||
new Component[]{t, null} |
||||
}; |
||||
JPanel panel = TableLayoutHelper.createTableLayoutPane(components,rowSize,columnSize); |
||||
JPanel panel = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
this.setLayout(new BorderLayout()); |
||||
this.add(panel,BorderLayout.CENTER); |
||||
|
||||
} |
||||
|
||||
public void addChangeListener(DocumentListener l) { |
||||
keyFormulaEditor.addDocumentListener(l); |
||||
valueFormulaEditor.addDocumentListener(l); |
||||
} |
||||
|
||||
@Override |
||||
public String title4PopupWindow() { |
||||
return Inter.getLocText("Formula"); |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(FormulaDictionary dict) { |
||||
keyFormulaEditor.setValue(new Formula(dict.getProduceFormula() == null ? StringUtils.EMPTY : dict.getProduceFormula())); |
||||
valueFormulaEditor.setValue(new Formula(dict.getExcuteFormula() == null ? StringUtils.EMPTY : dict.getExcuteFormula())); |
||||
} |
||||
|
||||
@Override |
||||
public FormulaDictionary updateBean() { |
||||
FormulaDictionary dict = new FormulaDictionary(); |
||||
if (keyFormulaEditor.getValue() != null) { |
||||
dict.setProduceFormula(keyFormulaEditor.getValue().getContent()); |
||||
} |
||||
if (valueFormulaEditor.getValue() != null) { |
||||
dict.setExcuteFormula(valueFormulaEditor.getValue().getContent()); |
||||
} |
||||
|
||||
return dict; |
||||
} |
||||
|
||||
@Override |
||||
public boolean accept(Object ob) { |
||||
return ob instanceof FormulaDictionary; |
||||
} |
||||
|
||||
@Override |
||||
public void reset() { |
||||
keyFormulaEditor.reset(); |
||||
valueFormulaEditor.reset(); |
||||
} |
||||
this.add(panel, BorderLayout.CENTER); |
||||
|
||||
} |
||||
|
||||
public void addChangeListener(DocumentListener l) { |
||||
keyFormulaEditor.addDocumentListener(l); |
||||
valueFormulaEditor.addDocumentListener(l); |
||||
} |
||||
|
||||
@Override |
||||
public String title4PopupWindow() { |
||||
return Inter.getLocText("FR-Designer_Formula"); |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(FormulaDictionary dict) { |
||||
keyFormulaEditor.setValue(new Formula(dict.getProduceFormula() == null ? StringUtils.EMPTY : dict.getProduceFormula())); |
||||
valueFormulaEditor.setValue(new Formula(dict.getExcuteFormula() == null ? StringUtils.EMPTY : dict.getExcuteFormula())); |
||||
} |
||||
|
||||
@Override |
||||
public FormulaDictionary updateBean() { |
||||
FormulaDictionary dict = new FormulaDictionary(); |
||||
if (keyFormulaEditor.getValue() != null) { |
||||
dict.setProduceFormula(keyFormulaEditor.getValue().getContent()); |
||||
} |
||||
if (valueFormulaEditor.getValue() != null) { |
||||
dict.setExcuteFormula(valueFormulaEditor.getValue().getContent()); |
||||
} |
||||
|
||||
return dict; |
||||
} |
||||
|
||||
@Override |
||||
public boolean accept(Object ob) { |
||||
return ob instanceof FormulaDictionary; |
||||
} |
||||
|
||||
@Override |
||||
public void reset() { |
||||
keyFormulaEditor.reset(); |
||||
valueFormulaEditor.reset(); |
||||
} |
||||
} |
Loading…
Reference in new issue