forked from fanruan/finekit
richie
5 years ago
18 changed files with 1563 additions and 14 deletions
@ -0,0 +1,276 @@
|
||||
package com.fanruan.api.design.ui.component; |
||||
|
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fanruan.api.util.AssistKit; |
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.design.gui.date.JDateDocument; |
||||
import com.fr.design.gui.date.SingleObjectComboBoxModel; |
||||
import com.fr.design.gui.date.UICalendarPanel; |
||||
import com.fr.design.gui.icombobox.UIComboBoxUI; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import javax.swing.plaf.ComboBoxUI; |
||||
import javax.swing.plaf.basic.BasicComboPopup; |
||||
import javax.swing.plaf.basic.ComboPopup; |
||||
import java.awt.*; |
||||
import java.awt.event.MouseEvent; |
||||
import java.io.Serializable; |
||||
import java.text.ParseException; |
||||
import java.text.SimpleDateFormat; |
||||
import java.util.Date; |
||||
|
||||
/** |
||||
* @author richie |
||||
* @version 10.0 |
||||
* Created by richie on 2019/11/1 |
||||
*/ |
||||
public class UIDatePicker extends UIComboBox implements Serializable { |
||||
/** |
||||
* 日期格式类型 |
||||
*/ |
||||
public static final int STYLE_CN_DATE = 0; |
||||
public static final int STYLE_CN_DATE1 = 1; |
||||
public static final int STYLE_CN_DATETIME = 2; |
||||
public static final int STYLE_CN_DATETIME1 = 3; |
||||
public static final int STYLE_EN_DATE = 4; |
||||
public boolean isWillHide = false; |
||||
|
||||
/** |
||||
* 日期格式类型 |
||||
*/ |
||||
private int formatStyle = STYLE_CN_DATETIME; |
||||
/** |
||||
* 当前设置日期格式 |
||||
*/ |
||||
private SimpleDateFormat dateFormat = null; |
||||
|
||||
/** |
||||
* 只有一个值的ComboBoxModel |
||||
*/ |
||||
private SingleObjectComboBoxModel model = new SingleObjectComboBoxModel(); |
||||
|
||||
private JDateDocument dateDocument = null; |
||||
|
||||
public UIDatePicker() throws UnsupportedOperationException { |
||||
this(STYLE_CN_DATE); |
||||
} |
||||
|
||||
public UIDatePicker(int formatStyle) throws UnsupportedOperationException { |
||||
this(formatStyle, new Date()); |
||||
} |
||||
|
||||
public UIDatePicker(int formatStyle, Date initialDatetime) throws UnsupportedOperationException { |
||||
this.setStyle(formatStyle); |
||||
//设置可编辑
|
||||
this.setEditable(true); |
||||
|
||||
this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); |
||||
|
||||
//设置编辑器属性(只能输入正确日期)
|
||||
JTextField textField = ((JTextField) getEditor().getEditorComponent()); |
||||
textField.setHorizontalAlignment(SwingConstants.CENTER); |
||||
dateDocument = new JDateDocument(textField, this.dateFormat); |
||||
textField.setDocument(dateDocument); |
||||
//设置Model为单值Model
|
||||
this.setModel(model); |
||||
//设置当前选择日期
|
||||
this.setSelectedItem(initialDatetime == null ? new Date() : initialDatetime); |
||||
updateUI(); |
||||
} |
||||
|
||||
/** |
||||
* 设置日期格式 |
||||
* STYLE_CN_DATE |
||||
* STYLE_CN_DATE1 |
||||
* STYLE_CN_DATETIME |
||||
* STYLE_CN_DATETIME1 |
||||
* |
||||
* @param formatStyle int |
||||
*/ |
||||
public void setStyle(int formatStyle) throws UnsupportedOperationException { |
||||
this.formatStyle = formatStyle; |
||||
dateFormat = getDateFormat(formatStyle); |
||||
model.setDateFormat(dateFormat); |
||||
if (dateDocument != null) { |
||||
dateDocument.setDateFormat(dateFormat); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 取得指定类型的日期格式 |
||||
* |
||||
* @param formatStyle int |
||||
* @return SimpleDateFormat |
||||
* @throws UnsupportedOperationException |
||||
*/ |
||||
private static SimpleDateFormat getDateFormat(int formatStyle) throws |
||||
UnsupportedOperationException { |
||||
switch (formatStyle) { |
||||
case STYLE_CN_DATE: |
||||
return new SimpleDateFormat("yyyy/MM/dd"); |
||||
case STYLE_CN_DATE1: |
||||
return new SimpleDateFormat("yyyy-MM-dd"); |
||||
case STYLE_CN_DATETIME: |
||||
return new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); |
||||
case STYLE_CN_DATETIME1: |
||||
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
||||
case STYLE_EN_DATE: |
||||
return new SimpleDateFormat("MM/dd/yyyy"); |
||||
default: |
||||
throw new UnsupportedOperationException( |
||||
"invalid formatStyle parameter!"); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 取得日期格式 |
||||
* STYLE_CN_DATE |
||||
* STYLE_CN_DATE1 |
||||
* STYLE_CN_DATETIME |
||||
* STYLE_CN_DATETIME1 |
||||
* |
||||
* @return int |
||||
*/ |
||||
public int getStyle() { |
||||
return formatStyle; |
||||
} |
||||
|
||||
/** |
||||
* 取得当前选择的日期 |
||||
* |
||||
* @return Date |
||||
*/ |
||||
public Date getSelectedDate() throws ParseException { |
||||
synchronized (this) { |
||||
return dateFormat.parse(getSelectedItem().toString()); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 设置当前选择的日期 |
||||
*/ |
||||
public synchronized void setSelectedDate(Date date) throws ParseException { |
||||
if (date == null) { |
||||
this.setSelectedItem(null); |
||||
} else { |
||||
this.setSelectedItem(dateFormat.format(date)); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void setSelectedItem(Object anObject) { |
||||
model.setSelectedItem(anObject); |
||||
super.setSelectedItem(anObject); |
||||
} |
||||
|
||||
class DatePopup extends BasicComboPopup implements ChangeListener { |
||||
UICalendarPanel calendarPanel = null; |
||||
|
||||
public DatePopup(JComboBox box) { |
||||
super(box); |
||||
|
||||
setLayout(new BorderLayout()); |
||||
calendarPanel = new UICalendarPanel(formatStyle > 1); |
||||
calendarPanel.addDateChangeListener(this); |
||||
add(calendarPanel, BorderLayout.CENTER); |
||||
setBorder(BorderFactory.createEmptyBorder()); |
||||
} |
||||
|
||||
@Override |
||||
public void hide() { |
||||
if (isWillHide) { |
||||
super.hide(); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void show() { |
||||
if (isWillHide || !UIDatePicker.this.isEnabled()) { |
||||
return; |
||||
} |
||||
if (calendarPanel != null) { |
||||
calendarPanel.resetHMSPaneSelectedNumberField(); |
||||
} |
||||
super.show(); |
||||
} |
||||
|
||||
/** |
||||
* 显示弹出面板 |
||||
*/ |
||||
@Override |
||||
protected void firePropertyChange(String propertyName, |
||||
Object oldValue, |
||||
Object newValue) { |
||||
if (AssistKit.equals(propertyName, "visible")) { |
||||
if (oldValue == Boolean.FALSE && newValue == Boolean.TRUE) { //SHOW
|
||||
try { |
||||
String strDate = comboBox.getSelectedItem().toString(); |
||||
synchronized (this) { |
||||
Date selectionDate = new Date(); |
||||
if (StringKit.isNotBlank(strDate)) { |
||||
selectionDate = dateFormat.parse(strDate); |
||||
} |
||||
calendarPanel.setSelectedDate(selectionDate); |
||||
calendarPanel.updateHMS(); |
||||
} |
||||
} catch (Exception e) { |
||||
LogKit.error(e.getMessage(), e); |
||||
} |
||||
} else if (oldValue == Boolean.TRUE |
||||
&& newValue == Boolean.FALSE) { |
||||
} |
||||
} |
||||
super.firePropertyChange(propertyName, oldValue, newValue); |
||||
} |
||||
|
||||
public void stateChanged(ChangeEvent e) { |
||||
if (calendarPanel.getSelectedDate() != null && dateFormat != null) { |
||||
String strDate = dateFormat.format(calendarPanel.getSelectedDate()); |
||||
if (comboBox.isEditable() && comboBox.getEditor() != null) { |
||||
comboBox.configureEditor(comboBox.getEditor(), strDate); |
||||
} |
||||
comboBox.setSelectedItem(strDate); |
||||
} |
||||
comboBox.repaint(); |
||||
setVisible(false); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
protected ComboBoxUI getUIComboBoxUI() { |
||||
return new UIComboBoxUI() { |
||||
@Override |
||||
protected ComboPopup createPopup() { |
||||
return new UIDatePicker.DatePopup(comboBox); |
||||
} |
||||
|
||||
@Override |
||||
public void mousePressed(MouseEvent e) { |
||||
if (UIDatePicker.this.isPopupVisible()) { |
||||
isWillHide = true; |
||||
UIDatePicker.this.hidePopup(); |
||||
} else { |
||||
isWillHide = false; |
||||
UIDatePicker.this.showPopup(); |
||||
} |
||||
} |
||||
}; |
||||
} |
||||
|
||||
//设置dataFormat
|
||||
public void setDateFormat(SimpleDateFormat format) { |
||||
this.dateFormat = format; |
||||
} |
||||
|
||||
//获取dateFormat
|
||||
public SimpleDateFormat getDateFormat() { |
||||
return this.dateFormat; |
||||
} |
||||
|
||||
public JDateDocument getDateDocument() { |
||||
return this.dateDocument; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,20 @@
|
||||
package com.fanruan.api.design.ui.editor; |
||||
|
||||
import com.fr.design.editor.editor.Editor; |
||||
|
||||
import javax.swing.*; |
||||
|
||||
/** |
||||
* @author richie |
||||
* @version 10.0 |
||||
* Created by richie on 2019/11/1 |
||||
*/ |
||||
public abstract class BaseEditor<T> extends Editor<T> { |
||||
|
||||
/** |
||||
* 返回用于编辑和展示值的swing控件 |
||||
* |
||||
* @return swing控件 |
||||
*/ |
||||
public abstract JComponent getSwingComponent(); |
||||
} |
@ -0,0 +1,75 @@
|
||||
package com.fanruan.api.design.ui.editor; |
||||
|
||||
import com.fanruan.api.design.ui.component.UINumberField; |
||||
import com.fanruan.api.util.StringKit; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.awt.event.KeyAdapter; |
||||
import java.awt.event.KeyEvent; |
||||
import java.awt.event.KeyListener; |
||||
|
||||
/** |
||||
* @author richie |
||||
* @version 10.0 |
||||
* Created by richie on 2019/11/1 |
||||
* 用于编辑和展示数值的编辑器,该类是一个抽象类 |
||||
*/ |
||||
public abstract class BaseNumberEditor<T extends Number> extends BaseEditor<T> { |
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
protected UINumberField numberField; |
||||
|
||||
protected String oldValue = StringKit.EMPTY; |
||||
|
||||
public BaseNumberEditor() { |
||||
this(null, StringKit.EMPTY); |
||||
} |
||||
|
||||
public BaseNumberEditor(T value, String name) { |
||||
this.setLayout(new BorderLayout()); |
||||
numberField = new UINumberField(); |
||||
this.add(numberField, BorderLayout.CENTER); |
||||
KeyListener textKeyListener = new KeyAdapter() { |
||||
|
||||
public void keyReleased(KeyEvent evt) { |
||||
int code = evt.getKeyCode(); |
||||
|
||||
if (code == KeyEvent.VK_ESCAPE) { |
||||
numberField.setText(oldValue); |
||||
} |
||||
if (code == KeyEvent.VK_ENTER) { |
||||
fireEditingStopped(); |
||||
} else { |
||||
fireStateChanged(); |
||||
} |
||||
} |
||||
}; |
||||
this.numberField.addKeyListener(textKeyListener); |
||||
this.numberField.setHorizontalAlignment(SwingConstants.RIGHT); |
||||
this.setValue(value); |
||||
this.setName(name); |
||||
} |
||||
|
||||
@Override |
||||
public UINumberField getSwingComponent() { |
||||
return numberField; |
||||
} |
||||
|
||||
public void setEnabled(boolean enabled) { |
||||
this.numberField.setEnabled(enabled); |
||||
} |
||||
|
||||
public void selected() { |
||||
this.requestFocus(); |
||||
} |
||||
|
||||
public String getIconName() { |
||||
return "type_double"; |
||||
} |
||||
|
||||
public void requestFocus() { |
||||
this.numberField.requestFocus(); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,65 @@
|
||||
package com.fanruan.api.design.ui.editor; |
||||
|
||||
import com.fanruan.api.design.ui.component.UITextField; |
||||
import com.fanruan.api.util.StringKit; |
||||
|
||||
import java.awt.*; |
||||
|
||||
/** |
||||
* @author richie |
||||
* @version 10.0 |
||||
* Created by richie on 2019/11/1 |
||||
* 这是一个占位符编辑器,表示不选择值类型 |
||||
*/ |
||||
public class NoneEditor extends BaseEditor { |
||||
|
||||
private UITextField textField; |
||||
private String displayValue; |
||||
|
||||
public NoneEditor() { |
||||
this(null); |
||||
} |
||||
|
||||
public NoneEditor(String displayValue, String name) { |
||||
this.setLayout(new BorderLayout()); |
||||
this.displayValue = displayValue; |
||||
textField = new UITextField(); |
||||
this.add(textField, BorderLayout.CENTER); |
||||
if (displayValue != null) { |
||||
textField.setText(displayValue); |
||||
} |
||||
textField.setEditable(false); |
||||
this.setName(name); |
||||
} |
||||
|
||||
public NoneEditor(String displayValue) { |
||||
this(displayValue, StringKit.EMPTY); |
||||
} |
||||
|
||||
@Override |
||||
public UITextField getSwingComponent() { |
||||
return textField; |
||||
} |
||||
|
||||
@Override |
||||
public boolean accept(Object object) { |
||||
return false; |
||||
} |
||||
|
||||
@Override |
||||
public Object getValue() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public void setValue(Object value) { |
||||
if (displayValue != null) { |
||||
textField.setText(displayValue); |
||||
textField.setEditable(false); |
||||
} |
||||
} |
||||
|
||||
public String getIconName() { |
||||
return "type_none"; |
||||
} |
||||
} |
@ -1,14 +0,0 @@
|
||||
package com.fanruan.api.design.ui.editor; |
||||
|
||||
/** |
||||
* 文本编辑器 |
||||
* */ |
||||
public class TextEditor extends com.fr.design.editor.editor.TextEditor{ |
||||
public TextEditor(){ |
||||
|
||||
} |
||||
|
||||
public TextEditor(String value) { |
||||
super(value); |
||||
} |
||||
} |
@ -0,0 +1,89 @@
|
||||
package com.fanruan.api.design.ui.editor; |
||||
|
||||
import com.fanruan.api.design.DesignKit; |
||||
import com.fanruan.api.design.ui.component.UICheckBox; |
||||
|
||||
import java.awt.*; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
|
||||
/** |
||||
* @author richie |
||||
* @version 10.0 |
||||
* Created by richie on 2019/11/1 |
||||
* 用于编辑和展示布尔值的编辑器 |
||||
* TODO:待补充文档 |
||||
*/ |
||||
public class TypeBooleanEditor extends BaseEditor<Boolean> { |
||||
|
||||
private UICheckBox booleanCheckBox; |
||||
|
||||
public TypeBooleanEditor() { |
||||
this(Boolean.TRUE); |
||||
} |
||||
|
||||
public TypeBooleanEditor(boolean b) { |
||||
this(Boolean.valueOf(b)); |
||||
} |
||||
|
||||
public TypeBooleanEditor(Boolean value) { |
||||
this.setLayout(new BorderLayout()); |
||||
booleanCheckBox = new UICheckBox("true"); |
||||
this.add(booleanCheckBox, BorderLayout.CENTER); |
||||
this.setValue(value); |
||||
this.setName(DesignKit.i18nText("Fine-Design_Basic_Parameter_Boolean")); |
||||
booleanCheckBox.addItemListener(new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
fireStateChanged(); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
public UICheckBox getSwingComponent() { |
||||
return booleanCheckBox; |
||||
} |
||||
|
||||
@Override |
||||
public Boolean getValue() { |
||||
return this.booleanCheckBox.isSelected(); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public void setValue(Boolean value) { |
||||
if (value == null) { |
||||
value = true; |
||||
} |
||||
this.booleanCheckBox.setSelected(value); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public void setEnabled(boolean enabled) { |
||||
this.booleanCheckBox.setEnabled(enabled); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public void requestFocus() { |
||||
this.booleanCheckBox.requestFocus(); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
protected void fireEditingStopped() { |
||||
this.setValue(this.booleanCheckBox.isSelected()); |
||||
|
||||
super.fireEditingStopped(); |
||||
} |
||||
|
||||
public String getIconName() { |
||||
return "type_bool"; |
||||
} |
||||
|
||||
@Override |
||||
public boolean accept(Object object) { |
||||
return object instanceof Boolean; |
||||
} |
||||
} |
@ -0,0 +1,114 @@
|
||||
package com.fanruan.api.design.ui.editor; |
||||
|
||||
import com.fanruan.api.design.DesignKit; |
||||
import com.fanruan.api.design.work.component.IntComboBox; |
||||
|
||||
import java.awt.*; |
||||
import java.awt.event.ActionListener; |
||||
import java.awt.event.ItemListener; |
||||
|
||||
/** |
||||
* @author richie |
||||
* @version 10.0 |
||||
* Created by richie on 2019/11/1 |
||||
* 列序号编辑器:里面是一排连续的整数(0-n) |
||||
*/ |
||||
public class TypeColumnIndexEditor extends BaseEditor<Object> { |
||||
|
||||
IntComboBox valueColumnIndexComboBox; |
||||
|
||||
public TypeColumnIndexEditor() { |
||||
this(0); |
||||
} |
||||
|
||||
/** |
||||
* 默认名字是“列序号”,也可以通过第二个构造函数改变 |
||||
* |
||||
* @param value 边界值 |
||||
*/ |
||||
public TypeColumnIndexEditor(int value) { |
||||
this(value, DesignKit.i18nText("Fine-Design_Basic_Datasource_Column_Index")); |
||||
} |
||||
|
||||
public TypeColumnIndexEditor(int value, String name) { |
||||
this.setLayout(new BorderLayout(0, 0)); |
||||
valueColumnIndexComboBox = new IntComboBox(); |
||||
for (int i = 1; i <= value; i++) { |
||||
valueColumnIndexComboBox.addItem(i); |
||||
} |
||||
|
||||
if (value > 0) { |
||||
valueColumnIndexComboBox.setSelectedInt(1); |
||||
} |
||||
this.add(valueColumnIndexComboBox, BorderLayout.CENTER); |
||||
this.setName(name); |
||||
valueColumnIndexComboBox.setBorder(null); |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public IntComboBox getSwingComponent() { |
||||
return valueColumnIndexComboBox; |
||||
} |
||||
|
||||
@Override |
||||
public Integer getValue() { |
||||
return valueColumnIndexComboBox.getSelectedInt(); |
||||
} |
||||
|
||||
@Override |
||||
public void setValue(Object value) { |
||||
valueColumnIndexComboBox.setSelectedInt(value == null ? 0 : Integer.parseInt(value.toString())); |
||||
} |
||||
|
||||
public String getIconName() { |
||||
return "ds_column_index"; |
||||
} |
||||
|
||||
/** |
||||
* object参数是否是Integer |
||||
* |
||||
* @param object 传进来用于判断的参数 |
||||
* @return 返回是否是Index |
||||
*/ |
||||
public boolean accept(Object object) { |
||||
return object instanceof Integer; |
||||
} |
||||
|
||||
/** |
||||
* 增加一个ItemListener |
||||
* |
||||
* @param l 用于增加的Listener |
||||
*/ |
||||
public void addItemListener(ItemListener l) { |
||||
valueColumnIndexComboBox.addItemListener(l); |
||||
} |
||||
|
||||
/** |
||||
* 增加一个ActionListener |
||||
* |
||||
* @param l 用于增加的Listener |
||||
*/ |
||||
public void addActionListener(ActionListener l) { |
||||
valueColumnIndexComboBox.addActionListener(l); |
||||
} |
||||
|
||||
/** |
||||
* 重置 |
||||
*/ |
||||
public void reset() { |
||||
valueColumnIndexComboBox.setSelectedIndex(-1); |
||||
} |
||||
|
||||
/** |
||||
* 清除所有项 |
||||
*/ |
||||
public void clearData() { |
||||
valueColumnIndexComboBox.removeAllItems(); |
||||
} |
||||
|
||||
public void setEnabled(boolean enabled) { |
||||
super.setEnabled(enabled); |
||||
valueColumnIndexComboBox.setEnabled(enabled); |
||||
} |
||||
} |
@ -0,0 +1,78 @@
|
||||
package com.fanruan.api.design.ui.editor; |
||||
|
||||
import com.fanruan.api.design.DesignKit; |
||||
import com.fanruan.api.util.ArrayKit; |
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.design.gui.icombobox.UIComboBoxRenderer; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
|
||||
/** |
||||
* @author richie |
||||
* @version 10.0 |
||||
* Created by richie on 2019/11/1 |
||||
* 列编辑器,里面是数据集的列名 |
||||
*/ |
||||
public class TypeColumnNameEditor extends TypeColumnIndexEditor { |
||||
|
||||
private String[] columnNames; |
||||
|
||||
public TypeColumnNameEditor() { |
||||
this(ArrayKit.EMPTY_STRING_ARRAY); |
||||
} |
||||
|
||||
public TypeColumnNameEditor(String[] columnNames) { |
||||
this(columnNames, DesignKit.i18nText("Fine-Design_Basic_Column_Name")); |
||||
} |
||||
|
||||
public TypeColumnNameEditor(final String[] columnNames, String name) { |
||||
super(columnNames.length, name); |
||||
this.columnNames = columnNames; |
||||
valueColumnIndexComboBox.setRenderer(new UIComboBoxRenderer() { |
||||
@Override |
||||
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
||||
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); |
||||
|
||||
if (value == null) { |
||||
this.setText(""); |
||||
} else { |
||||
this.setText(columnNames[((Integer) value).intValue() - 1]); |
||||
} |
||||
|
||||
return this; |
||||
} |
||||
}); |
||||
} |
||||
|
||||
@Override |
||||
public void setValue(Object value) { |
||||
for (int i = 0; i < columnNames.length; i++) { |
||||
if (columnNames[i].equalsIgnoreCase(String.valueOf(value))) { |
||||
super.setValue(i + 1); |
||||
return; |
||||
} |
||||
} |
||||
|
||||
super.reset(); |
||||
} |
||||
|
||||
@Override |
||||
public boolean accept(Object object) { |
||||
return object instanceof String; |
||||
} |
||||
|
||||
public String getColumnName() { |
||||
int index = this.getValue() - 1; |
||||
return getColumnNameAtIndex(index); |
||||
} |
||||
|
||||
public String getColumnNameAtIndex(int index) { |
||||
return index >= 0 && columnNames.length > index ? columnNames[index] : StringKit.EMPTY; |
||||
} |
||||
|
||||
public String getIconName() { |
||||
return "ds_column_name"; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,150 @@
|
||||
package com.fanruan.api.design.ui.editor; |
||||
|
||||
import com.fanruan.api.design.ui.component.UIDatePicker; |
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fanruan.api.util.GeneralKit; |
||||
|
||||
import java.awt.*; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
import java.text.ParseException; |
||||
import java.text.SimpleDateFormat; |
||||
import java.util.Date; |
||||
import java.util.Locale; |
||||
|
||||
/** |
||||
* @author richie |
||||
* @version 10.0 |
||||
* Created by richie on 2019/11/1 |
||||
* 用于编辑和展示日期值的编辑器 |
||||
* TODO:待补充文档 |
||||
*/ |
||||
public class TypeDateEditor extends BaseEditor<Date> { |
||||
|
||||
private UIDatePicker uiDatePicker; |
||||
|
||||
public TypeDateEditor() { |
||||
this(null); |
||||
} |
||||
|
||||
public TypeDateEditor(boolean es) { |
||||
this(null, es); |
||||
} |
||||
|
||||
public TypeDateEditor(boolean es, String name) { |
||||
this(null, es, name); |
||||
} |
||||
|
||||
public TypeDateEditor(Date value) { |
||||
this(value, false); |
||||
} |
||||
|
||||
public TypeDateEditor(Date value, boolean format) { |
||||
this(value, format, ""); |
||||
} |
||||
|
||||
public TypeDateEditor(Date value, boolean format, String name) { |
||||
this.setLayout(new BorderLayout()); |
||||
uiDatePicker = new UIDatePicker(); |
||||
if (format) { |
||||
int dateStyle = (GeneralKit.getLocale() == Locale.ENGLISH |
||||
|| GeneralKit.getLocale() == Locale.US |
||||
|| GeneralKit.getLocale() == Locale.UK) ? UIDatePicker.STYLE_EN_DATE : UIDatePicker.STYLE_CN_DATE; |
||||
uiDatePicker.setStyle(dateStyle); |
||||
uiDatePicker.setEditable(false); |
||||
} |
||||
uiDatePicker.addItemListener(new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
fireStateChanged(); |
||||
} |
||||
}); |
||||
this.uiDatePicker.setFocusTraversalKeysEnabled(false); |
||||
this.add(uiDatePicker, BorderLayout.CENTER); |
||||
|
||||
this.setValue(value); |
||||
this.setName(name); |
||||
} |
||||
|
||||
public TypeDateEditor(Date value, boolean format, String name, int dateFormat) { |
||||
this.setLayout(new BorderLayout()); |
||||
uiDatePicker = new UIDatePicker(dateFormat); |
||||
if (format) { |
||||
uiDatePicker.setEditable(false); |
||||
} |
||||
uiDatePicker.addItemListener(new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
fireStateChanged(); |
||||
} |
||||
}); |
||||
this.uiDatePicker.setFocusTraversalKeysEnabled(false); |
||||
this.add(uiDatePicker, BorderLayout.CENTER); |
||||
|
||||
this.setValue(value); |
||||
this.setName(name); |
||||
} |
||||
|
||||
@Override |
||||
public UIDatePicker getSwingComponent() { |
||||
return uiDatePicker; |
||||
} |
||||
|
||||
@Override |
||||
public boolean accept(Object object) { |
||||
return object instanceof Date; |
||||
} |
||||
|
||||
@Override |
||||
public Date getValue() { |
||||
try { |
||||
return this.uiDatePicker.getSelectedDate(); |
||||
} catch (ParseException parseException) { |
||||
LogKit.error(parseException.getMessage(), parseException); |
||||
return new Date(); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void setValue(Date value) { |
||||
if (value == null) { |
||||
return; |
||||
} |
||||
|
||||
try { |
||||
this.uiDatePicker.setSelectedDate(value); |
||||
} catch (ParseException parseException) { |
||||
LogKit.error(parseException.getMessage(), parseException); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void setEnabled(boolean enabled) { |
||||
super.setEnabled(enabled); |
||||
|
||||
this.uiDatePicker.setEnabled(enabled); |
||||
} |
||||
|
||||
|
||||
public void selected() { |
||||
this.uiDatePicker.setSelectedItem(new Date()); |
||||
} |
||||
|
||||
@Override |
||||
public void requestFocus() { |
||||
this.uiDatePicker.requestFocus(); |
||||
} |
||||
|
||||
public String getIconName() { |
||||
return "type_date"; |
||||
} |
||||
|
||||
public void setUIDatePickerStyle(int style) { |
||||
this.uiDatePicker.setStyle(style); |
||||
} |
||||
|
||||
public SimpleDateFormat getUIDatePickerFormat() { |
||||
return this.uiDatePicker.getDateFormat(); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,47 @@
|
||||
package com.fanruan.api.design.ui.editor; |
||||
|
||||
import com.fanruan.api.design.DesignKit; |
||||
import com.fr.base.Utils; |
||||
|
||||
/** |
||||
* @author richie |
||||
* @version 10.0 |
||||
* Created by richie on 2019/11/1 |
||||
* 用于编辑和展示双精度浮点型数值的编辑器 |
||||
* TODO:待补充文档 |
||||
*/ |
||||
public class TypeDoubleEditor extends BaseNumberEditor<Double> { |
||||
|
||||
public TypeDoubleEditor() { |
||||
this(0.0); |
||||
} |
||||
|
||||
public TypeDoubleEditor(Double value) { |
||||
super(value, DesignKit.i18nText("Fine-Design_Basic_Parameter_Double")); |
||||
} |
||||
|
||||
@Override |
||||
public boolean accept(Object object) { |
||||
return object instanceof Double; |
||||
} |
||||
|
||||
@Override |
||||
public Double getValue() { |
||||
return this.numberField.getValue(); |
||||
} |
||||
|
||||
@Override |
||||
public void setValue(Double value) { |
||||
if (value == null) { |
||||
value = (double) 0; |
||||
} |
||||
this.numberField.setInteger(false); |
||||
this.numberField.setValue(value); |
||||
oldValue = Utils.objectToString(value); |
||||
} |
||||
|
||||
public String getIconName() { |
||||
return "type_double"; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,47 @@
|
||||
package com.fanruan.api.design.ui.editor; |
||||
|
||||
import com.fanruan.api.design.DesignKit; |
||||
import com.fr.base.Utils; |
||||
|
||||
/** |
||||
* @author richie |
||||
* @version 10.0 |
||||
* Created by richie on 2019/11/1 |
||||
* 用于编辑和展示单精度浮点型数值的编辑器 |
||||
* TODO:待补充文档 |
||||
*/ |
||||
public class TypeFloatEditor extends BaseNumberEditor<Float> { |
||||
|
||||
public TypeFloatEditor() { |
||||
this(0.0f); |
||||
} |
||||
|
||||
public TypeFloatEditor(Float value) { |
||||
super(value, DesignKit.i18nText("Fine-Design_Basic_Parameter_Float")); |
||||
} |
||||
|
||||
@Override |
||||
public boolean accept(Object object) { |
||||
return object instanceof Float; |
||||
} |
||||
|
||||
@Override |
||||
public Float getValue() { |
||||
return (float) this.numberField.getValue(); |
||||
} |
||||
|
||||
@Override |
||||
public void setValue(Float value) { |
||||
if (value == null) { |
||||
value = (float) 0; |
||||
} |
||||
this.numberField.setInteger(false); |
||||
this.numberField.setValue(value.doubleValue()); |
||||
oldValue = Utils.objectToString(value); |
||||
} |
||||
|
||||
public String getIconName() { |
||||
return "type_double"; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,161 @@
|
||||
package com.fanruan.api.design.ui.editor; |
||||
|
||||
import com.fanruan.api.design.ui.component.UITextField; |
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.base.BaseFormula; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.formula.FormulaFactory; |
||||
import com.fr.design.formula.UIFormula; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.awt.event.MouseAdapter; |
||||
import java.awt.event.MouseEvent; |
||||
|
||||
/** |
||||
* @author richie |
||||
* @version 10.0 |
||||
* Created by richie on 2019/11/1 |
||||
* 用于编辑和展示公式的编辑器 |
||||
* TODO:待补充文档 |
||||
*/ |
||||
public class TypeFormulaEditor extends BaseEditor<BaseFormula> { |
||||
private BaseFormula formula = BaseFormula.createFormulaBuilder().build(); |
||||
private UITextField currentTextField; |
||||
private TypeFormulaEditor.ShowPaneListener listener = new TypeFormulaEditor.ShowPaneListener(); |
||||
|
||||
|
||||
public TypeFormulaEditor() { |
||||
this(StringKit.EMPTY); |
||||
} |
||||
|
||||
public TypeFormulaEditor(String name) { |
||||
this(name, null); |
||||
} |
||||
|
||||
public TypeFormulaEditor(String name, BaseFormula formula) { |
||||
if (formula != null) { |
||||
this.formula = formula; |
||||
} |
||||
this.setLayout(new BorderLayout()); |
||||
|
||||
JPanel editPane = new JPanel(new BorderLayout()); |
||||
currentTextField = new UITextField(28); |
||||
currentTextField.setText(this.formula.getContent()); |
||||
|
||||
editPane.add(currentTextField, BorderLayout.CENTER); |
||||
currentTextField.setEditable(false); |
||||
currentTextField.addMouseListener(listener); |
||||
this.add(editPane, BorderLayout.CENTER); |
||||
this.setName(name); |
||||
} |
||||
|
||||
private class ShowPaneListener extends MouseAdapter { |
||||
public void mousePressed(MouseEvent e) { |
||||
if (currentTextField.isEnabled()) { |
||||
showFormulaPane(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 选中时弹出公式编辑框 |
||||
*/ |
||||
public void selected() { |
||||
showFormulaPane(); |
||||
} |
||||
|
||||
public void setEnabled(boolean enabled) { |
||||
super.setEnabled(enabled); |
||||
currentTextField.setEnabled(enabled); |
||||
} |
||||
|
||||
private void showFormulaPane() { |
||||
final UIFormula formulaPane = FormulaFactory.createFormulaPaneWhenReserveFormula(); |
||||
formulaPane.populate(formula); |
||||
formulaPane.showLargeWindow(SwingUtilities.getWindowAncestor(TypeFormulaEditor.this), new DialogActionAdapter() { |
||||
|
||||
@Override |
||||
public void doOk() { |
||||
formula = formulaPane.update(); |
||||
setValue(formula); |
||||
fireStateChanged(); |
||||
} |
||||
}).setVisible(true); |
||||
} |
||||
|
||||
public BaseFormula getFormula() { |
||||
return formula; |
||||
} |
||||
|
||||
@Override |
||||
public UITextField getSwingComponent() { |
||||
return currentTextField; |
||||
} |
||||
|
||||
/** |
||||
* object是否是公式类型对象 |
||||
* |
||||
* @param object 需判断的对象 |
||||
* @return 是公式类型则返回true |
||||
*/ |
||||
public boolean accept(Object object) { |
||||
return object instanceof BaseFormula; |
||||
} |
||||
|
||||
@Override |
||||
public BaseFormula getValue() { |
||||
if (formula != null && "=".equals(formula.getContent())) { |
||||
return null; |
||||
} |
||||
return formula; |
||||
} |
||||
|
||||
@Override |
||||
public void setValue(BaseFormula value) { |
||||
if (value == null) { |
||||
value = BaseFormula.createFormulaBuilder().build(); |
||||
} |
||||
this.formula = value; |
||||
currentTextField.setText(value.toString()); |
||||
} |
||||
|
||||
public String getIconName() { |
||||
return "type_formula"; |
||||
} |
||||
|
||||
/** |
||||
* 重置 |
||||
*/ |
||||
public void reset() { |
||||
currentTextField.setText("="); |
||||
formula = BaseFormula.createFormulaBuilder().build(); |
||||
} |
||||
|
||||
/** |
||||
* 清楚数据 |
||||
*/ |
||||
public void clearData() { |
||||
reset(); |
||||
} |
||||
|
||||
/** |
||||
* 是否可用 |
||||
* |
||||
* @param flag 为true代表可用 |
||||
*/ |
||||
public void enableEditor(boolean flag) { |
||||
this.setEnabled(flag); |
||||
this.currentTextField.setEnabled(flag); |
||||
if (!flag) { |
||||
this.currentTextField.removeMouseListener(listener); |
||||
} else { |
||||
int listenerSize = this.currentTextField.getMouseListeners().length; |
||||
for (int i = 0; i < listenerSize; i++) { |
||||
this.currentTextField.removeMouseListener(listener); |
||||
} |
||||
this.currentTextField.addMouseListener(listener); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,48 @@
|
||||
package com.fanruan.api.design.ui.editor; |
||||
|
||||
import com.fanruan.api.design.DesignKit; |
||||
import com.fanruan.api.util.GeneralKit; |
||||
|
||||
/** |
||||
* @author richie |
||||
* @version 10.0 |
||||
* Created by richie on 2019/11/1 |
||||
* 用于编辑和展示整数值的编辑器 |
||||
* TODO:待补充文档 |
||||
*/ |
||||
public class TypeIntegerEditor extends BaseNumberEditor<Integer> { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
public TypeIntegerEditor() { |
||||
this(0); |
||||
} |
||||
|
||||
public TypeIntegerEditor(Integer value) { |
||||
super(value, DesignKit.i18nText("Fine-Design_Basic_Parameter_Integer")); |
||||
} |
||||
|
||||
@Override |
||||
public boolean accept(Object object) { |
||||
return object instanceof Integer; |
||||
} |
||||
|
||||
@Override |
||||
public Integer getValue() { |
||||
return (int) this.numberField.getValue(); |
||||
} |
||||
|
||||
@Override |
||||
public void setValue(Integer value) { |
||||
if (value == null) { |
||||
value = 0; |
||||
} |
||||
this.numberField.setInteger(true); |
||||
this.numberField.setValue(value); |
||||
oldValue = GeneralKit.objectToString(value); |
||||
} |
||||
|
||||
public String getIconName() { |
||||
return "type_int"; |
||||
} |
||||
} |
@ -0,0 +1,43 @@
|
||||
package com.fanruan.api.design.ui.editor; |
||||
|
||||
import com.fanruan.api.util.GeneralKit; |
||||
|
||||
/** |
||||
* @author richie |
||||
* @version 10.0 |
||||
* Created by richie on 2019/11/1 |
||||
* 用于编辑和展示长整型数值的编辑器 |
||||
* TODO:待补充文档 |
||||
*/ |
||||
public class TypeLongEditor extends BaseNumberEditor<Long> { |
||||
|
||||
public TypeLongEditor() { |
||||
super(); |
||||
} |
||||
|
||||
public TypeLongEditor(Long value, String name) { |
||||
super(value, name); |
||||
} |
||||
|
||||
@Override |
||||
public boolean accept(Object object) { |
||||
return object instanceof Long; |
||||
} |
||||
|
||||
@Override |
||||
public Long getValue() { |
||||
return (long) (int) this.numberField.getValue(); |
||||
} |
||||
|
||||
@Override |
||||
public void setValue(Long value) { |
||||
if (value == null) { |
||||
value = 0L; |
||||
} |
||||
this.numberField.setInteger(true); |
||||
this.numberField.setValue(value.intValue()); |
||||
oldValue = GeneralKit.objectToString(value); |
||||
} |
||||
|
||||
|
||||
} |
@ -0,0 +1,63 @@
|
||||
package com.fanruan.api.design.ui.editor; |
||||
|
||||
import com.fanruan.api.design.DesignKit; |
||||
import com.fanruan.api.design.work.component.ParameterComboBox; |
||||
import com.fr.design.editor.editor.Editor; |
||||
import com.fr.stable.ParameterProvider; |
||||
|
||||
import java.awt.*; |
||||
|
||||
/** |
||||
* @author richie |
||||
* @version 10.0 |
||||
* Created by richie on 2019/11/1 |
||||
* 用于编辑和展示参数的编辑器 |
||||
* TODO:待补充文档 |
||||
*/ |
||||
public class TypeParameterEditor extends Editor<ParameterProvider> { |
||||
|
||||
private ParameterComboBox parameterCombobox; |
||||
|
||||
public TypeParameterEditor() { |
||||
this(null); |
||||
} |
||||
|
||||
public TypeParameterEditor(ParameterProvider parameter) { |
||||
parameterCombobox = new ParameterComboBox(); |
||||
parameterCombobox.setEditable(true); |
||||
this.setLayout(new BorderLayout()); |
||||
this.add(parameterCombobox, BorderLayout.CENTER); |
||||
this.setValue(parameter); |
||||
this.setName(DesignKit.i18nText("Fine-Design_Basic_Parameter")); |
||||
} |
||||
|
||||
@Override |
||||
public boolean accept(Object object) { |
||||
return object instanceof ParameterProvider; |
||||
} |
||||
|
||||
@Override |
||||
public ParameterProvider getValue() { |
||||
return parameterCombobox.getSelectedItem(); |
||||
} |
||||
|
||||
@Override |
||||
public void setValue(ParameterProvider value) { |
||||
parameterCombobox.setSelectedParameter(value); |
||||
} |
||||
|
||||
@Override |
||||
public void setEnabled(boolean enabled) { |
||||
super.setEnabled(enabled); |
||||
parameterCombobox.setEnabled(enabled); |
||||
} |
||||
|
||||
@Override |
||||
public void requestFocus() { |
||||
parameterCombobox.requestFocus(); |
||||
} |
||||
|
||||
public String getIconName() { |
||||
return "parameter"; |
||||
} |
||||
} |
@ -0,0 +1,146 @@
|
||||
package com.fanruan.api.design.ui.editor; |
||||
|
||||
import com.fanruan.api.design.DesignKit; |
||||
import com.fanruan.api.design.ui.component.UITextField; |
||||
import com.fanruan.api.util.StringKit; |
||||
|
||||
import java.awt.*; |
||||
import java.awt.event.KeyAdapter; |
||||
import java.awt.event.KeyEvent; |
||||
import java.awt.event.KeyListener; |
||||
|
||||
/** |
||||
* @author richie |
||||
* @version 10.0 |
||||
* Created by richie on 2019-08-27 |
||||
* 用于编辑和展示文本的编辑器 |
||||
* com.fr.design.editor.editor.Editor是一个可靠的API类 |
||||
*/ |
||||
public class TypeTextEditor extends BaseEditor<String> { |
||||
|
||||
private UITextField textField; |
||||
|
||||
private String oldValue = StringKit.EMPTY; |
||||
|
||||
/** |
||||
* 创建一个带空值的文本编辑器 |
||||
*/ |
||||
public TypeTextEditor() { |
||||
this(null); |
||||
} |
||||
|
||||
/** |
||||
* 创建一个带指定文本值的编辑器 |
||||
* |
||||
* @param value 值 |
||||
*/ |
||||
public TypeTextEditor(String value) { |
||||
this.setLayout(new BorderLayout()); |
||||
textField = new UITextField(); |
||||
textField.setBorder(null); |
||||
this.add(textField, BorderLayout.CENTER); |
||||
KeyListener textKeyListener = new KeyAdapter() { |
||||
|
||||
@Override |
||||
public void keyReleased(KeyEvent evt) { |
||||
int code = evt.getKeyCode(); |
||||
if (code == KeyEvent.VK_ESCAPE) { |
||||
textField.setText(oldValue); |
||||
} |
||||
if (code == KeyEvent.VK_ENTER) { |
||||
fireEditingStopped(); |
||||
} else { |
||||
fireStateChanged(); |
||||
} |
||||
} |
||||
}; |
||||
this.textField.addKeyListener(textKeyListener); |
||||
|
||||
this.setValue(value); |
||||
this.setName(DesignKit.i18nText("Fine-Design_Basic_Parameter_String")); |
||||
} |
||||
|
||||
/** |
||||
* 获取用于编辑和展示文本的源控件,是一个swing控件 |
||||
* |
||||
* @return swing控件 |
||||
*/ |
||||
public final UITextField getSwingComponent() { |
||||
return this.textField; |
||||
} |
||||
|
||||
/** |
||||
* 判断编辑器是否接受指定类型的值 |
||||
* |
||||
* @param object 待接收的值 |
||||
* @return 文本编辑器只接收文本类型的值,如果该值为文本类型,则返回true,否则返回false |
||||
*/ |
||||
@Override |
||||
public boolean accept(Object object) { |
||||
return object instanceof String; |
||||
} |
||||
|
||||
/** |
||||
* 获取编辑器中的文本内容 |
||||
* |
||||
* @return 编辑器的值 |
||||
*/ |
||||
@Override |
||||
public final String getValue() { |
||||
return this.textField.getText(); |
||||
} |
||||
|
||||
/** |
||||
* 设置编辑器的文本内容 |
||||
* |
||||
* @param value 待设置的文本内容 |
||||
*/ |
||||
@Override |
||||
public final void setValue(String value) { |
||||
if (value == null) { |
||||
value = StringKit.EMPTY; |
||||
} |
||||
|
||||
oldValue = value; |
||||
this.textField.setText(oldValue); |
||||
} |
||||
|
||||
/** |
||||
* 设置编辑器的可用性 |
||||
* |
||||
* @param enabled true表示可以使用,false表示被禁用(无法输入) |
||||
*/ |
||||
@Override |
||||
public final void setEnabled(boolean enabled) { |
||||
super.setEnabled(enabled); |
||||
this.textField.setEnabled(enabled); |
||||
} |
||||
|
||||
@Override |
||||
public final void requestFocus() { |
||||
this.textField.requestFocus(); |
||||
} |
||||
|
||||
/** |
||||
* 被选中时文本输入框请求焦点 |
||||
*/ |
||||
@Override |
||||
public void selected() { |
||||
this.textField.requestFocus(); |
||||
} |
||||
|
||||
@Override |
||||
public String getIconName() { |
||||
return "type_string"; |
||||
} |
||||
|
||||
/** |
||||
* 清楚编辑器中的所有值 |
||||
*/ |
||||
@Override |
||||
public void clearData() { |
||||
super.clearData(); |
||||
this.textField.setText(StringKit.EMPTY); |
||||
this.oldValue = StringKit.EMPTY; |
||||
} |
||||
} |
@ -0,0 +1,57 @@
|
||||
package com.fanruan.api.design.work.component; |
||||
|
||||
import com.fanruan.api.design.ui.component.UIComboBox; |
||||
import com.fr.design.gui.icombobox.UIComboBoxRenderer; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
|
||||
/** |
||||
* @author richie |
||||
* @version 10.0 |
||||
* Created by richie on 2019/11/1 |
||||
* 用于选择和展示整数的下拉框 |
||||
*/ |
||||
public class IntComboBox extends UIComboBox { |
||||
|
||||
public IntComboBox() { |
||||
init(); |
||||
} |
||||
|
||||
public IntComboBox(Integer[] data) { |
||||
ComboBoxModel<Integer> model = new DefaultComboBoxModel<>(data); |
||||
setModel(model); |
||||
init(); |
||||
} |
||||
|
||||
private void init() { |
||||
this.setRenderer(new UIComboBoxRenderer() { |
||||
public Component getListCellRendererComponent(JList list, |
||||
Object value, int index, boolean isSelected, boolean cellHasFocus) { |
||||
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); |
||||
if (value instanceof Integer) { |
||||
this.setText(" " + value + " "); |
||||
} |
||||
return this; |
||||
} |
||||
}); |
||||
} |
||||
|
||||
public int getSelectedInt() { |
||||
if (this.getSelectedItem() == null) { |
||||
return -1; |
||||
} |
||||
return (Integer) this.getSelectedItem(); |
||||
} |
||||
|
||||
public void setSelectedInt(int selectedInt) { |
||||
int index = -1; |
||||
for (int i = 0; i < this.getItemCount(); i++) { |
||||
if ((Integer) this.getItemAt(i) == selectedInt) { |
||||
index = i; |
||||
break; |
||||
} |
||||
} |
||||
this.setSelectedIndex(index); |
||||
} |
||||
} |
@ -0,0 +1,84 @@
|
||||
package com.fanruan.api.design.work.component; |
||||
|
||||
import com.fanruan.api.cal.ParameterKit; |
||||
import com.fanruan.api.design.ui.component.UIComboBox; |
||||
import com.fanruan.api.util.AssistKit; |
||||
import com.fr.design.DesignModelAdapter; |
||||
import com.fr.stable.ParameterProvider; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* @author richie |
||||
* @version 10.0 |
||||
* Created by richie on 2019/11/1 |
||||
* 参数选择下拉框 |
||||
*/ |
||||
public class ParameterComboBox extends UIComboBox<ParameterProvider> { |
||||
|
||||
public ParameterComboBox() { |
||||
this.initComponents(); |
||||
} |
||||
|
||||
private void initComponents() { |
||||
this.setRenderer(new DefaultListCellRenderer() { |
||||
public Component getListCellRendererComponent(JList list, |
||||
Object value, int index, boolean isSelected, boolean cellHasFocus) { |
||||
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); |
||||
|
||||
if (value instanceof ParameterProvider) { |
||||
this.setText(value.toString()); |
||||
} |
||||
|
||||
return this; |
||||
} |
||||
}); |
||||
updateParaItems(); |
||||
} |
||||
|
||||
public void updateParaItems() { |
||||
|
||||
DesignModelAdapter<?, ?> designModel = DesignModelAdapter.getCurrentModelAdapter(); |
||||
|
||||
this.removeAllItems(); |
||||
if (designModel != null) { |
||||
ParameterProvider[] paras = designModel.getParameters(); |
||||
List<String> paraNameList = new ArrayList<String>(); |
||||
for (int i = 0; i < paras.length; i++) { |
||||
String paraName = paras[i].getName(); |
||||
if (!paraNameList.contains(paraName)) { |
||||
paraNameList.add(paraName); |
||||
this.addItem(paras[i]); |
||||
} |
||||
|
||||
} |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public ParameterProvider getSelectedItem() { |
||||
if (super.getSelectedItem() instanceof ParameterProvider) { |
||||
return (ParameterProvider) super.getSelectedItem(); |
||||
} else if (super.getSelectedItem() instanceof String && ((String) super.getSelectedItem()).startsWith("$")) { |
||||
return ParameterKit.newParameter(((String) super.getSelectedItem()).substring(1)); |
||||
} |
||||
return ParameterKit.newParameter(); |
||||
} |
||||
|
||||
public void setSelectedParameter(ParameterProvider parameter) { |
||||
if (parameter == null) { |
||||
return; |
||||
} |
||||
for (int i = 0; i < this.getItemCount(); i++) { |
||||
if (AssistKit.equals(((ParameterProvider) this.getItemAt(i)).getName(), parameter.getName())) { |
||||
this.setSelectedIndex(i); |
||||
return; |
||||
} |
||||
} |
||||
this.addItem(parameter); |
||||
this.setSelectedItem(parameter); |
||||
} |
||||
} |
Loading…
Reference in new issue