JTextArea без полосы прокрутки

private JPanel contentPane;
public Driver() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 867, 502);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);
    final JTextArea textArea = new JTextArea();
    textArea.setEditable(false);
    textArea.setBounds(10, 11, 831, 393);
    JScrollPane scroll = new JScrollPane(textArea);
    scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    textArea.setText("dfgf");
    contentPane.add(scroll);
}

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Driver frame = new Driver();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

Почему это не показывает textArea с полосой прокрутки?

моя проблема в том, что я не вижу даже textArea. но если вместо этого я сделаю contentPane.add(scroll);, я увижу textArea, но не прокрутлю.


person Community    schedule 16.03.2013    source источник
comment
Чтобы получить помощь быстрее и быстрее, рассмотрите возможность публикации SSCCE.   -  person Reimeus    schedule 17.03.2013
comment
я разместил основную часть своего кода   -  person    schedule 17.03.2013


Ответы (3)


"почему не отображается textArea с полосой прокрутки?"

Поскольку область просмотра области прокрутки имеет собственный менеджер компоновки и меняет использование и положение в текстовой области в соответствии со своими потребностями.

Окно просмотра будет использовать свойство предпочтительного размера текстовой области, чтобы определить, как его расположить. Вы можете изменить это значение, добавив текст в текстовую область и/или задав свойства строки/столбца в соответствии с вашими потребностями.

Обновлено с примером

введите здесь описание изображения

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestScrollPane03 {

    public static void main(String[] args) {
        new TestScrollPane03();
    }

    public TestScrollPane03() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException ex) {
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                } catch (UnsupportedLookAndFeelException ex) {
                }

                JTextArea textArea = new JTextArea(100, 50);
                JScrollPane scrollPane = new JScrollPane(textArea);

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(scrollPane);
                frame.setSize(200, 200);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }    
}

Обновлено в связи с изменениями в вопросе

Как уже указывал camickr, проблема, с которой вы столкнулись, связана с тем, как вы размещаете свои компоненты.

Это contentPane.setLayout(null); всего лишь одна из многих ваших проблем. Прекратите использовать макеты null и начните использовать соответствующие менеджеры макетов.

person MadProgrammer    schedule 16.03.2013
comment
я не вижу текстовое поле, я не вижу текста, когда пишу в него - person ; 17.03.2013
comment
Это больше похоже на проблему с расположением панели прокрутки. Я предполагаю, что, поскольку вы начали использовать setBounds, вы пытаетесь сделать свой собственный макет вместо того, чтобы позволить API менеджера макета сделать это за ваш - person MadProgrammer; 17.03.2013
comment
Отлично работает для меня - person MadProgrammer; 17.03.2013
comment
я разместил свою основную часть кода, я до сих пор не знаю, как его изменить - person ; 17.03.2013
comment
Это contentPane.setLayout(null); ваша проблема прямо здесь. Прекратите использовать макеты null и начните использовать менеджеры макетов. - person MadProgrammer; 17.03.2013
comment
я удалил его и он работает. кстати, я им не пользовался. это было автоматически сгенерировано затмением. большое спасибо - person ; 17.03.2013
comment
Можете ли вы рассказать мне вкратце, почему это устранило проблему? благодарю вас - person ; 17.03.2013
comment
Как указал Реймеус, размер любого компонента по умолчанию равен 0x0. Менеджеры компоновки используют ряд входных данных для определения наилучшего размера/расположения компонентов. Менеджером компоновки по умолчанию для JPanel является FlowLayout. Вы можете изменить его на BorderLayout для своих нужд. - person MadProgrammer; 17.03.2013
comment
@MadProgrammer Как у вас получается такой красивый вырез рамки для этой картинки? - person syb0rg; 17.03.2013
comment
@syb0rg На Mac CMD + SHIFT + 4 вызовет цель, вы можете использовать это, чтобы нарисовать прямоугольник вокруг области, которую вы хотите захватить, нажмите ПРОБЕЛ и захватите все окно. - person MadProgrammer; 17.03.2013
comment
@MadProgrammer И вы просто смотрите на это и получаете эффект тени? Это выглядит так прекрасно. - person syb0rg; 17.03.2013
comment
@ syb0rg На самом деле я нажимаю пробел, который превращает курсор мыши в камеру, и щелкаю окно, которое я хочу захватить, и Mac OS делает это за меня. - person MadProgrammer; 18.03.2013

Полоса прокрутки появится автоматически, когда предпочтительный размер компонента, добавленного в область прокрутки, превысит размер области прокрутки. Вам нужно использовать менеджеры компоновки, чтобы это происходило автоматически.

final JTextArea textArea = new JTextArea();
textArea.setBounds(10, 11, 831, 393);
JScrollPane scroll = new JScrollPane(textArea);

Вы НЕ должны использовать setBounds(). Вместо этого вы делаете что-то вроде:

final JTextArea textArea = new JTextArea(5, 30);
JScrollPane scroll = new JScrollPane(textArea);

Теперь, когда вы загружаете более 5 строк текста, появляется полоса прокрутки. Конечно, все это предполагает, что вы используете соответствующий менеджер компоновки.

person camickr    schedule 16.03.2013
comment
Я даже не вижу самого текста. текстовое поле не видно. я не вижу никакого текста - person ; 17.03.2013
comment
Я уже предположил, что проблема в том, что вы не используете Layout Manager. Я предполагаю, что панель прокрутки имеет размер 0, поэтому она не окрашена. Исправьте свой код, чтобы использовать менеджеры макетов, а затем опубликуйте свой SSCCE, если у вас все еще есть проблема. - person camickr; 17.03.2013

почему это не показывает textArea с полосой прокрутки

На самом деле полоса прокрутки будет отображаться, но без «захвата большого пальца», пока вы не добавите достаточно текста в свой JTextArea to as, чтобы увеличить его размер за пределы размера области просмотра JScrollPane.

Вы используете макет null для contentPane JPanel. Это никогда не бывает хорошей идеей. Здесь ваш JScrollPane имеет размер по умолчанию 0 x 0, поэтому никогда не появляется. Существует множество менеджеров компоновки, доступных для различных требований к размеру и расположению. .

person Reimeus    schedule 16.03.2013
comment
проблема в том, что я не вижу самого текстового поля, как будто оно было перезаписано чем-то другим - person ; 17.03.2013
comment
Да, я тоже вмешаюсь, если вы не используете менеджер компоновки, используйте его. В противном случае вы столкнетесь с такими проблемами. - person Reimeus; 17.03.2013