Java Tutorial/Swing/JTextArea
Содержание
- 1 Append some text to JTextArea
- 2 Copy selected text from one text area to another
- 3 Customizing a JTextArea Look and Feel
- 4 Delete the first 5 characters
- 5 Enumerate the content elements with a ElementIterator
- 6 Enumerating the Lines in a JTextArea Component
- 7 Hello in Japanese
- 8 Highlight of discontinous string
- 9 Insert some text after the 5th character
- 10 JTextArea: for multiple-line input.
- 11 Modifying Text in a JTextArea Component
- 12 Moving the Focus with the TAB Key in a JTextArea Component
- 13 Replace the first 3 characters with some text
- 14 Set font for I18N to JTextArea
- 15 Setting JTextArea Line Wrap and Wrap Style
- 16 Setting text drag in a JTextArea
- 17 Setting the Tab Size of a JTextArea Component
- 18 Using Actions with Text Components: JTextArea
- 19 Using JTextArea
Append some text to JTextArea
<source lang="java">
import javax.swing.JTextArea; public class Main {
public static void main(String[] argv) { JTextArea ta = new JTextArea("Initial Text"); ta.append("some text"); }
}</source>
Copy selected text from one text area to another
<source lang="java">
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; public class Main extends JFrame {
private JTextArea t1 = new JTextArea("this is a test", 10, 15), t2; private JButton copy = new JButton("Copy >>>"); public Main() { Box b = Box.createHorizontalBox(); b.add(new JScrollPane(t1)); copy.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { t2.setText(t1.getSelectedText()); } }); b.add(copy); t2 = new JTextArea(10, 15); t2.setEditable(false); b.add(new JScrollPane(t2)); add(b); setSize(425, 200); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String args[]) { new Main(); }
}</source>
Customizing a JTextArea Look and Feel
Property StringObject TypeTextArea.actionMapActionMapTextArea.backgroundColorTextArea.borderBorderTextArea.caretAspectRatioNumberTextArea.caretBlinkRateIntegerTextArea.caretForegroundColorTextArea.focusInputMapInputMapTextArea.fontFontTextArea.foregroundColorTextArea.inactiveForegroundColorTextArea.keyBindingsKeyBinding[ ]TextArea.marginInsetsTextArea.selectionBackgroundColorTextArea.selectionForegroundColorTextAreaUIString
Delete the first 5 characters
<source lang="java">
import javax.swing.JTextArea; public class Main {
public static void main(String[] argv) { JTextArea ta = new JTextArea("Initial Text"); int start = 0; int end = 5; ta.replaceRange(null, start, end); }
}</source>
Enumerate the content elements with a ElementIterator
<source lang="java">
import javax.swing.JTextArea; import javax.swing.text.Document; import javax.swing.text.Element; import javax.swing.text.ElementIterator; public class Main {
public static void main(String[] argv) throws Exception { JTextArea textArea = new JTextArea("word1 word2\nword3\nword4"); Document doc = textArea.getDocument(); ElementIterator it = new ElementIterator(doc.getDefaultRootElement()); Element e; while ((e = it.next()) != null) { if (e.isLeaf()) { int rangeStart = e.getStartOffset(); int rangeEnd = e.getEndOffset(); String line = textArea.getText(rangeStart, rangeEnd - rangeStart); System.out.println(line); } } }
}</source>
Enumerating the Lines in a JTextArea Component
<source lang="java">
import javax.swing.JTextArea; import javax.swing.text.Element; public class Main {
public static void main(String[] argv) throws Exception { JTextArea textArea = new JTextArea("word1 word2\nword3\nword4"); Element paragraph = textArea.getDocument().getDefaultRootElement(); int contentCount = paragraph.getElementCount(); for (int i = 0; i < contentCount; i++) { Element e = paragraph.getElement(i); int rangeStart = e.getStartOffset(); int rangeEnd = e.getEndOffset(); String line = textArea.getText(rangeStart, rangeEnd - rangeStart); System.out.println(line); } }
}</source>
Hello in Japanese
<source lang="java">
import java.awt.Font; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; public class HelloInJapanese extends JPanel {
static JFrame frame; static String helloInJapanese = "\u4eca\u65e5\u306f."; public HelloInJapanese(String characters) { JTextArea area = new JTextArea(characters, 2, 30); area.setFont(new Font("Bitstream Cyberbit", Font.PLAIN, 20)); area.setLineWrap(true); JScrollPane scrollpane = new JScrollPane(area); add(scrollpane); } public static void main(String argv[]) { HelloInJapanese japanesePanel = new HelloInJapanese(helloInJapanese); frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add("Center", japanesePanel); frame.pack(); frame.setVisible(true); }
}</source>
Highlight of discontinous string
<source lang="java">
import javax.swing.JTextArea; import javax.swing.text.DefaultHighlighter; import javax.swing.text.Highlighter; public class Main {
public static void main(String args[]) { JTextArea area = new JTextArea(5, 20); area.setText("this is a test."); String charsToHighlight = "aeiouAEIOU"; Highlighter h = area.getHighlighter(); h.removeAllHighlights(); String text = area.getText().toUpperCase(); for (int i = 0; i < text.length(); i += 1) { char ch = text.charAt(i); if (charsToHighlight.indexOf(ch) >= 0) try { h.addHighlight(i, i + 1, DefaultHighlighter.DefaultPainter); } catch (Exception ble) { } } }
}</source>
Insert some text after the 5th character
<source lang="java">
import javax.swing.JTextArea; public class Main {
public static void main(String[] argv) { JTextArea ta = new JTextArea("Initial Text"); int pos = 5; ta.insert("some text", pos); }
}</source>
JTextArea: for multiple-line input.
Put JTextArea within a JScrollPane to allow a user to properly scroll through the contents of a JTextArea.
<source lang="java">
JTextArea textArea = new JTextArea(); JScrollPane scrollPane = new JScrollPane(textArea); content.add(scrollPane);</source>
Modifying Text in a JTextArea Component
<source lang="java">
import javax.swing.JTextArea; public class Main {
public static void main(String[] argv) { // Create the text area JTextArea ta = new JTextArea("Initial Text"); // Insert some text at the beginning int pos = 0; ta.insert("some text", pos); }
}</source>
Moving the Focus with the TAB Key in a JTextArea Component
<source lang="java">
import java.awt.ruponent; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JTextArea; public class Main {
public static void main(String[] argv) throws Exception { JTextArea component = new JTextArea(); NextFocusAction nextFocusAction = new NextFocusAction(); PrevFocusAction prevFocusAction = new PrevFocusAction(); component.getActionMap().put(nextFocusAction.getValue(Action.NAME), nextFocusAction); component.getActionMap().put(prevFocusAction.getValue(Action.NAME), prevFocusAction); }
} class NextFocusAction extends AbstractAction{
public NextFocusAction(){ super("Move Focus Forwards"); } public void actionPerformed(ActionEvent evt) { ((Component) evt.getSource()).transferFocus(); }
} class PrevFocusAction extends AbstractAction {
public PrevFocusAction(){ super("Move Focus Backwards"); } public void actionPerformed(ActionEvent evt) { ((Component) evt.getSource()).transferFocusBackward(); }
}</source>
Replace the first 3 characters with some text
<source lang="java">
import javax.swing.JTextArea; public class Main {
public static void main(String[] argv) { JTextArea ta = new JTextArea("Initial Text"); int start = 0; int end = 3; ta.replaceRange("new text", start, end); }
}</source>
Set font for I18N to JTextArea
<source lang="java">
import java.awt.Font; import java.awt.GraphicsEnvironment; import javax.swing.JFrame; import javax.swing.JTextArea; public class JTextAreaI18N extends JFrame {
String davidMessage = "\u05E9\u05DC\u05D5\u05DD \u05E2\u05D5\u05DC\u05DD"; public JTextAreaI18N() { GraphicsEnvironment.getLocalGraphicsEnvironment(); JTextArea textArea = new JTextArea(davidMessage); textArea.setFont(new Font("LucidaSans", Font.PLAIN, 40)); this.getContentPane().add(textArea); textArea.setVisible(true); } public static void main(String[] args) { JFrame frame = new JTextAreaI18N(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); }
}</source>
Setting JTextArea Line Wrap and Wrap Style
<source lang="java">
JTextArea textArea = new JTextArea("..."); textArea.setLineWrap(true); textArea.setWrapStyleWord(true); JScrollPane scrollPane = new JScrollPane(textArea);</source>
Setting text drag in a JTextArea
<source lang="java">
import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.JTextField; public class Main {
public static void main(String[] args) { JFrame frame = new JFrame(); JTextArea textarea = new JTextArea(); textarea.setDragEnabled(true); textarea.setText("Drag target"); frame.getContentPane().add(BorderLayout.CENTER, textarea); JTextField textarea1 = new JTextField(); textarea1.setText("Drop target"); frame.getContentPane().add(BorderLayout.SOUTH, textarea1); frame.setSize(500, 300); frame.setVisible(true); frame.setLocation(100, 100); }
}</source>
Setting the Tab Size of a JTextArea Component
<source lang="java">
import java.awt.Font; import javax.swing.JTextArea; public class Main {
public static void main(String[] argv) { JTextArea textarea = new JTextArea(); // Get the default tab size int tabSize = textarea.getTabSize(); // 8 // Change the tab size tabSize = 4; textarea.setTabSize(tabSize); Font font = textarea.getFont(); System.out.println(font); }
}</source>
Using Actions with Text Components: JTextArea
<source lang="java">
import java.util.Arrays; import java.util.ruparator; import javax.swing.Action; import javax.swing.JTextArea; import javax.swing.text.JTextComponent; public class ListActionsJTextArea {
public static void main(String args[]) { JTextComponent component = new JTextArea(); // Process action list Action actions[] = component.getActions(); // Define comparator to sort actions Comparator<Action> comparator = new Comparator<Action>() { public int compare(Action a1, Action a2) { String firstName = (String) a1.getValue(Action.NAME); String secondName = (String) a2.getValue(Action.NAME); return firstName.rupareTo(secondName); } }; Arrays.sort(actions, comparator); int count = actions.length; System.out.println("Count: " + count); for (int i = 0; i < count; i++) { System.out.printf("%28s : %s\n",actions[i].getValue(Action.NAME),actions[i].getClass().getName()); } }
}</source>
Count: 53 beep : javax.swing.text.DefaultEditorKit$BeepAction caret-backward : javax.swing.text.DefaultEditorKit$NextVisualPositionAction caret-begin : javax.swing.text.DefaultEditorKit$BeginAction caret-begin-line : javax.swing.text.DefaultEditorKit$BeginLineAction caret-begin-paragraph : javax.swing.text.DefaultEditorKit$BeginParagraphAction caret-begin-word : javax.swing.text.DefaultEditorKit$BeginWordAction caret-down : javax.swing.text.DefaultEditorKit$NextVisualPositionAction caret-end : javax.swing.text.DefaultEditorKit$EndAction caret-end-line : javax.swing.text.DefaultEditorKit$EndLineAction caret-end-paragraph : javax.swing.text.DefaultEditorKit$EndParagraphAction caret-end-word : javax.swing.text.DefaultEditorKit$EndWordAction caret-forward : javax.swing.text.DefaultEditorKit$NextVisualPositionAction caret-next-word : javax.swing.text.DefaultEditorKit$NextWordAction caret-previous-word : javax.swing.text.DefaultEditorKit$PreviousWordAction caret-up : javax.swing.text.DefaultEditorKit$NextVisualPositionAction copy-to-clipboard : javax.swing.text.DefaultEditorKit$CopyAction cut-to-clipboard : javax.swing.text.DefaultEditorKit$CutAction default-typed : javax.swing.text.DefaultEditorKit$DefaultKeyTypedAction delete-next : javax.swing.text.DefaultEditorKit$DeleteNextCharAction delete-previous : javax.swing.text.DefaultEditorKit$DeletePrevCharAction dump-model : javax.swing.text.DefaultEditorKit$DumpModelAction insert-break : javax.swing.text.DefaultEditorKit$InsertBreakAction insert-content : javax.swing.text.DefaultEditorKit$InsertContentAction insert-tab : javax.swing.text.DefaultEditorKit$InsertTabAction page-down : javax.swing.text.DefaultEditorKit$VerticalPageAction page-up : javax.swing.text.DefaultEditorKit$VerticalPageAction paste-from-clipboard : javax.swing.text.DefaultEditorKit$PasteAction select-all : javax.swing.text.DefaultEditorKit$SelectAllAction select-line : javax.swing.text.DefaultEditorKit$SelectLineAction select-paragraph : javax.swing.text.DefaultEditorKit$SelectParagraphAction select-word : javax.swing.text.DefaultEditorKit$SelectWordAction selection-backward : javax.swing.text.DefaultEditorKit$NextVisualPositionAction selection-begin : javax.swing.text.DefaultEditorKit$BeginAction selection-begin-line : javax.swing.text.DefaultEditorKit$BeginLineAction selection-begin-paragraph : javax.swing.text.DefaultEditorKit$BeginParagraphAction selection-begin-word : javax.swing.text.DefaultEditorKit$BeginWordAction selection-down : javax.swing.text.DefaultEditorKit$NextVisualPositionAction selection-end : javax.swing.text.DefaultEditorKit$EndAction selection-end-line : javax.swing.text.DefaultEditorKit$EndLineAction selection-end-paragraph : javax.swing.text.DefaultEditorKit$EndParagraphAction selection-end-word : javax.swing.text.DefaultEditorKit$EndWordAction selection-forward : javax.swing.text.DefaultEditorKit$NextVisualPositionAction selection-next-word : javax.swing.text.DefaultEditorKit$NextWordAction selection-page-down : javax.swing.text.DefaultEditorKit$VerticalPageAction selection-page-left : javax.swing.text.DefaultEditorKit$PageAction selection-page-right : javax.swing.text.DefaultEditorKit$PageAction selection-page-up : javax.swing.text.DefaultEditorKit$VerticalPageAction selection-previous-word : javax.swing.text.DefaultEditorKit$PreviousWordAction selection-up : javax.swing.text.DefaultEditorKit$NextVisualPositionAction set-read-only : javax.swing.text.DefaultEditorKit$ReadOnlyAction set-writable : javax.swing.text.DefaultEditorKit$WritableAction toggle-componentOrientation : javax.swing.text.DefaultEditorKit$ToggleComponentOrientationAction unselect : javax.swing.text.DefaultEditorKit$UnselectAction
Using JTextArea
<source lang="java">
import java.awt.Dimension; import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; public class JTextAreaTest {
public static void main(String[] args) { JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("JTextArea Test"); frame.setLayout(new FlowLayout()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); String text = "A JTextArea object represents a multiline area for displaying text. " + "You can change the number of lines that can be displayed at a time, " + "as well as the number of columns. You can wrap lines and words too. " + "You can also put your JTextArea in a JScrollPane to make it scrollable."; JTextArea textAreal = new JTextArea(text, 5, 10); textAreal.setPreferredSize(new Dimension(100, 100)); JTextArea textArea2 = new JTextArea(text, 5, 10); textArea2.setPreferredSize(new Dimension(100, 100)); JScrollPane scrollPane = new JScrollPane(textArea2, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); textAreal.setLineWrap(true); textArea2.setLineWrap(true); frame.add(textAreal); frame.add(scrollPane); frame.pack(); frame.setVisible(true); }
}</source>