jTable bzw. Sortierung

polenben

Mitglied
Hallo zusammen,
ich hab ein problem :) ,dass mit mehreren problemen zusammen hängt. somit einen kurze erklärung:
Daten aus einer excel spalte auslesen (erledigt)
Daten vergleichen und bei übereinstimmung eine summe bilden und aufaddieren (erledigt)
die so gewonnen statisik ausgegen (erledigt)

so jetzt kern der frage:
die ausgelesenen daten sollen jetzt noch sortiert werden. und dazu habe ich schon ein programm geschrieben, aber irgendwie hab ich mich da irgendwie total verzettelt und vorher eben gerade auch den überblick verloren weil ich molch es nicht OO programmiert habe. naja evtl wirft mal einer nen blick drüber oder gibt mir nen besseren lösungsvorschlag. bzw sagt mir wie er/sie es machen würde

Code:
import java.io.File;
import java.io.IOException;
import java.util.Vector;
import java.util.Date;
import jxl.*;
import jxl.write.*;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import java.io.*;
import java.lang.*;
import jxl.write.Number;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;





public class ExcelTest
{
  // Initialisieren der globalen Variablen
  public String path = "//ar203fi2/home/benjamin.assbeck/java/test/namen.xls";
  public Workbook workbook = null;
  public Vector<NameCounter> nameVector = new Vector<NameCounter>();
  //private Vector <NameCounter> nameVector = new Vector();

  /**
   * Programm starten.
   */
  public void start()
  {
    // Abfangen der Exceptions
    try
    {
      // Einlesen der Datei
      this.workbook = Workbook.getWorkbook(new File("//homedir/******/myfile.xls"));

    }
    catch (BiffException e)
    {
      System.out.println("BiffException" + e.getMessage());
    }
    catch (IOException e)
    {
      System.out.println("IOException" + e.getMessage());
    }

    // Tabelle initialisieren
    Sheet sheet = this.workbook.getSheet(0);

    // Erstellen der Zellenobjekte
    String cellText;
    NameCounter nameCounter;

    // Die zu durchsuchende Spalte und Startzeile initialisieren
    int suchSpalte = 4;
    int startZeile = 8;

    // Schleife für Zellenüberprüfung
    for (int i = startZeile; i < sheet.getRows(); i++)
    {
      // Einlesen der Zellen in die String-Variablen
      cellText = sheet.getCell(suchSpalte, i).getContents().trim();

      nameCounter = isNameInVector(cellText);

      if (nameCounter == null)
      {
        if (!cellText.equals(""))
        {
          this.nameVector.add(new NameCounter(cellText));
        }
      }
      else
      {
        nameCounter.setCounterUp();
      }
    }

    try{
    
      WritableWorkbook workbook1 = Workbook.createWorkbook(new File("//homedir/******/myfile.xls"));
      WritableSheet sheet1 = workbook1.createSheet("meop2", 2);
      
       // Schleife für die Konsolenausgabe
     for (int i = 0; i < this.nameVector.size(); i++)
      {
         nameCounter = this.nameVector.elementAt(i);

         System.out.println(nameCounter.getName() + ": "  +" \t "+ nameCounter.getCounts());

         Label label = new Label(3, (i+5),nameCounter.getName() + ": "  );
         sheet1.addCell(label);

         Number number = new Number(6, (i+5), nameCounter.getCounts());
         sheet1.addCell(number);
      }
         workbook1.write();
         workbook1.close();
    }
    
      catch (Exception e) {
       System.out.println("Exception: " + e.getMessage());

      }
  }
       public class CSVTest extends JFrame
  {
            private class MeinWindowListener extends WindowAdapter
           {
            public void windowClosing(WindowEvent arg0)
            {
             System.exit(0);
            }
           }
      private String[] columnNamen = { "Spalte 1", "Spalte 2" };
      private DefaultTableModel tableModel;
      private JButton button;
      private JComponent contentPane = (JComponent) getContentPane();
      
              CSVTest()
               {
                 super("CSV Test");
                 setSize(800, 600);
                 initLayout();
                 setLocationRelativeTo(null);
                 addWindowListener(new MeinWindowListener());
                 setVisible(true);
                 setResizable(true);
                }
      
          void initLayout()
   {
        contentPane.setLayout(new BorderLayout());

        tableModel = new DefaultTableModel(null, columnNamen);
        JTable tableZahlen = new JTable(tableModel);
        tableZahlen.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

         JScrollPane scrollPane = new JScrollPane(tableZahlen);
         scrollPane.setPreferredSize(new Dimension(300, 300));

         JPanel jpTable = new JPanel();
         jpTable.add("Center", scrollPane);
         contentPane.add("West", jpTable);

                button = new JButton("Einlesen");
               button.addActionListener(new ActionListener()
               {
                public void actionPerformed(ActionEvent e)
                {
                    readFile();
                }
               });

        JPanel jpButton = new JPanel();
        jpButton.add(button);
        contentPane.add("South", jpButton);

    }


        /**
        *
        */
        protected void readFile()
        {
         try{
              BufferedReader reader = new BufferedReader(new File("//homedir/******/myfile.xls"));

                String strLine;
                while ( (strLine = reader.readLine()) != null )
                 {
                  String[] items = strLine.split(";");
                  tableModel.addRow(items);
                 }
                 tableModel.fireTableDataChanged();
             }
                 catch(FileNotFoundException e) {}
                 catch(IOException e) {}
        }
      
      
   }
  
  /**
   * Überprüfen ob der Name bereits im Vector vorhanden ist.
   */
  public NameCounter isNameInVector(String name)
  {
    NameCounter nameCounter = null;
    NameCounter nameCounterTest;

    for (int i = 0; i < nameVector.size(); i++)
    {
      nameCounterTest = nameVector.elementAt(i);

      if (nameCounterTest.getName().equals(name))
      {
        nameCounter = nameCounterTest;
        break;
      }
      else
      {
        nameCounter = null;
      }
    }

    return nameCounter;
  }




  /**
   * Mainmethode

   */
      public static void main(String[] args)
      {
       new ExcelTest().start();
        CSVTest frame = new CSVTest();
       frame.setLocation(150, 90);
       frame.setSize(600, 500);
       frame.setResizable(true);
       frame.setVisible(true);


      }

}



Code:
public class NameCounter
{
  public String name;
  public int counter;

  /**
   * Konstruktor
   */
  public NameCounter(String name)
  {
    this.name = name;
    this.counter = 1;
  }

  /**
   * Erhöht den Namenzähler
   */
  public void setCounterUp()
  {
    this.counter++;
  }

  /**
   * Gibt den Namen zurück.
   *
   * @return {@link String}
   */
  public String getName()
  {
    return name;
  }

  /**
   * Gibt die Anzahl der gezählten Namen zurück.
   *
   * @return {@link Integer}
   */
  public int getCounts()
  {
    return counter;
  }
}
 
Zuletzt bearbeitet:
Hallo,

ich weiß nicht mit was für JAVA Version du programmierst aber so automatisches Sortieren nach Datentyp ist in java 1.6 enthalten. Falls du mit 1.5 machst, dann gibt es jxtable Möglichkeit.

Gruß
lernen.2007
 
Hallo zusammen, evtl habe ich mich ein bisschen falsch ausgedrückt, sodass ihr mich falsch verstanden habt. bei menem code den ich gepostet habe bekomme ich eine fehlermeldung (sortierung schon integriert). Allerdings weiß finde ich den fehler nicht auch nach mehrmaligen drüber schauen hab ich ihn nicht entdeckt.

Felhermeldung: CSVTest frame = new CSVTest();

evtl kann mir ja einer helfen.
vielen dank schonmal

greez ben
 
Fehlermeldung: Non-static variable cannot be referenced from a non-static context

hab auch schon eine neue methode geschrieben, die ich dann in der main methode wieder aufrufe um sie auzuführen, allrdings klappt das irgendwie nicht.

montag morgen und ich könnt schon wieder kotzen ^^
 
Fehlermeldung: Non-static variable cannot be referenced from a non-static context

Sagt die Fehlermeldung nicht schon alles?
Code:
CSVTest frame = new CSVTest();
frame.setLocation(150, 90);
frame.setSize(600, 500);
frame.setResizable(true);
frame.setVisible(true);
Entferne mal alle 4 Zeilen unter CSVTest frame = new CSVTest();
 
es geht deswegen auch noch nicht. die vier zeilen hatte ich anfangs mal drinnen. da ich die im konstrukter gesetzten variablen dadurch ja verändern/ersetzen kann.
 
Kannst du mal genauer sagen, wo der Fehler geworfen wird? Bestimmt nicht beim Erzeugen des Objekts. Ich denke im Konstruktor. Und wenn dus schon gemerkt hast, wieso schreibst du die 4 Angaben nicht gleich in den Konstruktor?
 
Moin!
Die Fehlermeldung , wie Matze schon meinte, sagt alles, aber die Ursache liegt wirklich in der Erstellung des Objekts.
Da CSVTest als nichtstatische innere Klasse von ExcelTest implementiert ist, kann sie nunmal nicht ohne eine Instanz von ExcelTest erstellt werden.
Unabhängig davon, ob es in diesem Zusammenhang sinnvoll ist, was du machst, CSVTest kann folgendermassen erstellt werden:
Code:
public static void main(String[] args){
ExcelTest test = new ExcelTest();
CSVTest frame  = test.new CSVTest();

//oder 
CSVTest frame = new ExcelTest().new CSVTest();

}


*grüssle*
MeinerEiner
 
Zuletzt bearbeitet von einem Moderator:
Zurück