Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Полоса прокрутки для JTextArea


Автор: vav84 16.8.2011, 17:57
Добрый день!

Прошу извинить меня если вопрос покажется излишне простым ибо учу Java я только третью неделю и сейчас пишу свое первое тренировочное оконное приложение.
Суть вопроса такова:  после добавления полосы прокрутки JScroolPane в текстовую область JTextArea при ее полном заполнении бегунок прокрутки сбоку не отображается а всесто этого область начинает растягиватся вниз. Код вот такой:

Код

class ScrollTestPanel extends JPanel{
    public ScrollTestPanel(){
        textArea1=new JTextArea(5,5);
        textArea2=new JTextArea(5,5);
        textArea1.setLineWrap(true);
        textArea2.setLineWrap(true);
        scrollPane=new JScrollPane(textArea1);
        add(textArea1);
        add(scrollPane);
        add(textArea2);

        
    }
    private JTextArea textArea1;
    private JTextArea textArea2;
    private JScrollPane scrollPane;
}


В этом случае полоса прокрутки отображается как одиночный пиксель между двумя областями ввода, если добавить после textArea2 то он отобразится от нее справа, то есть получается добавляеться она на панель как отдельный элемент к textArea1 никакого отношения не имеющий((( За день перепробовал все доступные мне варианты- безуспешно, так что теперь остается лишь уповать на вселенский разум  smile 

Автор: AlexeyVorotnikov 17.8.2011, 10:02
Надо
Код

scrollPane.setViewportView(textArea);

и не надо делать
Код

add(textArea);

Автор: vav84 17.8.2011, 10:52
Спасибо за ответ но что -то он мне не помогает. Вот полный код программы после модификации:


Код

package jscrolltest;
import javax.swing.*;


public class JScrollTest {

    public static void main(String[] args) {
        // TODO code application logic here
        ScrollTestFrame frame=new ScrollTestFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

class ScrollTestFrame extends JFrame{
        public ScrollTestFrame(){
        setTitle("ScrollTest");
        panel=new ScrollTestPanel();
        add(panel);
        pack();
        
        }
        private JPanel panel;
}

class ScrollTestPanel extends JPanel{
    public ScrollTestPanel(){
        textArea1=new JTextArea(5,5);
        textArea2=new JTextArea(5,5);
        textArea1.setLineWrap(true);
        textArea2.setLineWrap(true);
        scrollPane=new JScrollPane(textArea1);
        scrollPane.setViewportView(textArea1);
       // add(textArea1);
       // add(scrollPane);
       // add(textArea2);
        
    }
    private JTextArea textArea1;
    private JTextArea textArea2;
    private JScrollPane scrollPane;
}

В таком виде отображается пустая панель, если раскомментировать три поля add то панель принимает вид описаный выше, то есть добавление рекомендованой строки ни к чему ни приводит. Может у кого-то еще есть идеи  smile 

Автор: pathfinder 17.8.2011, 19:46
Код

class ScrollTestPanel extends JPanel{
    public ScrollTestPanel(){
        textArea1=new JTextArea(5,5);
//        textArea2=new JTextArea(5,5);
        textArea1.setLineWrap(true);
//        textArea2.setLineWrap(true);
        scrollPane=new JScrollPane(textArea1);
//        scrollPane.setViewportView(textArea1);
       // add(textArea1);
       add(scrollPane);
       // add(textArea2);
        
    }
    private JTextArea textArea1;
    private JTextArea textArea2;
    private JScrollPane scrollPane;
}

Автор: Skipy 18.8.2011, 10:53
Цитата(vav84 @ 17.8.2011,  10:52)
если раскомментировать три поля add 

Два add. 

JScrollPane является контейнером для JTextArea. Так что добавлять надо только экземпляр JScrollPane. setViewportView вызывать не надо - при передаче компоненты через конструктор это делается автоматом.

Автор: vav84 20.8.2011, 14:54
Большое спасибо pathfinder за помощь на практике, и Skipy за теорию.   smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)