java - 在 Java 中将排序数组重写为 JTextPane

标签 java arrays sorting jtextpane

我已经为这个项目工作了大约一个星期。它使用比较器按标题、日期或公司对一串电影进行排序。我现在遇到的问题是如何让排序后的数组显示回 JTextPane。

我已经尝试过 setText()、repaint() 和 print(),它们都会抛出一些错误,例如:String[][] cannot be converted to String or String[][] cannot be converted to 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. 不要在完整类所属的地方使用 3 字符串数组。这是一种危险而脆弱的拼凑。
  2. 不要将 AWT(框架)与 Swing(其他所有)组件混合使用。使用所有 Swing 组件。
  3. 在专门为显示表格数据构建的组件中显示您的表格数据并且易于排序:JTable,不是 JTextPane。

关于java - 在 Java 中将排序数组重写为 JTextPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29616223/

相关文章:

php - MYSQL - 如何使用 ORDER BY 和 LIMIT 对列进行排序,然后按另一列对这些结果进行排序

java - 在 java 中使用 XSD 进行 XML 验证

java - 仅在java字符串中使用双引号(无空格) ""

c - C 新手,简单代码不起作用

当存在 '\n' 时,C++ 输出重复行

C中的计数排序只能对前4个数字进行排序

wordpress - woocommerce 在前端按库存和缺货对产品进行排序

java - 空抽象类是一种不好的做法吗?为什么?

java - JComboBox 对于 JFrame 来说太长

javascript - 从字符串 : Javascript 中提取关键字