Создание прокручиваемого JTextArea или JEditorPane в JFrame

Я провел некоторое исследование Swing, чтобы создать редактор css с Java. Я застрял, пытаясь экспортировать CSS и HTML в JTextArea (позже я создам документ .css.) Вот GridLayout, который мой основной макет вызывает после нажатия пункта меню «Создать».

package csseditor_gui_built;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JScrollBar;
import javax.swing.text.DefaultCaret;
import java.awt.Font;
import java.awt.Color;


public class ExportGridLayout extends JFrame {
    public ExportGridLayout(String HTML, String CSS){


        GridLayout layout = new GridLayout(1,2,2,2);
        setLayout(layout);

        JTextArea textAreaHtml = new JTextArea();
        JTextArea textAreaCss = new JTextArea();

        //Creating a new font.
        Font fontumuz = new Font("Courier New", Font.PLAIN, 12);

        // Setting constructor strings
        textAreaHtml.setText(HTML);
        textAreaCss.setText(CSS);

        //Additional details..
        textAreaHtml.setEditable(false);
        textAreaCss.setEditable(false);

        //Appending font to the textArea's
        textAreaHtml.setFont(fontumuz);
        textAreaCss.setFont(fontumuz);

        // Adding the objects to JFrame
        add(textAreaHtml);
        add(textAreaCss);

    }
}

Это довольно прямолинейно. Просто помогите мне добавить полосы прокрутки или панели к этим textArea. Любые другие предложения на сайте не работают.


person mozcelikors    schedule 24.06.2012    source источник
comment
Для работы, связанной с HTML, рассмотрите возможность использования JTextPane/JEditorPane, JTextArea для таких вещей не предназначен, ИМХО.   -  person nIcE cOw    schedule 24.06.2012
comment
Это то же самое, я буду использовать, но просто не могу сделать их прокручиваемыми   -  person mozcelikors    schedule 24.06.2012


Ответы (1)


Вот так...

JTextArea text = new JTextArea();

JScrollPane scroll = new JScrollPane(text);

Отредактированная часть

add(scroll);

Вот один рабочий код для вашей помощи:

import java.awt.*;
import javax.swing.*;

public class JTextAreaExample
{
    private void createAndDisplayGUI()
    {
        JFrame frame = new JFrame("JTextArea Scrollable");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = new JPanel();
        contentPane.setLayout(new GridLayout(1, 2, 2, 2));

        JTextArea tArea1 = new JTextArea();
        tArea1.setLineWrap(true);
        JTextArea tArea2 = new JTextArea();
        tArea2.setLineWrap(true);
        tArea1.setText("I got a long long line of text in my JTextArea");
        tArea2.setText("I got a long long line of text in my JTextArea");

        JScrollPane scroller1 = new JScrollPane();
        JScrollPane scroller2 = new JScrollPane();
        scroller1.setViewportView(tArea1);
        scroller2.setViewportView(tArea2);

        contentPane.add(scroller1);
        contentPane.add(scroller2);

        frame.setContentPane(contentPane);
        frame.setSize(100, 100);
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new JTextAreaExample().createAndDisplayGUI();
            }
        });
    }
}
person Kumar Vivek Mitra    schedule 24.06.2012
comment
Боюсь, это не работает. Просто попробуйте на компиляторе. Это потому, что я использую GridLayout или нет, я не знаю - person mozcelikors; 24.06.2012
comment
Он отлично работает для JTextArea ... И да, я надеюсь, что у вас достаточно записей, чтобы сделать JTextArea полным, чтобы появилась полоса прокрутки, а также установите размер кадра. - person Kumar Vivek Mitra; 24.06.2012
comment
Это действительно не работает. У меня слишком много записей. Предполагается, что текстовые области выводят код всей веб-страницы. Ну, они делают. Но без полосы прокрутки. - person mozcelikors; 24.06.2012
comment
Хорошо, попробуйте это... Теперь посмотрите код, добавьте панель прокрутки, а не textArea - person Kumar Vivek Mitra; 24.06.2012
comment
Нет, все еще нет. Я думаю, это не так просто, я просмотрел много форумов, они использовали много способов добиться этого. Это просто с NetBeans, но я стараюсь не использовать его. Кстати, добавить (прокрутить); добавляет что-то (например, панель) в макет сетки, но не прокручивается до jtextarea. Пожалуйста, скомпилируйте код в вашей IDE и посмотрите, что не так. - person mozcelikors; 24.06.2012
comment
Слушайте.... создайте новый проект и попробуйте создать JTextArea и JScrollPane и добавить его в фрейм... увидите, что это сработает... как только это произойдет, попробуйте добавить другой макет, кроме сетки, и посмотрите.. , если это тоже работает, добавьте сетку и попробуйте. - person Kumar Vivek Mitra; 24.06.2012
comment
Не могли бы вы опубликовать код, который работал с вами, чтобы я мог над ним поработать? - person mozcelikors; 24.06.2012
comment
+1 у меня работает. См. также HTMLDocumentEditor, упомянутый здесь. - person trashgod; 24.06.2012
comment
+1 работает как шарм для меня, не беспокойтесь о результате :-) Простите меня за мое редактирование, если вы чувствуете, что что-то не так, не стесняйтесь изменить его по своему усмотрению или представить новый, если он кажется вам подходящим . - person nIcE cOw; 24.06.2012
comment
Сработало отлично, большое спасибо. Я думаю, проблема была с окнами просмотра и setContentPane. - person mozcelikors; 24.06.2012
comment
@user1478315 user1478315: Настоящая проблема может не состояться ни в Viewport, ни в setContentPane(), но, поскольку вы не указали никакого значения для своего Rows and Columns при запуске JTextArea, это также может вызвать такое поведение. Попробуйте написать что-то вроде этого JTextArea tArea1 = new JTextArea(2, 10);, это легко принесет ScrollPane, даже если вы используете frameObject.pack() вместо предоставления произвольных значений :-) - person nIcE cOw; 24.06.2012
comment
Я пытался, и я думаю, что проблема не в том, чтобы использовать JPanel, добавление компонентов в JPanel - это реальное решение для моей версии кода или кода решения. - person mozcelikors; 24.06.2012
comment
Я собирался предложить использовать JPanel, но перед этим вы все правильно поняли.... Поздравляю.... - person Kumar Vivek Mitra; 24.06.2012