2015-04-13 2 views
1

J'ai travaillé sur ce projet pendant environ une semaine. Il utilise un comparateur pour trier une série de films par Titre, Date ou Société. Le problème que j'ai maintenant est comment obtenir le tableau trié à afficher dans le JTextPane. J'ai essayé setText(), repaint() et print(), qui lancent une erreur telle que: String [] [] ne peut pas être converti en String ou String [] [] ne peut pas être converti en long. Si je lance le programme, et que je choisis l'un des types (sortByDate, sortByTitle, etc.), le programme génère un fichier de commandes Windows dans le fichier où sont stockés les codes. Je peux ouvrir ces fichiers batch et voir les tableaux triés, mais je n'arrive pas à les faire revenir dans le JTextPane.Réécriture d'un tableau trié vers un JTextPane en Java

Toute aide pour trouver une solution à ce problème serait grandement appréciée.

Voici mon code:

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(); 
    } 
} 

Les méthodes sortByTitle, sortByDate et sortByCompany sont des méthodes externes et sont écrits en tant que tels:

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); 
    } 
} 

Répondre

3
  1. Ne pas utiliser un tableau 3 cordes où une classe à part entière appartient. C'est un kludge dangereux et fragile.
  2. Ne mélangez pas les composants AWT (Frame) avec Swing (tout le reste). Utilisez tous les composants Swing.
  3. Affichez votre tabulaires données dans un composant qui a été construit spécifiquement pour afficher les données tabulaires et est facile à trier: un JTable, pas un JTextPane.
+0

Cela a beaucoup de sens. Lemme déplace des trucs et je reviendrai vers toi si j'ai plus de problèmes avec ça – ebonymessiah