设置JTextField的大小 , 一般跟布局管理器有关系.
布局是流布局时 ,那么可以在创建对象时,设置JTextField的大小(长度)
JTextField jtf= new JTextField(8)//长度为8的文本输入框布局是空布局, 那么可以设置JTextField的size来设置大小
JTextField jtf= new JTextField()//jtf.setBounds(30, 50, 220, 20)//30 50表示位置坐标, 宽220 高20
jtf.setLocation(30, 50)//设置位置
jtf.setSize(220, 20)//设置大小
//引用方法://JtextField jtf = new JTextFiel()
//jtf.setDocument(new ClsNumberDocument(5))
import javax.swing.text.PlainDocument
import javax.swing.text.AttributeSet
import javax.swing.text.BadLocationException
import java.awt.Toolkit
/**
* <p>Title: 限制输入为数字</p>
* @author Wancar
* @version 0.5
* 日期 2002-03-21
* @copyright (c) 2000-2001.
*
* @description
* 限制输入为数字的文本类
*
* 并行策略描述(可选)
* 修改历史:
* 无
* 修改描述:无
*
* 内部类清单:
* 无
*/
/**
* 限制输入为数字的文本类
*/
public class ClsNumberDocument extends PlainDocument {
/**
*
*/
private static final long serialVersionUID = 1L
private boolean isCanBeNegative = false // 可以为负数
private final static int STRING_MAX_LEN = 255 // 最大长度
private int len = STRING_MAX_LEN // 当前可接受的最大长度
/**
* 构造方法
*/
public ClsNumberDocument() {
}
/**
* 构造方法
*
* @param len
* 限制的长度
*/
public ClsNumberDocument(int len) {
this.len = len
}
/**
* 可以为付数并限制长度
*
* @param isCanBeNegative
* 是否可以为负数
* @param len
* 限制的最大长度
*/
public ClsNumberDocument(boolean isCanBeNegative, int len) {
this.isCanBeNegative = isCanBeNegative
this.len = len
}
// 变量falg的作用是,通过传入的数是正数还是负数来决定数字的位数
// 以便做到指定数字位数时,只要考虑数字的位数,而无需考虑正负号
// 所占用的位数。
private boolean falg = false
/**
* 实现的插入方法
*
* @param offset
* 偏移
* @param s
* 要接受的字符串,在拷贝粘贴时会有多个字符
* @param attributeSet
* @throws BadLocationException
*/
public void insertString(int offset, String s, AttributeSet attributeSet)
throws
BadLocationException {
try {
if (isAllNumber(s)) {
final int length = this.getLength()
if (s.charAt(0) == '-') {
if (this.isCanBeNegative) {
if (length == 0) {
this.len = falg ? len : len + 1
falg = true
super.insertString(offset, s, attributeSet)
}
}
} else {
if (length == 0) {
this.len = falg ? len - 1 : len
falg = false
}
if (length < len) {
String src = this.getText(0, length)
Double.parseDouble(src.substring(0, offset) + s
+ src.substring
(offset, src.length()))
super.insertString(offset, s, attributeSet)
}
}
}
} catch (Exception ex) {
Toolkit.getDefaultToolkit().beep()
}
}
/**
* 判断字符串是否全是数字
*
* @param s
* @return
*/
private boolean isAllNumber(String s) {
boolean ret = true
if (s.length() > 0) {
char[] buf = s.toCharArray()
for (int i = 0 i < buf.length i++) {
char c = buf[i]
if (c < '0' || c > '9') {
if (c != '.' && c != '-') {
ret = false
break
}
}
}
} else {
ret = false
}
return ret
}
}
可以靠焦点得失之后,进行判定,如果为空字符串,就显示默认值代码:
import java.awt.event.*
import javax.swing.*
public class DefaultValueTextField extends JTextField {
public DefaultValueTextField() {
this.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
clearDefault()
}
@Override
public void focusLost(FocusEvent e) {
showDefault()
}
})
}
@Override
public String getText() {
String s = super.getText()
if (s.equals(DEFAULT)) {
return ""
} else {
return s
}
}
@Override
public void setText(String t) {
if (t.equals("")) {
super.setText(DEFAULT)
} else {
super.setText(t)
}
}
public static void main(String[] args) {
JFrame frame = new JFrame()
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
final JTextField f = new DefaultValueTextField()
f.setColumns(20)
JPanel panel = new JPanel()
panel.add(f)
JButton button = new JButton("reset")
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
f.setText("")
}
})
panel.add(button)
frame.add(panel)
frame.pack()
frame.setVisible(true)
}
private void clearDefault() {
if (super.getText().equals(DEFAULT)) {
this.setText("")
}
}
private void showDefault() {
if (super.getText().equals("")) {
this.setText(DEFAULT)
}
}
private static final String DEFAULT = "INPUT HERE!"
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)