Title: Using Text Components
1Using Text Components
JTextComponent
JTextArea
Plain Text Areas
JTextTextField
JEditorPane
JTextPane
JPasswordField
Text Controls
Styled Text Areas
2Text Field Example
- Display a labeled text field with the following
behavior - User enters text followed by the Enter key
- If the entered text is not ''quit'', the text is
highlighted (selected) and then nothing is done - Subsequent typing in the field will cause the
highlighted text to be erased - If the entered text is ''quit'', the program exits
3Display
After the user enters some text and hits Enter
4Text Field Code
... JLabel label new
JLabel("Enter a command") JTextField
textField new JTextField(20)
textField.setPreferredSize(new Dimension(50,20))
textField.addActionListener(new
ActionListener() public void
actionPerformed(ActionEvent e)
String command textField.getText()
if (command.equals("quit"))
frame.dispose() // frame is
top-level System.exit(0)
// JFrame
else
textField.selectAll()
) JPanel panel
new JPanel() panel.setLayout(new
BoxLayout(panel, BoxLayout.Y_AXIS))
panel.add(label) panel.add(textField)
frame.getContentPane().add(panel)
frame.setVisible(true) ...
5Notes On The Code
- The argument to the JTextField constructor is a
preferred size for the visible area the length
of the string entered is not limited - As with buttons, text fields are action-based
- The action listener is created using a
constructor for an anonymous class that extends
the action listener interface - The getText method returns the entered string
- The selectAll method highlights the string
- The label and text field are put into a JPanel
first otherwise the text field would fill the
frame
6Plain Text Areas
- JTextArea can display and edit multiple lines of
text - Text can be displayed in any font, but all of the
text is in the same font - Use a text area to allow the user to enter
unformatted text of any length - Also can be used to display unformatted help
information
7JTextArea Example
... JTextArea textArea new
JTextArea( "This is an editable
JTextArea " "that has been
initialized with the setText method. "
"A text area is a \"plain\" text component, "
"which means that although it can
display text " "in any font, all of
the text is in the same font." )
textArea.setFont(new Font("Serif", Font.ITALIC,
16)) textArea.setLineWrap(true)
textArea.setWrapStyleWord(true) JPanel
panel new JPanel() panel.setLayout(new
BoxLayout(panel, BoxLayout.Y_AXIS))
panel.add(textArea) frame.getContentPane(
).add(panel) // frame is the top-level
frame.setVisible(true) // JFrame
...
8Example Display
Note that a default text area width was used, and
that the text does not fit in the frame. It
needs to have its text displayed within a scroll
pane.
9JTextArea Example Modified
textArea new JTextArea(
"This is an editable JTextArea "
"that has been initialized with the setText
method. " "A text area is a
\"plain\" text component, " "which
means that although it can display text "
"in any font, all of the text is in the
same font." ) textArea.setFont(ne
w Font("Serif", Font.ITALIC, 16))
textArea.setLineWrap(true)
textArea.setWrapStyleWord(true)
JScrollPane areaScrollPane new
JScrollPane(textArea) areaScrollPane.setV
erticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS)
areaScrollPane.setPreferredSize(new
Dimension(200, 150)) panel new
JPanel() panel.setLayout(new
BoxLayout(panel, BoxLayout.Y_AXIS))
panel.add(areaScrollPane)
frame.getContentPane().add(panel)
frame.setVisible(true)
10New Display
11Styled Text Areas
- JEditorPane and JTextPane objects can display
text in multiple fonts - Some allow embedded images and even embedded
components - Require more up-front programming to set up and
use - Exception JEditorPane can be easily used to
display formatted text from a URL
12The JEditorPane Class
- JEditorPane is the foundation for Swing's styled
text components - A JEditorPane object becomes an editor for the
type of content it is given - text/plain plain text
- text/html Hypertext Markup Language
- text/rtf Rich Text Format
- Uses an instance of the EditorKit class to
accomplish editing tasks - Can be used to display uneditable URLs
13Loading Content into a JEditorPane
- setText initializes the component from a String
- read initializes the component from a Reader
- setPage initializes the component from a URL
- Besides using these methods, similar loading can
be accomplished using constructors
14JEditorPane Example
JFrame frame ... // make top-level window
editorPane new JEditorPane(
"text/plain", "Here is a string of text\n"
"initialized in the constructor.\n"
"Note that we gave the type\n"
"\"text/plain\" as the first argument.")
JScrollPane editorScrollPane new
JScrollPane(editorPane) editorScrollPane.setVe
rticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS)
editorScrollPane.setPreferredSize(new
Dimension(300, 300)) JPanel panel ... //
make panel to hold editorPane and
// add panel to frame
15Example Display
16Loading From URLs
- Consider the following HTML file, called
Test.html
lthtmlgt ltheadgt lttitlegtA Test HTML
Pagelt/titlegt lt/headgt ltbodygt lth1gtA Test HTML
Pagelt/h1gt ltcentergt lttable bordergt lttrgtltthgt
Fruits ltthgt Vegetables ltthgt Drinks
lt/trgt lttrgtlttdgt Apples lttdgt Broccoli lttdgt
Milk lt/trgt lttrgtlttdgt Bananas lttdgt Spinach
lttdgt Juice lt/trgt lttrgtlttdgt Oranges lttdgt Carrots
lttdgt Soda lt/trgt lttrgtlttdgt Grapes lttdgt Squash
lttdgt lt/trgt lttrgtlttdgt Lemons lttdgt
lttdgt lt/trgt lt/tablegt lt/centergt lt/bodygt lt/htmlgt
17Loading From URLs (cont'd)
- A file URL is of the form
- fileltdirectorygtltseparatorgtltfilenamegt
- There is a URL class constructor that takes a
string representing a file URL specification as
an argument - We could code the specification directly
- new URL(''file/home/cs/tcolburn.../Test.html'')
- Or we can use the System class to build the
specification
18System Class Properties
- Java maintains a list of system properties and
their values, implemented as a hash table. Some
of them
Property Value os.name
Operating system name os.arch
Operating system architecture os.version
Operating system version file.separator ''/'' on
Unix path.separator '''' on Unix line.separator
''\n'' on Unix user.name User's account
name user.home User's home
directory user.dir User's current working
directory
Use Sytem.getProperty(''ltpropertygt'') to
retrieve a value
19Example That Loads A File URL
import java.io. import java.net. ...
editorPane new JEditorPane()
editorPane.setEditable(false) try
url new URL("file"
System.getProperty("user.dir")
System.getProperty("file.separato
r") "Test.html")
editorPane.setPage(url)
catch (IOException e)
System.err.println("Attempted to read a bad URL
" url) catch (Exception e)
System.err.println("Couldn't create
URL " url) JScrollPane
editorScrollPane new JScrollPane(editorPane)
... panel new JPanel()
... panel.add(editorScrollPane)
frame.getContentPane().add(panel)
frame.setVisible(true) ...
20Notes On The Example
- The URL class is in the java.net package
- setEditable(false) is used to keep the HTML
document from being edited - new URL(...) can throw an exception if the file
URL specification is malformed - setPage(url) can throw an exception if the URL
argument cannot be read for some reason
21Example Output
22Example That Loads A Network URL
import java.io. import java.net. ...
editorPane new JEditorPane()
editorPane.setEditable(false) try
url new URL("http//www.d.umn.edu/tcolbu
rn/hours.html") editorPane.setPage(ur
l) catch (IOException e)
System.err.println("Attempted to read a
bad URL " url) catch
(Exception e) System.err.println("Co
uldn't create URL " url)
JScrollPane editorScrollPane new
JScrollPane(editorPane) ...
panel new JPanel() ...
panel.add(editorScrollPane)
frame.getContentPane().add(panel)
frame.setVisible(true) ...
23Example Output