📄 s22.htm
字号:
<SCRIPT LANGUAGE="JavaScript" SRC="/-fs0/sys/pop-up.js"></SCRIPT><SCRIPT LANGUAGE="JavaScript" SRC="/-fs0/sys/pop-up-all.js"></SCRIPT><html><head><title>易都网--Java 2 图形设计卷Ⅱ:SWING</title><LINK rel="stylesheet" href="../../../_public/javaa.css"><meta http-equiv="Content-Type" content="text/html; charset=GBK"><script language="JavaScript" src="../../../_public/javaa.js"></script><meta name="keywords" content="Java,JSP,ASP,PHP,J2EE,EJB,JavaScript,C/C++,ASM,CSS,HTML,XML,网络安全,MySQL,ACCESS"></head><body bgcolor="#FFFFFF"><table border=0 cellpadding=0 cellspacing=0 width="100%"> <tbody> <script language="javascript">print2()</script> <tr> <td width="100%"> <table bgcolor=#EEEEEE border=0 cellpadding=3 cellspacing=0 width="100%"> <tbody> <tr> <td class=f1 id=thetd width="100%"> <p>[<a href="index.html" target="_self">目录</a>][<a href="s21.htm">上一页</a>][<a href="s23.htm">下一页</a>]</p> <p align="center"><b>第22章 文本组件</b></p> <p> Swing提供两种完全不同的文本组件类型:简单文本控件和风格文本组件。简单文本控件一次只能显示一种字体和一种颜色,而风格文本组件则可以显示多种字体和颜色。前者有单行文本域(JTextField)、口令域(JPassowrdField)、后者有编辑器窗格(JEditorPan)和文本窗格(JTextPane)。 </p> <p> <b>22.1 JTextField</b></p> <p align="center"><b>例22-1 单行文本域的排列方式和列数</b></p> <hr size="1" noshade> import javax.swing.*;<br> import java.awt.*;<br> import java.awt.event.*;<br> import java.util.*; <p>public class Test extends JApplet {<br> private JPanel textFieldPanel = new JPanel();<br> private JTextField textField = <br> new JTextField("initial content");</p> <p> public void init() {<br> Container contentPane = getContentPane();</p> <p> textFieldPanel.add(textField);</p> <p> contentPane.setLayout(new BorderLayout(0,20));<br> contentPane.add(new ControlPanel(), BorderLayout.NORTH);<br> contentPane.add(textFieldPanel, BorderLayout.CENTER);<br> }<br> class ControlPanel extends JPanel {<br> private JComboBox alignments = new JComboBox();<br> private JComboBox columns = new JComboBox();</p> <p> public ControlPanel() {<br> columns.addItem(new Integer(0));<br> columns.addItem(new Integer(5));<br> columns.addItem(new Integer(10));<br> columns.addItem(new Integer(15));</p> <p> alignments.addItem("LEFT"); <br> alignments.addItem("CENTER"); <br> alignments.addItem("RIGHT"); </p> <p> add(new JLabel("Horizontal Alignment:"));<br> add(alignments);<br> add(Box.createHorizontalStrut(10));<br> add(new JLabel("Columns:"));<br> add(columns);</p> <p> columns.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> Integer c = <br> (Integer)columns.getSelectedItem();</p> <p> textField.setColumns(c.intValue());</p> <p> // the following call to revalidate()<br> // should not be necessary<br> revalidate();</p> <p> textField.setScrollOffset(0);<br> }<br> });<br> alignments.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> int index = alignments.getSelectedIndex();</p> <p> if(index == 0)<br> textField.setHorizontalAlignment(<br> JTextField.LEFT);<br> else if(index == 1)<br> textField.setHorizontalAlignment(<br> JTextField.CENTER);<br> else if(index == 2)<br> textField.setHorizontalAlignment(<br> JTextField.RIGHT);<br> }<br> });<br> }<br> }<br> }</p> <hr size="1" noshade> <p> <b>22.1.1 水平可视性和滚动偏移</b></p> <p> </p> <p align="center"><b>例22-2 单行文本域的滚动偏移</b></p> <hr size="1" noshade> import java.awt.*;<br> import java.awt.event.*;<br> import javax.swing.*;<br> import javax.swing.event.*; <p>public class Test extends JApplet {<br> private JTextField textField = new JTextField(<br> "12345678901234567890123456789012345678901234567890", 10);</p> <p> public void init() {<br> Container contentPane = getContentPane();<br> JPanel textFieldPanel = new JPanel();</p> <p> textFieldPanel.add(textField);</p> <p> contentPane.add(new ControlPanel(), BorderLayout.NORTH);<br> contentPane.add(textFieldPanel, BorderLayout.CENTER);<br> }<br> class ControlPanel extends JPanel {<br> private JLabel display = new JLabel(" ");<br> private JSlider slider = new JSlider(<br> textField.getHorizontalVisibility());<br> private JComboBox columns = new JComboBox();</p> <p> public ControlPanel() {<br> columns.addItem(new Integer(0));<br> columns.addItem(new Integer(5));<br> columns.addItem(new Integer(10));<br> columns.addItem(new Integer(15));</p> <p> columns.setSelectedIndex(2);</p> <p> add(new JLabel("Scroll Offset:"));<br> add(slider);<br> add(display);<br> add(Box.createHorizontalStrut(10));<br> add(new JLabel("Columns:"));<br> add(columns);</p> <p> slider.addChangeListener(new ChangeListener() {<br> public void stateChanged(ChangeEvent e) {<br> textField.setScrollOffset(slider.getValue());</p> <p> Integer i = <br> new Integer(textField.getScrollOffset());<br> BoundedRangeModel m =<br> textField.getHorizontalVisibility();<br> <br> display.setText(i.toString());</p> <p> showStatus("Visibility - min: " + <br> m.getMinimum() + <br> ", max: " + m.getMaximum() +<br> ", extent: " + m.getExtent() + <br> ", value: " + m.getValue() +<br> ", isAdj: " + <br> m.getValueIsAdjusting());<br> }<br> });<br> columns.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> Integer c = <br> (Integer)columns.getSelectedItem();</p> <p> textField.setColumns(c.intValue());</p> <p> // the following call to revalidate()<br> // should not be necessary<br> revalidate();</p> <p> textField.setScrollOffset(0);<br> }<br> });<br> }<br> }<br> }</p> <hr size="1" noshade> <p> 22.1.2 布局单行文本域</p> <p> </p> <p align="center"><b>例22-3 用GridBagLayout来布局单行文本域</b></p> <hr size="1" noshade> import java.applet.Applet;<br> import java.awt.*;<br> import javax.swing.*; <p>public class PurchaseApplet extends JApplet {<br> public void init() {<br> getContentPane().add(new ButtonPurchaseForm(),<br> BorderLayout.CENTER);<br> }<br> }<br> class ButtonPurchaseForm extends JPanel {<br> JSeparator sep = new JSeparator();<br> JLabel title = new JLabel("Order Form");<br> JLabel name = new JLabel("Name:");<br> JLabel address = new JLabel("Address:");<br> JLabel payment = new JLabel("Purchase Method:");<br> JLabel phone = new JLabel("Phone:");<br> JLabel city = new JLabel("City:");<br> JLabel state = new JLabel("State:");</p> <p> JTextField nameField = new JTextField(25);<br> JTextField addressField = new JTextField(25);<br> JTextField cityField = new JTextField(15);<br> JTextField stateField = new JTextField(2);</p> <p> JComboBox paymentChoice = new JComboBox();</p> <p> JButton paymentButton = new JButton("Purchase");<br> JButton cancelButton = new JButton("Cancel");</p> <p> public ButtonPurchaseForm() {<br> GridBagLayout gbl = new GridBagLayout();<br> GridBagConstraints gbc = new GridBagConstraints();</p> <p><br> setLayout(gbl);</p> <p> paymentChoice.addItem("Visa");<br> paymentChoice.addItem("MasterCard");<br> paymentChoice.addItem("COD");</p> <p> title.setFont(new Font("Times-Roman", <br> Font.BOLD + Font.ITALIC,<br> 16));</p> <p> gbc.anchor = GridBagConstraints.NORTHWEST;<br> gbc.gridwidth = GridBagConstraints.REMAINDER;<br> add(title, gbc);</p> <p> gbc.anchor = GridBagConstraints.NORTH;<br> gbc.fill = GridBagConstraints.HORIZONTAL;<br> gbc.insets = new Insets(0,0,10,0);<br> add(sep, gbc);</p> <p> gbc.anchor = GridBagConstraints.WEST;<br> gbc.gridwidth = 1;<br> gbc.insets = new Insets(0,0,0,0);<br> add(name, gbc);</p> <p> add(Box.createHorizontalStrut(10));<br> gbc.gridwidth = GridBagConstraints.REMAINDER;<br> add(nameField, gbc);</p> <p> gbc.gridwidth = 1;<br> add(address, gbc);</p> <p> add(Box.createHorizontalStrut(10));<br> gbc.gridwidth = GridBagConstraints.REMAINDER;<br> add(addressField, gbc);</p> <p> gbc.gridwidth = 1;<br> add(city, gbc);</p> <p> add(Box.createHorizontalStrut(10));<br> add(cityField, gbc);<br> add(Box.createHorizontalStrut(10));<br> add(state, gbc);<br> add(Box.createHorizontalStrut(5));</p> <p> gbc.gridwidth = GridBagConstraints.REMAINDER;<br> gbc.fill = GridBagConstraints.NONE;<br> add(stateField, gbc);</p> <p> gbc.gridwidth = 1;<br> add(payment, gbc);</p> <p> gbc.insets = new Insets(5,0,5,0);</p> <p> add(Box.createHorizontalStrut(10));<br> gbc.gridwidth = GridBagConstraints.REMAINDER;<br> gbc.fill = GridBagConstraints.NONE;<br> add(paymentChoice, gbc);</p> <p> ButtonPanel buttonPanel = new ButtonPanel();</p> <p> buttonPanel.add(paymentButton);<br> buttonPanel.add(cancelButton);</p> <p> gbc.anchor = GridBagConstraints.SOUTH;<br> gbc.insets = new Insets(15,0,0,0);<br> gbc.fill = GridBagConstraints.HORIZONTAL;<br> gbc.gridwidth = 7;<br> add(buttonPanel, gbc);<br> }<br> class ButtonPanel extends JPanel {<br> JPanel buttonPanel = new JPanel();<br> JSeparator separator = new JSeparator();</p> <p> public ButtonPanel() {<br> buttonPanel.setLayout(<br> new FlowLayout(FlowLayout.CENTER));</p> <p> setLayout(new BorderLayout(0,5));<br> add(separator, "North");<br> add(buttonPanel, "Center");<br> }<br> public void add(JButton button) {<br> buttonPanel.add(button);<br> }<br> }<br> }</p> <hr size="1" noshade> <p>22.1.3 使单行文本域有效</p> <p> </p> <p align="center"><b>例22-4 实现一个定制文档</b></p> <hr size="1" noshade> import javax.swing.*;<br> import javax.swing.text.*;<br> import java.awt.*;<br> import java.awt.event.*; <p>public class Test extends JApplet {<br> JTextField tf = new JTextField(DateDocument.initString);</p> <p> public Test() {<br> Container contentPane = getContentPane();<br> JLabel label = new JLabel("Date:");<br> Font font = new Font("Dialog", Font.PLAIN, 24);</p> <p> tf.setFont(font);<br> label.setFont(font);</p> <p> tf.setDocument(new DateDocument(tf));</p> <p> contentPane.setLayout(new FlowLayout(FlowLayout.CENTER,<br> 10,10)); <br> contentPane.add(label);<br> contentPane.add(tf);<br> }<br> }<br> class DateDocument extends PlainDocument {<br> public static String initString = "XX/XX/XXXX"; // Y10K!<br> private static int sep1 = 2, sep2 = 5;<br> private JTextComponent textComponent;<br> private int newOffset;</p> <p> public DateDocument(JTextComponent tc) {<br> textComponent = tc;<br> try {<br> insertString(0, initString, null);<br> }<br> catch(Exception ex) { ex.printStackTrace(); }<br> }<br> public void insertString(int offset, String s, <br> AttributeSet attributeSet) <br> throws BadLocationException {<br> if(s.equals(initString)) {<br> super.insertString(offset, s, attributeSet);<br> }<br> else {<br> try {<br> Integer.parseInt(s);<br> }<br> catch(Exception ex) {<br> return; // only allow integer values<br> }</p> <p> newOffset = offset;</p> <p> if(atSeparator(offset)) {<br> newOffset++; <br> textComponent.setCaretPosition(newOffset);<br> }<br> super.remove(newOffset, 1);<br> super.insertString(newOffset, s, attributeSet);<br> }<br> }<br> public void remove(int offset, int length) <br> throws BadLocationException {<br> if(atSeparator(offset)) <br> textComponent.setCaretPosition(offset-1);<br> else<br> textComponent.setCaretPosition(offset);<br> }<br> private boolean atSeparator(int offset) {<br> return offset == sep1 || offset == sep2;<br> }<br> }</p> <hr size="1" noshade> <p> 22.1.4 JTextField组件总结</p> <p> </p> <p> 22.1.5 JTextField属性</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -