Текстовые области Java
Java для начинающих 4 мая, 2014Иногда при работе программы возникает необходимость ввести несколько строк. Для этого применяется компонент JTextArea. Поместив данный компонент в свою программу, разработчик предоставляет пользователю возможность вводить любое количество текста, разделяя строки нажатием клавиши <Enter>.
Каждая строка заканчивается символом ‘\n‘, как это предусмотрено в языке Java. Пример работы текстовой области показан на рис.1.
В конструкторе компонента JTextArea указывается количество строк и их длина. Например:
1 |
textArea = new JTextArea(8, 40); // 8 строк по 40 символов в каждой. |
Параметр, задающий количество символов в строке, действует так же, как и для поля редактирования, его значение рекомендуется немного завысить. Пользователь не органичен количеством строк и их длинной. Если длина строки или чисто строк выйдет за пределы заданных параметров, текст будет прокручиваться в окне.
Для изменения длины строк можно применять метод setColumns(), а для изменения их количества — метод setRows(). Эти параметры задают лишь рекомендуемые размеры — диспетчер компоновки может самостоятельно увеличивать или уменьшать размеры поля редактирования.
Рис.1. Текстовая область
Если пользователь ввел больше текста, чем умещается в текстовой области, про произойдет отсечение. Этого можно избежать, установив автоматический перенос строки(line-wrapping).
1 |
textArea.setLineWrap(true); // В длинных строках выполняется перенос. |
Автоматический перенос проявляется лишь визуально. Текст хранящийся в документе, изменен не будет — в него не вставляются символы ‘\n’.
В пакете Swing текстовая область не имеет полос прокрутки. Если они необходимы, текстовую область следует включить в панель прокрутки(scroll pane):
1 2 |
textArea = new JTextArea(8, 40); JScrollPane scrollPane = new JScrollPane(textArea); |
Теперь панель прокрутки управляет представлением текстовой области. Полоса прокрутки автоматически появляется, когда текст выходит из рамки отведенной для него области, и исчезает, когда «лишняя» часть текста удаляется. Прокрутка поддерживается панелью прокрутки — сама программа не обязана обрабатывать события, связанные с ней.
Это универсальный механизм, который работает с любым компонентом, а не только с текстовыми областями. Чтобы добавить линейки прокрутки к компоненту, поместите его в панель прокрутки.
Программа которая приведена ниже демонстрирует различные текстовые компоненты. Эта программа отображает текстовое поле, поле пароля и текстовую область с линейками прокрутки. Текстовое поле и поле пароля снабжены метками. Чтобы вставить предложение в конец текста, щелкните на кнопке Insert(Вставить).
Вот собственно код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TextComponentTest { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { TextComponentFrame frame = new TextComponentFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); } } class TextComponentFrame extends JFrame { public TextComponentFrame() { setTitle("TextComponentTest"); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); final JTextField textField = new JTextField(); final JPasswordField passwordField = new JPasswordField(); JPanel northPanel = new JPanel(); northPanel.setLayout(new GridLayout(2,2)); northPanel.add(new JLabel("User name: ", SwingConstants.RIGHT)); northPanel.add(textField); northPanel.add(new JLabel("Password: ", SwingConstants.RIGHT)); northPanel.add(passwordField); add(northPanel, BorderLayout.NORTH); final JTextArea textArea = new JTextArea(8, 40); JScrollPane scrollPane = new JScrollPane(textArea); add(scrollPane, BorderLayout.CENTER); JPanel southPanel = new JPanel(); JButton insertButton = new JButton("Insert"); southPanel.add(insertButton); insertButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { textArea.append("User name: " + textField.getText() + " Password: " + new String(passwordField.getPassword()) + "\n"); } }); add(southPanel, BorderLayout.SOUTH); } public static final int DEFAULT_WIDTH = 300; public static final int DEFAULT_HEIGHT = 300; } |
Recent Comments