Java Swing JTextField
Java Swing教程 - Java Swing JTextField
JTextField可以处理一行纯文本。它的构造函数接受以下三个值的组合。
- A string - specifies the initial text. Default to null.
- The number of columns - specifies the width. Default to 0.
- A Document object - specifies the model.
文档模型是 PlainDocument 类的一个实例。
下表列出了JTextField类的构造函数。
| ID | 构造函数/说明 |
|---|---|
| 1 | JTextField()创建具有初始文本,列数和文档的默认值的JTextField。 |
| 2 | JTextField(文档文档,字符串文本,int列)创建一个JTextField,其中指定的文档作为其模型,文本作为其初始文本,列作为列数。 |
| 3 | JTextField(int columns)创建具有指定列作为其列数的JTextField。 |
| 4 | JTextField(字符串文本)创建具有指定文本作为其初始文本的JTextField。 |
| 5 | JTextField(String text,int columns)创建具有指定文本作为其初始文本和列作为其列数的JTextField。 |
| 6 | |
| 7 |
创建一个空的JTextField
JTextField emptyTextField = new JTextField();
要创建一个初始文本为Hello的JTextField
JTextField helloTextField = new JTextField("Hello");
要创建一个初始文本为Hello的JTextField...
JTextField nameTextField = new JTextField(20);
对准
默认情况下,文本对齐是左对齐。
public void setHorizontalAlignment(int alignment)方法接受一个参数
- JTextField.LEFT
- JTextField.CENTER
- JTextField.RIGHT
- JTextField.LEADING (the default)
- JTextField.TRAILING
import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
/* w w w . j ava2 s. co m*/
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Main {
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new BorderLayout());
JLabel label = new JLabel("Name: ");
label.setDisplayedMnemonic(KeyEvent.VK_N);
JTextField textField = new JTextField();
textField.setHorizontalAlignment(JTextField.CENTER) ;
label.setLabelFor(textField);
panel.add(label, BorderLayout.WEST);
panel.add(textField, BorderLayout.CENTER);
frame.add(panel, BorderLayout.NORTH);
frame.setSize(250, 150);
frame.setVisible(true);
}
}
模型
以下代码显示如何镜像JTextField通过与另一个JTextField共享其模型。
import java.awt.Container;
import java.awt.GridLayout;
/*from w ww.jav a 2s . co m*/
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.text.Document;
public class Main extends JFrame {
JLabel nameLabel = new JLabel("Name:");
JLabel mirroredNameLabel = new JLabel("Mirrored:");
JTextField name = new JTextField(20);
JTextField mirroredName = new JTextField(20);
public Main() {
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLayout(new GridLayout(2, 0));
Container contentPane = this.getContentPane();
contentPane.add(nameLabel);
contentPane.add(name);
contentPane.add(mirroredNameLabel);
contentPane.add(mirroredName);
Document nameModel = name.getDocument();
mirroredName.setDocument(nameModel);
pack();
setVisible(true);
}
public static void main(String[] args) {
Main frame = new Main();
}
}
以下代码显示如何镜像JTextField通过与另一个JTextField共享其模型。...
下面的代码包含一个LimitedCharDocument类,它继承自PlainDocument类。
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
class LimitedCharDocument extends PlainDocument {
private int limit = 10;
public LimitedCharDocument() {
}
@Override
public void insertString(int offset, String str, AttributeSet a)
throws BadLocationException {
String newString = str;
if (str != null) {
int currentLength = this.getLength();
int newTextLength = str.length();
if (currentLength + newTextLength > limit) {
newString = str.substring(0, limit - currentLength);
}
}
super.insertString(offset, newString, a);
}
}
下面的代码包含一个LimitedCharDocument类,它继承自PlainDocument类。...
int offset 是字符串插入JTextField的位置。
String str 是插入到JTextField中的字符串。
AttributeSet a 与插入的文本相关联。
我们可以使用LimitedCharDocument如下:
Document tenCharDoc = new LimitedCharDocument(10); JTextField t1 = new JTextField(tenCharDoc, "your name", 10);
还有一种为JTextField设置文档的方法。 我们可以创建一个新类继承自JTextField并覆盖其createDefaultModel()方法。
createDefaultModel()方法在JTextField类中声明为protected并返回一个PlainDocument。
要自定义JTextField,我们可以从此方法返回自定义文档类的实例。
要自定义JTextField,我们可以从此方法返回自定义文档类的实例。...
class TenCharTextField extends JTextField {
@Override
protected Document createDefaultModel() {
return new LimitedCharDocument(10);
}
}
动作侦听器
以下代码显示了如何向JTextField添加Action Listener。单击Enter按钮时会触发动作侦听器。
import java.awt.event.ActionEvent;
//from w w w. ja va2s .c o m
import javax.swing.JFrame;
import javax.swing.JTextField;
public class Main {
public static void main(String[] a) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField jTextField1 = new JTextField();
jTextField1.setText("jTextField1");
jTextField1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("action");
}
});
frame.add(jTextField1);
frame.setSize(300, 200);
frame.setVisible(true);
}
}
在聚焦横移期间验证输入
以下代码显示如何使用InputVerifier进行验证在焦点遍历期间输入。
import java.awt.BorderLayout;
import javax.swing.InputVerifier;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class Main {
public static void main(String args[]) {
JFrame frame = new JFrame("Verifier Sample");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField textField1 = new JTextField();
JTextField textField2 = new JTextField();
InputVerifier verifier = new InputVerifier() {
public boolean verify(JComponent comp) {
boolean returnValue;
JTextField textField = (JTextField) comp;
try {//from w ww . j ava 2 s.c o m
Integer.parseInt(textField.getText());
returnValue = true;
} catch (NumberFormatException e) {
returnValue = false;
}
return returnValue;
}
};
textField1.setInputVerifier(verifier);
frame.add(textField1, BorderLayout.NORTH);
frame.add(textField2, BorderLayout.CENTER);
frame.setSize(300, 100);
frame.setVisible(true);
}
}
在聚焦横移期间验证输入...
为了确保内容的结尾可见,更改scrollOffset设置。
import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
/* w ww . j av a 2s . c o m*/
import javax.swing.BoundedRangeModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Main {
public static void main(String args[]) {
JFrame frame = new JFrame("Label Focus Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new BorderLayout());
JLabel label = new JLabel("Name: ");
label.setDisplayedMnemonic(KeyEvent.VK_N);
JTextField textField = new JTextField();
label.setLabelFor(textField);
panel.add(label, BorderLayout.WEST);
panel.add(textField, BorderLayout.CENTER);
frame.add(panel, BorderLayout.NORTH);
frame.setSize(250, 150);
frame.setVisible(true);
textField.setText("Loooooooooooooooooooooooooooooooooooooooooooooooooooooooong");
BoundedRangeModel model = textField.getHorizontalVisibility();
int extent = model.getExtent();
textField.setScrollOffset(extent);
System.out.println("extent:"+extent);
}
}
输出到文件
以下代码显示如何使用write()方法写入内容。
import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.io.FileWriter;
import java.io.IOException;
/*w w w . ja va2 s . c om*/
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Main {
public static void main(String args[]) {
JFrame frame = new JFrame("Label Focus Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new BorderLayout());
JLabel label = new JLabel("Name: ");
label.setDisplayedMnemonic(KeyEvent.VK_N);
JTextField textField = new JTextField();
label.setLabelFor(textField);
panel.add(label, BorderLayout.WEST);
panel.add(textField, BorderLayout.CENTER);
frame.add(panel, BorderLayout.NORTH);
frame.add(new JButton("Somewhere Else"), BorderLayout.SOUTH);
frame.setSize(250, 150);
frame.setVisible(true);
textField.setText("your text");
String filename = "test.txt";
FileWriter writer = null;
try {
writer = new FileWriter(filename);
textField.write(writer);
} catch (IOException exception) {
System.err.println("Save oops");
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException exception) {
System.err.println("Error closing writer");
exception.printStackTrace();
}
}
}
}
}
输出到文件...
import java.awt.Container;
/*from w w w . j a v a 2s. com*/
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class DragDropText extends JFrame {
public static void main(String[] args) {
new DragDropText().setVisible(true);
}
public DragDropText() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField field1 = new JTextField("Life"s a drag", 20);
JTextField field2 = new JTextField("and then you drop", 20);
field1.setDragEnabled(true);
field2.setDragEnabled(true);
Container content = getContentPane();
content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
content.add(field1);
content.add(field2);
pack();
}
}
在JTextField中剪切,粘贴和复制
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
// w ww. j a v a 2 s .co m
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
public class Main {
public static void main(String args[]) {
final JTextField textField = new JTextField(15);
JButton buttonCut = new JButton("Cut");
JButton buttonPaste = new JButton("Paste");
JButton buttonCopy = new JButton("Copy");
JFrame jfrm = new JFrame("Cut, Copy, and Paste");
jfrm.setLayout(new FlowLayout());
jfrm.setSize(230, 150);
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
buttonCut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent le) {
textField.cut();
}
});
buttonPaste.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent le) {
textField.paste();
}
});
buttonCopy.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent le) {
textField.copy();
}
});
textField.addCaretListener(new CaretListener() {
public void caretUpdate(CaretEvent ce) {
System.out.println("All text: " + textField.getText());
if (textField.getSelectedText() != null)
System.out.println("Selected text: " + textField.getSelectedText());
else
System.out.println("Selected text: ");
}
});
jfrm.add(textField);
jfrm.add(buttonCut);
jfrm.add(buttonPaste);
jfrm.add(buttonCopy);
jfrm.setVisible(true);
}
}
将键监听器事件处理程序添加到JTextField
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.HeadlessException;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
//from w w w . j a v a 2s . co m
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class Main extends JFrame {
public Main() throws HeadlessException {
setSize(200, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout(FlowLayout.LEFT));
JLabel usernameLabel = new JLabel("Username: ");
JTextField usernameTextField = new JTextField();
usernameTextField.setPreferredSize(new Dimension(100, 20));
add(usernameLabel);
add(usernameTextField);
usernameTextField.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) {
JTextField textField = (JTextField) e.getSource();
String text = textField.getText();
textField.setText(text.toUpperCase());
}
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
}
});
}
public static void main(String[] args) {
new Main().setVisible(true);
}
}
将焦点设置在特定的JTextField上
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
/* w w w . j a v a2s.c o m*/
public class Main {
public static void main(String[] argv) throws Exception {
final JTextField textfield = new JTextField(10);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
textfield.requestFocus();
}
});
}
}
基于JTextField内容,启用或禁用JButton
import java.awt.BorderLayout;
/* ww w .j ava 2 s.c o m*/
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.Document;
public class Main {
public Main() {
JButton button = new JButton("foo");
JTextField textField = new JTextField(10);
Document document = textField.getDocument();
document.addDocumentListener(new JButtonStateController(button));
JFrame frame = new JFrame();
frame.add(button,BorderLayout.WEST);
frame.add(textField,BorderLayout.CENTER);
frame.setSize(300,300);
frame.setVisible(true);
}
}
class JButtonStateController implements DocumentListener {
JButton button;
JButtonStateController(JButton button) {
this.button = button ;
}
public void changedUpdate(DocumentEvent e) {
disableIfEmpty(e);
}
public void insertUpdate(DocumentEvent e) {
disableIfEmpty(e);
}
public void removeUpdate(DocumentEvent e) {
disableIfEmpty(e);
}
public void disableIfEmpty(DocumentEvent e) {
button.setEnabled(e.getDocument().getLength() > 0);
}
}

免费 AI IDE


更多建议: