JList ist leer, aber DefaultListModel hat die Daten?

sebl11

Mitglied
Hallo Liebe Community,

mein Problem ist das meine die JList leer ist, obwohl in meiner DefaultListModel die Daten gesetzt sind.

Ich bin jetzt echt überfragt hab mit toArray() probiert funktioniert nicht und jetzt DefaultListModel aber das hilft auch nicht 🙁
könnt ihr mir helfen? Wenn ja würde ich mich sehr freuen hier der Quellcode der JHandler Klasse.

Java:
	JListe jlist;
	JMenuItem open;
	JMenuItem exit;
	JMenuItem about;
	int cday = 0;
	int ctime = 0;
	int cdata = 0;
	public List<String> ldays = new ArrayList<String>();
	public List<String> ltime = new ArrayList<String>();
	public List<String> ldata = new ArrayList<String>();

	public JHandler(JListe jlist) {
		super();
		this.jlist = jlist;
		register();
	}

	private void register() {
		// TODO Auto-generated method stub

		open = jlist.open;
		exit = jlist.exit;
		about = jlist.about;

		jlist.addWindowListener(this);
		open.addActionListener(this);
		exit.addActionListener(this);
		about.addActionListener(this);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub

		Object source = e.getSource();

		if (source == open) {
			openFile();
			DefaultListModel<String> model = new DefaultListModel<String>();
			for (String s : ldays) {
				model.addElement(s);
			}
			JList list = new JList(model); //<--- Hier ist die liste dann leer obwohl model gefüllt ist
			System.out.print(model);
			jlist.add(list, BorderLayout.CENTER);
		        jlist.repaint();
		}
		if (source == about) {
			showMessage("Converter - BETA v0.1");
		}
		if (source == exit) {
			System.exit(0);
		}
	}

	public void openFile() {
		
		//File Chooser

		JFileChooser fc = new JFileChooser();
		fc.showOpenDialog(null);

		File file = fc.getSelectedFile();

		if (file == null) {
			JOptionPane.showMessageDialog(new JFrame(),
					"Bitte wählen Sie eine Datei aus", "FEHLER!!!",
					JOptionPane.ERROR_MESSAGE);
		} else {

			FileInputStream fis = null;
			BufferedInputStream bis = null;
			DataInputStream dis = null;

			try {
				fis = new FileInputStream(file);

				// BufferedInputStream ist für das schnelle einlesen zuständig.
				bis = new BufferedInputStream(fis);
				dis = new DataInputStream(bis);
				String zeile = null;

				while ((zeile = dis.readLine()) != null) {
					//Überprüfung der Datei nach den Schlagwörtern
					days(zeile);
				}

				System.out.println("Fertig add");

				fis.close();
				bis.close();
				dis.close();

			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	private void days(String zeile) {
		// TODO Auto-generated method stub
		if (zeile.contains("Sonntag")) {
			zeile = "Sonntag";
			ldays.add(zeile);
			cday++;
		} else if (zeile.contains("Montag")) {
			zeile = "Montag";
			ldays.add(zeile);
			cday++;
		} else if (zeile.contains("Dienstag")) {
			zeile = "Dienstag";
			ldays.add(zeile);
			cday++;
		} else if (zeile.contains("Mittwoch")) {
			zeile = "Mittwoch";
			ldays.add(zeile);
			cday++;
		} else if (zeile.contains("Donnerstag")) {
			zeile = "Donnerstag";
			ldays.add(zeile);
			cday++;
		} else if (zeile.contains("Freitag")) {
			zeile = "Freitag";
			ldays.add(zeile);
			cday++;
		} else if (zeile.contains("Samstag")) {
			zeile = "Samstag";
			ldays.add(zeile);
			cday++;
		}
	}

	// ///////////////////////////////
	// Window - Event
	// ///////////////////////////////
	@Override
	public void windowClosing(WindowEvent e) {
		int erg = JOptionPane.showConfirmDialog(new JFrame(),
				"Wollen Sie das Programm beenden?", "Exit",
				JOptionPane.YES_NO_OPTION);
		if (erg == JOptionPane.YES_OPTION)
			System.exit(0);
	}

	// //////////////////////////////
	// Helper
	// /////////////////////////////
	public void showMessage(String txt) {
		JOptionPane.showMessageDialog(new JFrame(), txt, "Über",
				JOptionPane.INFORMATION_MESSAGE);
	}


Und Falls es Hilft die Frame Klasse JListe:

Java:
	JMenu file = new JMenu("Datei");
	JMenuItem open = new JMenuItem("Öffnen");
	JMenuItem exit = new JMenuItem("Exit");
	JMenu help = new JMenu("Hilfe");
	JMenuItem about = new JMenuItem("About");

	public JListe() {
		setTitle("PlaySCR.dat - Converter");
		setLayout(new BorderLayout());
		setSize(600, 400);
		createMenu();
		centerFrame();
		new JHandler(this);
	}

	private void createMenu() {
		JMenuBar mb = new JMenuBar();
		mb.add(file);
		file.addSeparator();
		file.add(open);
		file.addSeparator();
		file.add(exit);
		mb.add(help);
		help.add(about);
		setJMenuBar(mb);

	}

	private void centerFrame() {
		Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
		Dimension frame = this.getSize();
		this.setLocation((screen.width - frame.width) / 2,
				(screen.height - frame.height) / 2);

	}

	public static void main(String[] args) {

		new JListe().setVisible(true);

	}


Danke schonmal im vorraus
 
Zuletzt bearbeitet:
Das "J" vor den Klassennamen solltest du dir abgewöhnen.
Dieses sollte Java eigenen Swing Klassen vorbehalten sein. So erkennt man diese sofort und weiß es handelt sich um Klassen des Java Frameworks und keine Custom eigenen.

Abgesehen davon sollte man nicht von JFrame erben. Ableiten sollte man nur wenn man wirklich die Funktionalität einer Klasse erweitert.
Ein einfaches setzen von Design, Layout und Komponenten ist keine Funktionalitätserweiterung.
 
Er hat zwar die Daten nun drin aber darstellen tut er sie nicht, aber warum?
Und wieso zeigt er mir die daten jetzt vor der schleife an aber nicht dahinter?
 
probiere mal ein validate() aus 😉

Java:
	jlist.add(list, BorderLayout.CENTER);
			jlist.validate();
			jlist.repaint();
 

Neue Themen


Zurück
Oben