2015-04-13 2 views
1

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

Я попытался 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); 
    } 
} 

ответ

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

Это имеет большой смысл. Лемме переместите что-нибудь вокруг, и я вернусь к вам, если у меня возникнут проблемы с ним – ebonymessiah

Смежные вопросы