JList einem vorhandenem JPanel hinzufügen

Status
Nicht offen für weitere Antworten.

redbomber

Bekanntes Mitglied
Hallo zusammen:

Ich Habe eine JFrame, auf diesem befinden sich Knöpfe, ein Menü und ein JPanel.

Hier das JPanel:
Code:
public class PanelWithList extends JPanel{
public PanelWithList(){
		this.setVisible(true);
		this.setBackground(Color.white);
		Border listPanelBorder = BorderFactory.createTitledBorder("Existing *.view Files");
		this.setBorder(listPanelBorder);
	}
}

Nun möchte ich, wenn ich im Menü einen Menüeintrag auswählen, diesem JPanel eine JList hinzufügen.
Aber da tut sich nichts!
Ist das viellicht garnicht möglich?

Wenn also der Menüeintrag gewählt wird, dann fange ich das Event ab und mache folgende:

// panel ist mein PanelWithList Objekt
// Methode wird nach drücken des Menüeintrags aufgerufen
addListToPanel(panel);

Code:
protected void addListToPanel(PanelWithList panel){
		JList list = new JList(dirList.getFileNames());
		list.setVisible(true);
		list.setVisibleRowCount(2);
		Font displayFont = new Font("Serif", Font.BOLD, 18);
		list.setFont(displayFont);
		list.addListSelectionListener(new ListSelectionListener(){

			@Override
			public void valueChanged(ListSelectionEvent arg0) {
				// TODO Auto-generated method stub
				
			}
			
		});
		JScrollPane scrollPane = new JScrollPane(list);
		panel.add(scrollPane);
		panel.repaint();
	}


Das Panel wird also immer angezeigt, allerdings ohne die JList.
Die Daten für die JList erhalte ich halt erst wenn der Nutzer einen Ordner über das Menü auswählt.
Die Dateien in dem Ordner werden dann in der JList angezeigt. Daher kann ich die JList erst nach dem drücken des Menüeintrags erstellen.
 
Du erzeugst in addListToPanel()
eine JScrollPane und fügst sie nie zu deinem Frame hinzu ...

Du musst deine (vermutlich) bereits erzeugte scrollpane-referenz benutzen
 
Verjigorm hat gesagt.:
Du erzeugst in addListToPanel()
eine JScrollPane und fügst sie nie zu deinem Frame hinzu ...
Doch wird sie... In Zeile 18, wenn ich nicht auf dem Schlauch stehe...

redbomber, probier mal vor Zeile 19
Code:
panel.revalidate();
Ebenius
 
oh wow, glatt überlesen 😳

kannst auchmal prüfen, ob du alles VOR setvisible() machst.
Alles was nach setvisible kommt wird nicht ohne weiteres (revalidate() etc.) dargestellt
 
Verjigorm hat gesagt.:
kannst auchmal prüfen, ob du alles VOR setvisible() machst.
Alles was nach setvisible kommt wird nicht ohne weiteres (revalidate() etc.) dargestellt
:### Lesen... Natürlich macht er's nicht VOR setVisible... Steht doch da. 🙂
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben