📄 cellnopane.java
字号:
/***********************************************************************
* Module: CellNoPane.java
* Author: Administrator
* Purpose: Defines the Class CellNoPane
***********************************************************************/
package com.zcsoft.stock;
import javax.swing.*;
import java.util.*;
import java.awt.*;
import com.zcsoft.swing.*;
/** 库位排,列,层输入界面 */
public class CellNoPane extends JPanel
{
/** 排输入组件 */
private JComponent line;
/** 列输入组件 */
private JComponent column;
/** 层输入组件 */
private JComponent layer;
/** “全部”选项 */
public static final String ALL = "全部";
/** 缺省的排列层输入组件文字描述 */
public static final String[] DEFAULT_LABEL = new String[]{"排号","列号","层号"};
/** 实际排、列、层前面的文字 */
private String[] label;
/** @param selectable 是否允许选择输入。
* 如果为false,则输入组件为ZCIntTextField,
* 最大最小值分别为99,1。<br>
* 如果为true,则输入组件为JComboBox
* @param label 排、列、层输入组件前的文字说明
* 由“排数”,“列数”、“层数”
* 和“排号”,“列号”、“层号”两者之间进行组合 */
public CellNoPane(boolean selectable, String[] label)
{
super(new FlowLayout(FlowLayout.LEFT, 5, 0));
if (selectable)
{
line = new JComboBox();
column = new JComboBox();
layer = new JComboBox();
}
else
{
line = new ZCIntTextField(1, 99, 3);
column = new ZCIntTextField(1, 99, 3);
layer = new ZCIntTextField(1, 30, 3);
}
this.label = label;
layoutComponents();
}
/**
* 构造一个自定义的排列层输入组件
* @param label 排、列、层输入组件前的文字说明
* @param comps 排、列、层输入组件
*
*/
public CellNoPane(String[] label, JComponent[] comps)
{
this(null, label, comps);
}
/**
* 构造一个自定义的排列层输入组件。
* @param name 库位的名称。布局面板时,该名称将以JLabel形式被添加到面板的前面。
* @param label 排、列、层输入组件前的文字说明
* @param comps 排、列、层输入组件
*
*/
public CellNoPane(String name, String[] label, JComponent[] comps)
{
super(new FlowLayout(FlowLayout.LEFT, 5, 0));
if (name != null && name.length() > 0)
{
this.add(new JLabel(name));
}
this.label = label;
line = comps[0];
column = comps[1];
layer = comps[2];
layoutComponents();
}
private void layoutComponents()
{
this.add(new JLabel(label[0]));
this.add(line);
this.add(new JLabel(label[1]));
this.add(column);
this.add(new JLabel(label[2]));
this.add(layer);
line.addKeyListener(EnterKeyListener.SINGLETON);
column.addKeyListener(EnterKeyListener.SINGLETON);
layer.addKeyListener(EnterKeyListener.SINGLETON);
}
/** 返回依次由排列层各两个字符共6个字符构成的字符串
* 如果用户选择排、列或层是“全部”,则对应的两个字符为"__"
*
* 依次由排列层各两个字符共6个字符构成的字符串 */
public String getValue()
{
String ln
, c
, ly;
if (line instanceof JComboBox)
{
ln = String.valueOf(((JComboBox)line).getSelectedItem());
c = String.valueOf(((JComboBox)column).getSelectedItem());
ly = String.valueOf(((JComboBox)layer).getSelectedItem());
}
else
{
ln = ((JTextField)line).getText();
c = ((JTextField)column).getText();
ly = ((JTextField)layer).getText();
}
return transformNo(ln) + transformNo(c) + transformNo(ly);
}
String transformNo(String raw)
{
if(ALL.equals(raw))
{
return "__";
}
else if(raw.length() > 2)//002
{//剔除前面的‘0’
raw = Integer.toString(Integer.parseInt(raw));
}
if(raw.length() == 1)
{
raw = String.valueOf('0').concat(raw);
}
return raw;
}
/** 设置排列层的值。<br>
* 设置时,需要判断是否为选择输入方式:<br>
* 如果为否,则说明是在增加单个库位或者在增加仓库过程中首次装入库位情形下
* 构造该实例。<br>
* 如果为true,则输入组件是三个下拉框,其中第二个选择项为“全部”,第一个选项分别为所选记录对应排号、列号和层号。此时有且只有两个选项。
*
* @param value 依次由排列层各两个字符共6个字符构成的字符串 */
public void setValue(String value)
{
String ln = value.substring(0, 2)
, c = value.substring(2, 4)
, ly = value.substring(4, 6);
if (line instanceof JComboBox)
{
((JComboBox)line).setModel(new DefaultComboBoxModel(new Object[]{ln, ALL}));
((JComboBox)column).setModel(new DefaultComboBoxModel(new Object[]{c, ALL}));
((JComboBox)layer).setModel(new DefaultComboBoxModel(new Object[]{ly, ALL}));
}
else
{
((JTextField)line).setText(ln);
((JTextField)column).setText(c);
((JTextField)layer).setText(ly);
}
}
/**
* 获取列输入组件
* @return
*/
public JComponent getColumn()
{
return column;
}
/**
* 获取层输入组件
* @return
*/
public JComponent getLayer()
{
return layer;
}
/**
* 获取排输入组件
* @return
*/
public JComponent getLine()
{
return line;
}
/**
* 将排列层输入项添加到绑定器中
* @param tfg 输入绑定器
*/
public void bindOn(com.zcsoft.swing.TextFieldGroup tfg)
{
tfg.addInput(this.line);
tfg.addInput(this.column);
tfg.addInput(this.layer);
}
/**
* 从输入绑定器中删除排列层输入项
* @param tfg 输入绑定器
*/
public void unbindFrom(com.zcsoft.swing.TextFieldGroup tfg)
{
tfg.removeInput(this.line);
tfg.removeInput(this.column);
tfg.removeInput(this.layer);
}
/**
* 重新实现超类方法,使得排列层输入项的可用性同整个组件保持一致
* @param enable 是否可用
*/
public void setEnabled(boolean enable)
{
Component[] children = this.getComponents();
for (int i = 0; i < children.length; i++)
{
children[i].setEnabled(enable);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -