Hi, ich habe eon recht großes Problem mit meinem Prog:
Ich möchte mit dem Filechooser eine Datei öffnen und diese dann auf einer geordneten JList darstellen. Das Datamodell wird zwar aktualisiert, aber es wird einfach nichts in der JlList angezeigt. Ich denke das Problem liegt irgendwo in dieser Methode:
Hier noch mein restlicher Code (ich weiß es ist viel, aber wäre nett wenn mir trotzdem jemand helfen könnte:
Die Klasse in der das Menü und die Actionlistener sind (hier ist auch das Problem mit dem öffnen+hinzufügen)
Ich möchte mit dem Filechooser eine Datei öffnen und diese dann auf einer geordneten JList darstellen. Das Datamodell wird zwar aktualisiert, aber es wird einfach nichts in der JlList angezeigt. Ich denke das Problem liegt irgendwo in dieser Methode:
Code:
public void actionPerformed( ActionEvent event){
/**
* Methode zum öffnen einer Datei
*
*/
JFileChooser waehlen = new JFileChooser();
//Vector inhalt = new Vector();
waehlen.setMultiSelectionEnabled(false);
try {
if (waehlen.showOpenDialog(fenster) == JFileChooser.APPROVE_OPTION)
{
String dateiname = waehlen.getSelectedFile().getName();
SwingFenster fensterobjekt = new SwingFenster();
System.out.println ("Datei "+waehlen.getSelectedFile()+" geöffnet.");
Vector <String> dateiinhalt = Streams.Dateilesen(waehlen.getSelectedFile());
for (int i=0; i < fensterobjekt.karte.length; i++){
JListData data = fensterobjekt.makeDataModel(fensterobjekt.karte[i],waehlen.getSelectedFile());
liste = fensterobjekt.jliste[i];
//System.out.println(data.getSize());
//System.out.println(fensterobjekt.karte[i]);
System.out.println("vorher: "+liste.getModel().getElementAt(0));
//fensterobjekt.jliste[i].setModel(data);
liste.setModel(data);
liste.repaint();
//fensterobjekt.jliste[i].updateUI();
System.out.println("nachher: "+liste.getModel().getElementAt(0));
}
//fensterobjekt.fensterupdaten();
System.out.println("test::: "+fensterobjekt.jliste[0].getModel().getElementAt(0));
}
}
catch (NullPointerException exp){
String nachricht = "Es wurde keine Datei ausgewählt!";
JOptionPane.showMessageDialog(fenster, nachricht, "Warnung",0);
System.out.println(exp.getMessage());
}
}
Hier noch mein restlicher Code (ich weiß es ist viel, aber wäre nett wenn mir trotzdem jemand helfen könnte:
Die Klasse in der das Menü und die Actionlistener sind (hier ist auch das Problem mit dem öffnen+hinzufügen)
Code:
package gui;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import util.Streams;
public class Menu extends JMenuBar{
/**
*
*/
private static final long serialVersionUID = 1L;
JList liste;
//public String[] kartenlänge = SwingFenster.getkartelength();
//public JListData[] dataModel = SwingFenster.getdatamodell();
//static Vector <String> data = new Vector<String>(10,1);
//JListData data = new JListData();
//SwingFenster fenster2 = new SwingFenster();
//Vector dlist = null;
//Menu menu = null;
JMenu // PullDownMenu
mnuFile = new JMenu("Datei"),
mnuNamen = new JMenu("Namen"),
mnulookfeel = new JMenu("look&feel"),
mnuInfo = new JMenu("Info");
//Überpunkte
JMenuItem
mniFileOpen = new JMenuItem("öffnen"),
mniFileSave = new JMenuItem("sichern"),
mniEnde = new JMenuItem("beenden");
JMenuItem
mnieinfügen = new JMenuItem("einfügen"),
mnilöschen = new JMenuItem("löschen"),
mniändern = new JMenuItem("ändern");
JMenuItem
mniWindows = new JMenuItem("Windows"),
mniMetal = new JMenuItem("Metal"),
mniMotif = new JMenuItem("Motif");
JMenuItem
mniAutor = new JMenuItem("Autor"),
mniHelp = new JMenuItem("Hilfe");
SwingFenster fenster = null;
// Konstruktor
public Menu(JFrame f){
fenster = (SwingFenster)f; // Referenz auf das Fenster
System.out.println("Menueleiste konstruiert.");
// -----------------------------------------------
mnuFile.add( mniFileOpen ); // Item auf PulldownMenu legen
mnuFile.add( mniFileSave ); // Item auf PulldownMenu legen
mnuFile.addSeparator(); //Separator einfügen
mnuFile.add( mniEnde ); // Item auf PulldownMenu legen
// Listener anbinden ------------------------
mniFileOpen.addActionListener(new ActionAdapterread()); // ActionAdapter um zu lesen
mniFileSave.addActionListener(new ActionAdapterwrite()); // ActionAdapter um zu schreiben
mniEnde.addActionListener(new ActionAdapterExit()); // ActionAdapter um zu beenden
mnuNamen.add(mnieinfügen); // Item auf PulldownMenu legen
mnuNamen.add(mnilöschen); // Item auf PulldownMenu legen
mnuNamen.add(mniändern); // Item auf PulldownMenu legen
mnieinfügen.addActionListener(new ActionAdaptereinfügen()); // ActionAdapter um zu lesen
mnilöschen.addActionListener(new ActionAdapterlöschen()); // ActionAdapter um zu schreiben
mniändern.addActionListener(new ActionAdapterändern()); // ActionAdapter um zu beenden
mnulookfeel.add( mniWindows ); // Item auf PulldownMenu legen
mnulookfeel.add( mniMetal ); // Item auf PulldownMenu legen
mnulookfeel.add( mniMotif ); // Item auf PulldownMenu legen
// Listener anbinden ------------------------
mniWindows.addActionListener(new ActionAdapterchange()); // ActionAdapter zum ändern des look&feel
mniMetal.addActionListener(new ActionAdapterchange()); // ActionAdapter zum ändern des look&feel
mniMotif.addActionListener(new ActionAdapterchange()); // ActionAdapter zum ändern des look&feel
mnuInfo.add(mniAutor);// Item auf PulldownMenu legen
mnuInfo.add(mniHelp);// Item auf PulldownMenu legen
mniAutor.addActionListener(new ActionAdapterAutor()); // ActionAdapter für Autoreninfos
mniHelp.addActionListener(new ActionAdapterHelp()); // ActionAdapter der Hilfefunktion
// PullDownMenu auf MenuLeiste legen
this.add( mnuFile );
//PullDownMenu auf MenuLeiste legen
this.add( mnuNamen );
// PullDownMenu auf MenuLeiste legen
this.add( mnulookfeel );
// PullDownMenu auf MenuLeiste legen
this.add(mnuInfo);
}// end of constructor
//------------- ActionListener Interfaces --------------------
// Actionadapter für das Einfügen von Namen
class ActionAdaptereinfügen implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
SwingFenster fensterobjekt = new SwingFenster();
String s = (String) JOptionPane.showInputDialog(
fenster,
"Bitte geben sie den neuen Eintrag ein",
"Neuer Eintrag",
JOptionPane.INFORMATION_MESSAGE,
null,
null,
"Name;Vorname");
// If a string was returned, say so.
if ((s != null) && (s.length() > 0)) {
System.out.println("eingefügt wird "+ s);
String[] karte =fensterobjekt.karte;
for (int k=0; k<karte.length; k++){
if (karte[k].contains(s.substring(0,1))) {
System.out.println("ja");
//fensterobjekt.datamodellarray[k].addElement(s);
System.out.println(fensterobjekt.datamodellarray[k].getElementAt(0));
}
}
}
// If you're here, the return value was null/empty.
else
System.out.println("Bitte etwas eingeben!");
}
}
// Actionadapter für das Löschen von Namen
class ActionAdapterlöschen implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
Object[] possibilities = {"ham", "spam", "yam"};
String o = (String)JOptionPane.showInputDialog(
fenster,
"Complete the sentence:\n"
+ "\"Green eggs and...\"",
"Customized Dialog",
JOptionPane.PLAIN_MESSAGE,
null,
possibilities,
"ham");
//String s = (String) JOptionPane.showConfirmDialog(arg0, arg1)
// If a string was returned, say so.
if ((o != null) && (o.length() > 0)) {
System.out.println("Green eggs and... " + o + "!");
}
// If you're here, the return value was null/empty.
else System.out.println("Come on, finish the sentence!");
}
}
// Actionadapter für das Ändern von Namen
class ActionAdapterändern implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
//JOptionPane.showInputDialog(
// fenster, "Eintrag ändern");
}
}
// Actionadapter für die Autordaten
class ActionAdapterAutor implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(
fenster, "Autordaten");
}
}
// Actionadapter für die Hilfe
class ActionAdapterHelp implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
/**
* Methode zum Anzeigen der Hilfe
*
*/
JOptionPane.showMessageDialog(
fenster, "Datei: öffnet und speichert Dateien. Schließen beendet das Programm.\n" +
"look&feel: ändert das Aussehn des Fensters.\n" +
"Info: Infos über den Autor und die Hilfe.\n" +
"ok button: schreibt den Namen und die Email in die Konsole.\n" +
"klicken auf die restlichen Items: gibt ihren Namen auf der Konsole aus.");
}
}
//Actionadapter zum Beenden
class ActionAdapterExit implements ActionListener{
public void actionPerformed(ActionEvent arg0)
/**
* Methode zum beenden
*
*/
{
System.exit(0);
}
}
//ActionAdapter für look&feel änderung
class ActionAdapterchange implements ActionListener{
public void actionPerformed(ActionEvent ev)
{
/**
* Methode um das look and feel einzustellen
*
*/
Object quelle = ev.getSource();
if (quelle == mniWindows)
{
fenster.updateLAF("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}
if (quelle == mniMetal)
{
fenster.updateLAF("javax.swing.plaf.metal.MetalLookAndFeel");
}
if (quelle == mniMotif)
{
fenster.updateLAF("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
}
}
}
//ActionAdapter zum lesen
class ActionAdapterread implements ActionListener{
public void actionPerformed( ActionEvent event){
/**
* Methode zum öffnen einer Datei
*
*/
JFileChooser waehlen = new JFileChooser();
//Vector inhalt = new Vector();
waehlen.setMultiSelectionEnabled(false);
try {
if (waehlen.showOpenDialog(fenster) == JFileChooser.APPROVE_OPTION)
{
String dateiname = waehlen.getSelectedFile().getName();
SwingFenster fensterobjekt = new SwingFenster();
System.out.println ("Datei "+waehlen.getSelectedFile()+" geöffnet.");
Vector <String> dateiinhalt = Streams.Dateilesen(waehlen.getSelectedFile());
for (int i=0; i < fensterobjekt.karte.length; i++){
JListData data = fensterobjekt.makeDataModel(fensterobjekt.karte[i],waehlen.getSelectedFile());
liste = fensterobjekt.jliste[i];
//System.out.println(data.getSize());
//System.out.println(fensterobjekt.karte[i]);
System.out.println("vorher: "+liste.getModel().getElementAt(0));
//fensterobjekt.jliste[i].setModel(data);
liste.setModel(data);
liste.repaint();
//fensterobjekt.jliste[i].updateUI();
System.out.println("nachher: "+liste.getModel().getElementAt(0));
}
//fensterobjekt.fensterupdaten();
System.out.println("test::: "+fensterobjekt.jliste[0].getModel().getElementAt(0));
}
}
catch (NullPointerException exp){
String nachricht = "Es wurde keine Datei ausgewählt!";
JOptionPane.showMessageDialog(fenster, nachricht, "Warnung",0);
System.out.println(exp.getMessage());
}
}
}
// ActionAdapter zum schreiben
class ActionAdapterwrite implements ActionListener{
public void actionPerformed( ActionEvent event){
/**
* Methode um die Datei zu speichern
*
*/
JFileChooser speichern = new JFileChooser();
try {
if (speichern.showSaveDialog(fenster) == JFileChooser.APPROVE_OPTION)
System.out.println ("Datei "+speichern.getSelectedFile()+" gespeichert.");
//Streams.Dateischreiben(fenster.txtarea.getText(),speichern.getSelectedFile());
}
catch (NullPointerException exp){
String nachricht = "Es wurde keine Datei ausgewählt!";
JOptionPane.showMessageDialog(fenster, nachricht, "Warnung",0);
System.out.println(exp.getMessage());
}
}
}// end of inner classes
}// class MenueLeiste