@olololosh

Пролистование страниц с JTextAre?

Мне подсказали, что в классе JTextArea есть метод, или конструктор, который позволяет организовать "пролистование страниц". Смысл такой. В текстовую зону, понятное дело, весь текст не влезает. Мне сказали, что можно так сделать, что бы в текстовую зону выводилось определенное количество символов. Ну это понятно, для этого просто есть конструктор JTextArea(int, int), а вот что бы вывести новую порцию этих символов я не знаю что делать. Хочу, что бы когда пользователь когда дочитает текст, мог нажать кнопку, и на экран получил новую порцию текста, еще раз нажал кнопку - новый текст, и так далее. Вот тут я не могу ничего придумать. Пересмотрел все методы и конструкторы класса, но ничего такого не нашел. Может плохо искал... Но мне человек сказал, что такое должно быть. Может мне что-то подскажите?
  • Вопрос задан
  • 262 просмотра
Пригласить эксперта
Ответы на вопрос 3
@jkotkot
режим сарказма
Ну в JScrollPane его вложите и по нажатие кнопки меняйте текущую позицию скролинга на какую-то величину.
Ответ написан
Комментировать
timych
@timych
olololosh Не вижу проблемы. Разбиваешь текст на фрагменты нужной длины. Складываешь в массив. По нажатию кнопки "вперед/назад" берешь из массива по текущему индексу нужный кусок текста и подменяешь его текстовом поле. Индекс изменяешь по каждому нажатию (в пределах размера массива конечно же).
Ответ написан
@zelan
Кратко обо мне не получится.
Для свинга

public static void main(String[] args) {
		
		JFrame frame = new JFrame();
		frame.setPreferredSize(new Dimension(300, 300));
		frame.setSize(300, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		
		JTextArea textArea  = new JTextArea();
		
		/*
		 * установи какой-нибудь текст или вбей прямо в окне
		 */
//		textArea.setText();
		
		/*
		 * использование следующих 2 методов
		 * отключает горизонтальный скроллинг компонента
		 * тем самым пролистываение возможно только вертикально
		 */
		textArea.setLineWrap(true); 			//перенос только по символам символам
		textArea.setWrapStyleWord(true);		//перенос по словам и символам (если слово не влезает по ширине окна)
		JScrollPane scrollPane_TextArea = new JScrollPane(textArea);
		
		/**
		 * просто тестовый размер
		 */
		scrollPane_TextArea.setPreferredSize(new Dimension(200, 200));
		
		/*
		 * если вертикальный скрол не нужен то раскоментируй
		 */
//		scrollPane_TextArea.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); 
		
		JButton button_PrevPage = new JButton("PrevPage");
		JButton button_NextPage = new JButton("NextPage");
		
		
		button_PrevPage.setActionCommand("prev");
		button_NextPage.setActionCommand("next");
		

		class ChangePageListeners implements ActionListener{
			
			JScrollPane scrollPane;
			public ChangePageListeners(JScrollPane scrollPane) {
				this.scrollPane = scrollPane;
			}

			@Override
			public void actionPerformed(ActionEvent e) {
				String command = e.getActionCommand();
				
				switch (command) {
				case "prev":
					changePage(false);
					break;
				case "next":
					changePage(true);
					break;
				default:
					break;
				}
				
			}
			
			private void changePage(boolean next){
				if(next == true){
					int heigthPage = scrollPane.getHeight();
					int currentPosition =  scrollPane.getVerticalScrollBar().getValue();				
					scrollPane.getVerticalScrollBar().setValue(currentPosition + heigthPage);
				}
				
				else{
					int heigthPage = scrollPane.getHeight();
					int currentPosition =  scrollPane.getVerticalScrollBar().getValue();				
					scrollPane.getVerticalScrollBar().setValue(currentPosition - heigthPage);
				}
			}
			
		}
		
		ChangePageListeners changePageListeners = new ChangePageListeners(scrollPane_TextArea);
		
		/*
		 * устанавливаем на кнопки слушатели
		 */
		button_NextPage.addActionListener(changePageListeners);
		button_PrevPage.addActionListener(changePageListeners);
		
		
		JPanel panel = new JPanel();
		panel.add(scrollPane_TextArea);
		panel.add(button_NextPage);
		panel.add(button_PrevPage);
		
		frame.add(panel);
		
		frame.setVisible(true);
	}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы