Переписать отсортированный массив в JTextPane в Java

Я работал над этим проектом около недели. Он использует компаратор для сортировки строк фильмов по названию, дате или компании. Проблема, с которой я столкнулся сейчас, заключается в том, как вернуть отсортированный массив обратно в JTextPane.

Я пробовал setText(), repaint() и print(), каждый из которых выдает некоторую ошибку, такую ​​как: String[][] не может быть преобразован в String или String [] [] не может быть преобразован в long. если я запускаю программу и выбираю один из видов (sortByDate, sortByTitle и т. д.), программа выводит пакетный файл Windows в файл, в котором хранятся коды. Я могу открыть эти пакетные файлы и увидеть отсортированные массивы, но я не могу заставить их отображать их обратно в JTextPane.

Любая помощь в выяснении, как это исправить, будет принята с благодарностью.

Вот мой код:

import java.util.Arrays;
import java.util.Comparator;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;

class MenuExample extends Frame implements ActionListener
{
    MenuBar mbar;
    Menu menu, submenu;
    MenuItem m1, m2, m3, m4, m5;

    String[][] data = new String[][]
    {
        new String[] { "Casablanca", "Warner Brothers", "1942" },
        new String[] { "Citizen Kane", "RKO Pictures", "1941" },
        new String[] { "Singin' in the Rain", "MGM", "1952" },
        new String[] { "the Wizard of Oz", "MGM", "1930" }
    };

    public MenuExample()
    {
        setTitle("AWT Menu");
        setSize(800, 500);
        setLayout(new FlowLayout());
        setVisible(true);
        setLocationRelativeTo(null);

        mbar = new MenuBar();

    menu = new Menu("Menu");

        submenu = new Menu("Sub Menu");

        m1 = new MenuItem("Sort by Title");
        m1.setActionCommand("Title");
        m1.addActionListener(this);
        m2 = new MenuItem("Sort by Date");
        m2.setActionCommand("Date");
        m2.addActionListener(this);
        m3 = new MenuItem("Sort by Company");
        m3.setActionCommand("Company");
        m3.addActionListener(this);

        m4 = new MenuItem("Menu Item 4");
        m5 = new MenuItem("Menu Item 5");

        menu.add(m1);
        menu.add(m2);
        menu.add(m3);

        submenu.add(m4);
        submenu.add(m5);

        menu.add(submenu);

        mbar.add(menu);

        setMenuBar(mbar);

        JPanel textPanel = new JPanel();
        JTextPane textArea = new JTextPane();

        Dimension textAreaDimensions = new Dimension(500, 300);
        textArea.setPreferredSize(textAreaDimensions);

        JScrollPane scroll = new JScrollPane(textArea,
            JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,    JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

        Document doc = textArea.getDocument();
        try
        {
            for(int i = 0; i < 4; i ++)
            {
                for(int j = 0; j < 3; j ++)
                    doc.insertString(doc.getLength(), data[i][j] + "\t", textArea.getStyle("bold"));
                    doc.insertString(doc.getLength(), "\n", textArea.getStyle("bold"));
            }
        }

        catch (Exception e) {}
        textPanel.add(scroll);
        add(textPanel);
        validate();
        repaint();
    }

    public void actionPerformed(ActionEvent e)
    {
        String arg = e.getActionCommand();

        if(arg.equals("Title"))
        {
            Arrays.sort(data, new sortByTitle());
        }
        if(arg.equals("Date"))
        {
            Arrays.sort(data, new sortByDate());
        }
        if(arg.equals("Company"))
        {
            Arrays.sort(data, new sortByCompany());
        }
    }

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

Методы sortByTitle, sortByDate и sortByCompany являются внешними методами и пишутся так:

import java.util.Arrays;
import java.util.Comparator;

public class sortByTitle implements Comparator<String[]>
{
    public int compare(final String[] entry1, final String[] entry2)
    {
        final String field1 = entry1[0];
        final String field2 = entry2[0];
        return field1.compareTo(field2);
    }
}

1 ответ

Решение
  1. Не используйте 3-строковый массив, к которому относится полноценный класс. Это опасный и хрупкий клудж.
  2. Не смешивайте AWT (Frame) с компонентами Swing (все остальное). Используйте все компоненты Swing.
  3. Отображение ваших табличных данных в компоненте, который был специально создан для отображения табличных данных и который легко сортировать: JTable, а не JTextPane.
Другие вопросы по тегам