T
Tonic
Gast
Hi,
ich würde gern ein Programm schreiben, mit dem man über den FileChooser den Inhalt von Dateien in einer JList dargestellen kann. Ich hab es so weit geschafft, dass der Inhalt zwar dargestellt wird, allerdings nur wenn ich den absoluten Pfad angebe und nicht über Filechooser.
Das Problem liegt wohl irgendwo im ActionAdapter des Dateiöffnens (Klasse Menu Zeile 177-210) und in dem Inhalt der Jlist (Klasse JListData Zeile 82-94)
Hoffe mir kann jemand helfen, ich seh einfach keine Lösung.
Hier der Quellcode (ist ziemlich lang, sry):
Hauptprogramm:
Klasse zum Einlesen der Dateien:
Klasse in der die grafische Oberfläche programmiert wird:
Klasse in der das Menü konstruiert wird
Klasse mit dem Inhalt der Jlist:
ich würde gern ein Programm schreiben, mit dem man über den FileChooser den Inhalt von Dateien in einer JList dargestellen kann. Ich hab es so weit geschafft, dass der Inhalt zwar dargestellt wird, allerdings nur wenn ich den absoluten Pfad angebe und nicht über Filechooser.
Das Problem liegt wohl irgendwo im ActionAdapter des Dateiöffnens (Klasse Menu Zeile 177-210) und in dem Inhalt der Jlist (Klasse JListData Zeile 82-94)
Hoffe mir kann jemand helfen, ich seh einfach keine Lösung.
Hier der Quellcode (ist ziemlich lang, sry):
Hauptprogramm:
Code:
package hauptprogramm;
import gui.SwingFenster;
import util.Streams;
import gui.Menu;
import javax.swing.WindowConstants;
public class Swing{
public static void main( String [] arg ) {
/**
* [b]main[/b]
* erstellt das Fenster
* @param
*/
SwingFenster fensterobjekt = new SwingFenster();
// hier eine Instanz des Fensters konstruieren
fensterobjekt.setVisible(true);
//macht Fenster sichtbar
fensterobjekt.setLocation(200, 200);
//location setzen
fensterobjekt.pack();
//Größe des Fensters
System.out.print(Streams.vectorlesen());
fensterobjekt.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//beim schließen des Fensters -> Prog beenden
}
}// end of class Swing
Klasse zum Einlesen der Dateien:
Code:
package util;
import java.io.*;
import java.util.*;
public class Streams {
static Vector lines=new Vector();
//public static Vector Dateilesen(File Datei) {
public static Vector Dateilesen() {
/**
* [b]Dateilesen(String Datei)[/b]
* Methode zum zeilenweisen Einlesen aus einer Datei und speichern in Vector
* @param Datei (File) :
*
*/
try {
BufferedReader reader = new BufferedReader(new FileReader("prog2Mappe.txt"));
// muss noch geändert werden in geöffnete datei bzw zurückgeändert werden in Datei
while (reader.ready()){
String line=reader.readLine();
lines.addElement(line);
}
reader.close();
}
catch(FileNotFoundException exp) {
System.out.println("Fehler: "+ exp.getMessage());
}
catch(IOException exp) {
System.out.println("Fehler: "+ exp.getMessage());
}
return lines;
}
public static Vector vectorlesen()
{
return lines;
}
public static void Dateischreiben(String Datei, File closer) {
/**
* [b]Dateischreiben(String Datei)[/b]
* Methode zum zeilenweisen Schreiben in eine Datei
* @param Datei (String) :
*
*/
try {
BufferedWriter bw = new BufferedWriter (new FileWriter (closer));
bw.write(Datei);
bw.close();
}
catch (FileNotFoundException exp) {
System.out.println("Fehler: "+ exp.getMessage());
}
catch (IOException exp) {
System.out.println("Fehler: "+ exp.getMessage());
}
}
}
Klasse in der die grafische Oberfläche programmiert wird:
Code:
package gui;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class SwingFenster extends JFrame{
// Instanz- oder Membervariablen
String[] karte = {
"A", "B","C",
"D","E","F",
"G","H","I",
"J", "K", "L",
"M","N","O",
"PQ","R","ST","UVW","XYZ"};
JPanel listPanel = new JPanel();
//JList[] jliste = new JList[karte.length];
/**
* JList
*/
JList[] jliste = new JList[karte.length];
JListData dataModel = null;
public SwingFenster(){ // Konstruktor mit Parameter
// Aufruf des Konstruktors der Oberklasse
super("Swing Fenster");
this.setJMenuBar(new Menu(this)); //legt die Bar auf das Panel
Container cpane = this.getContentPane();
GridBagLayout grid = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints();
cpane.setLayout(grid);
JTabbedPane tabbedPane = new JTabbedPane();
for(int i=0; i < karte.length; i++){
JPanel panel = makeTextPanel();
tabbedPane.addTab(karte[i],panel);
}
cpane.add(tabbedPane); // tabbedPane auf Panel legen
// alles schön packen
this.pack();
}// end of constructor
// eigene Methoden
/**
* Update look and feel
* @param lafStyle (String) =
* "javax.swing.plaf.metal.MetalLookAndFeel",
* "com.sun.java.swing.plaf.motif.MotifLookAndFeel",
* "com.sun.java.swing.plaf.windows.WindowsLookAndFeel",
*/
void updateLAF(String lafStyle){
System.out.println("updateLAF = " + lafStyle);
try{
UIManager.setLookAndFeel( lafStyle );
SwingUtilities.updateComponentTreeUI( this );
}
catch(Exception ex){
System.out.println("Fehler beim L&F " + ex.getMessage());
}
this.pack(); // alles schön packen
}
public JPanel makeTextPanel()
{
JPanel panel = new JPanel(false); // Instanzierung eines JPanel-Objektes panel
panel.setLayout(new GridLayout(1, 1)); // Festlegung des Layouts des JPanel-Objektes
// Festlegung, wie die JListData aufgebaut werden soll(AbstractListModel)
dataModel = new JListData();
/* Instanzierung eines JListData-Objektes*/
JList liste = new JList(dataModel);
/* Instanzierung einer JList liste, die als Übergabeparameter
das JListData-Objekt beinhaltet.*/
//jliste =liste; // Referenz von liste
liste.setLayoutOrientation(JList.VERTICAL); // Layout der liste festlegen
liste.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
/* Ermöglichung von Mehrfachselektion
* ListSelectionModel.MULTIPLE_INTERVAL_SELECTION
* ListSelectionModel.SINGLE_INTERVAL_SELECTION
* ListSelectionModel.SINGLE_SELECTION
* */
liste.setVisibleRowCount(-1); // liste wird sichtbar gemacht
JScrollPane scrollPane = new JScrollPane(liste);
/* Instanzierung eines JScrollPane-Objektes
scrollPane, die als Übergabeparameter das JList-Objekt hat.*/
scrollPane.setPreferredSize(new Dimension(450, 260));
//Festlegung der Grösse des scrollPanels
//liste.addListSelectionListener(new ListSelectionAdapter(liste));
/* Anbinden des ListSelectionListener an die liste
*/
panel.add(scrollPane); // scrollPane wird auf das panel gelegt
return panel;
}
/** Hilfmethoden
*
*
*/
void addComponent ( Container container, Component component,
int gridx, int gridy, int gridwidth, int gridheight)
{
addComponent(container,component, gridx, gridy,gridwidth, gridheight,
GridBagConstraints.WEST);
}
void addComponent ( Container container, Component component,
int gridx, int gridy, int gridwidth, int gridheight,
int anchor)
{
GridBagConstraints constr = new GridBagConstraints();
constr.gridx = gridx;
constr.gridy = gridy;
constr.gridwidth = gridwidth;
constr.gridheight = gridheight;
constr.anchor = anchor;
container.add(component,constr);
}
// innere Klassen
}// end of class SwingFenster
Klasse in der das Menü konstruiert wird
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.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;
//static Vector <String> data = new Vector<String>(10,1);
static Vector data = new Vector();
JMenu // PullDownMenu
mnuFile = new JMenu("Datei"),
mnulookfeel = new JMenu("look&feel"),
mnuInfo = new JMenu("Info");
//Überpunkte
JMenuItem
mniFileOpen = new JMenuItem("öffnen"),
mniFileSave = new JMenuItem("sichern"),
mniEnde = new JMenuItem("beenden");
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
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( mnulookfeel );
// PullDownMenu auf MenuLeiste legen
this.add(mnuInfo);
}// end of constructor
//------------- ActionListener Interfaces --------------------
// 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 einlesen der Datei
*
*/
JFileChooser waehlen = new JFileChooser();
waehlen.setMultiSelectionEnabled(false);
try {
if (waehlen.showOpenDialog(fenster) == JFileChooser.APPROVE_OPTION)
{
System.out.println ("Datei "+waehlen.getSelectedFile()+" geöffnet.");
//fenster.txtarea.setText(Streams.Dateilesen(waehlen.getSelectedFile()));
Vector dateilesen = Streams.Dateilesen();
data = dateilesen;
//System.out.println(Streams.vectorlesen());
//System.out.println(Streams.Dateilesen(waehlen.getSelectedFile()));
System.out.println(data);
//System.out.println(Menu.vectorlesen());
}
}
catch (NullPointerException exp){
String nachricht = "Es wurde keine Datei ausgewählt!";
JOptionPane.showMessageDialog(fenster, nachricht, "Warnung",0);
System.out.println(exp.getMessage());
}
}
}
public static Vector vectorlesen()
{
return data;
}
// 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
Klasse mit dem Inhalt der Jlist:
Code:
package gui;
import java.util.Vector;
import javax.swing.AbstractListModel;
import javax.swing.JFrame;
import util.Streams;
public class JListData extends AbstractListModel {
/**
*
*/
private static final long serialVersionUID = 1L;
static Vector data = new Vector();
/**
* Deklarieren eines Vector-Datenspeichers.
*/
private Vector <String> dlist;
/**
* Referenz auf das Hauspfenster.
*/
private JFrame fenster;
/**
* Konstruktor
* @param Referenz auf das Hauspfenster.
*/
/*public JListData(JFrame f, Vector <String> v) {
fenster = f; // Zuweisung von f zu fenster
//dlist = new Vector <String> (); // Initialisierung eines neuen Vector-Objekts
dlist = v;
makeData(); // Registerkartenbennenung wird im Vector gespeichert
}*/
/*public JListData(JFrame f) {
fenster = f; // Zuweisung von f zu fenster
//dlist = new Vector <String> (); // Initialisierung eines neuen Vector-Objekts
dlist = new Vector <String>();
makeData(); // Registerkartenbennenung wird im Vector gespeichert
}
*/
public JListData(){
dlist = new Vector <String>();
makeData();
}
/**
* Die Methode makeData liest Daten ein und speichert sie im Datenspeicher
* @return Datenspeicher
*/
//private Vector <String> makeData()
/*private void makeData()
{
String[] data = {"Otto", "Gustav", "Hugo", "Anna", "Emil", "Marianne", "Herbert", "Iris"}; // Daten
Vector <String> data = Streams.Dateilesen();
for(int i = 0; i < data.size(); i++){
dlist.addElement( (String) data.elementAt(i)); // Speicherung der Daten
}
return dlist; // Rückgabe des Datenspeichers
}
*/
public Vector <String> makeData()
{
//String[] data = {"Otto", "Gustav", "Hugo", "Anna", "Emil", "Marianne", "Herbert", "Iris"}; // Daten
//Vector vectorlesen = Menu.vectorlesen();
Vector vectorlesen = Streams.Dateilesen();
Vector data = vectorlesen;
for(int i = 0; i < data.size(); i++){
dlist.addElement( (String) data.elementAt(i)); // Speicherung der Daten
}
return dlist; // Rückgabe des Datenspeichers
}
/**
* Die Methode getElementAt holt das selektierte Element an der Stelle des Indexes.
* @param index ist der Index, der anzeigt, welches Elememt geholt werden soll.
* @return String am Index i
*/
public Object getElementAt(int index)
{
return dlist.elementAt(index); // Rückgabe des Elements an der entsprechenden Position
}
/**
* Die Methode getSize gibt die Grösse des Datenspeichers zurück.
* @return int Grösse des Datenspeichers
*/
public int getSize()
{
return dlist.size(); //Rückgabe der Grösse des Datenspeichers
}
/**
* Diese Methode wird aufgerufen, um ein neues Element in der JList darzustellen.
*
* @param s das ist der [b]neue String [/b], der dem Datenspeicher hinzugefügt werden soll
*
*/
public void addElement(String s){
// neues Element dem Datenspeicher hinzufügen
dlist.addElement(s);
// nun das View (Jlist) aktualisieren - Fire-Event auslösen
this.fireIntervalAdded(this, dlist.size()-1, dlist.size());
}
}// end of class AbstractListModel