Scrollbalken in JList funktioniert nicht

Kaji Lim

Mitglied
Hallo,

ich will eine JList von Objekten anlegen, da es relativ viele werden können will ich einen Scrollbalken einbauen.

Ich weiß schonmal, dass man einem Scrollbalken die Jlist zuweisen muss und nicht umgekehrt, aber es will einfach nicht funktionieren. Ich habe auch das Problem, dass Buttons die ich in das Programm einbaue auf die komplette Länge gestreckt werden, selbst mit setSize(X,Y);

Hier ma mein code:

Java:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class Fenster extends JFrame {
	public Fenster() {
		setSize(1024, 768);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		this.setBackground(Color.LIGHT_GRAY);

		{
			JMenuBar menuBar = new JMenuBar();
			setJMenuBar(menuBar);

			JMenu patientMenu = new JMenu("Patient");
			JMenu hilfeMenu = new JMenu("Hilfe");
			menuBar.add(patientMenu);
			menuBar.add(hilfeMenu);

			JMenuItem neuAction = new JMenuItem("Neuen Patienten anlegen");
			neuAction.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {

					new Dateneingabe().setVisible(true);
				}
			});
			
			JMenuItem oeffnenAction = new JMenuItem("Patientendaten šffnen");
			oeffnenAction.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {

					//Create a file chooser
					final JFileChooser fc = new JFileChooser();
					
					//In response to a button click:
					int returnVal = fc.showOpenDialog(null);
					
				}
			});
			
			JMenuItem speicherAction = new JMenuItem("Patientendaten speichern");
			speicherAction.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {

					//BEFEHL ZUM SPEICHERN DER DATEN EINFÜGEN
				}
			});
			
			JMenuItem beendenAction = new JMenuItem("Programm beenden");
			beendenAction.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {

					System.exit(0);
				}
			});
			

			patientMenu.add(neuAction);
			patientMenu.add(oeffnenAction);
			patientMenu.add(speicherAction);
			patientMenu.add(beendenAction);

		}
		
//PATIENTENLISTE		
		JList list = new JList(); //data has type Object[]
		list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		list.setLayoutOrientation(JList.VERTICAL);
		list.setVisibleRowCount(-1);

		JScrollPane listScroller = new JScrollPane(list);
		listScroller.setPreferredSize(new Dimension(200, 80));
		
		DefaultListModel listModel = new DefaultListModel();
		listModel.addElement("Debbie Scott");
		listModel.addElement("Scott Hommel");
		listModel.addElement("Alan SommererskjdfkadjsfhšsdhjfošsDF");

		list = new JList(listModel);
		listScroller.add(list);
		add(list, BorderLayout.WEST);
		
		
	}
	

}
 
Stimmt, da ist noch mehr nicht in Ordnung.
Der Code müsste ab Zeile 68 so aussehen:
[JAVA=68] //PATIENTENLISTE
DefaultListModel listModel = new DefaultListModel();
listModel.addElement("Debbie Scott");
listModel.addElement("Scott Hommel");
listModel.addElement("Alan SommererskjdfkadjsfhšsdhjfošsDF");

JList list = new JList(listModel); //data has type Object[]
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

JScrollPane listScroller = new JScrollPane(list);
listScroller.setPreferredSize(new Dimension(200, 80));
add(listScroller, BorderLayout.WEST);[/code]
 
Funzt , super, danke!

Ehm dann hab ich noch das problem, dass ich ein Border Layout benutze und somit die Buttons auf die gesamte fensterlänge gezogen werden, was kann ich tun um die Button-Grösse zu verändern?

Kaji
 
So gehts ... du hast einiges durcheinandergebracht....

Java:
		// PATIENTENLISTE
		DefaultListModel listModel = new DefaultListModel();
		listModel.addElement("Debbie Scott");
		listModel.addElement("Scott Hommel");
		listModel.addElement("Alan SommererskjdfkadjsfhšsdhjfošsDF");

		JList list = new JList(listModel); // data has type Object[]
		list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		list.setLayoutOrientation(JList.VERTICAL);
		list.setVisibleRowCount(-1);
		list.setPreferredSize(new Dimension(300, 1000));

		JScrollPane listScroller = new JScrollPane();
		listScroller.setViewportView(list);

		// listScroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		// listScroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		add(listScroller, BorderLayout.WEST);
 
Hi,

thx das Board ist echt Gold wert :-D

Eine Frage hätte ich noch und dann ists gut für Heute,

Ich habe in meinem Programm ein paar Patienten, die jeweils als .pat gespeichert werden.
Soweit klappts ganz gut, jedoch will ich jetzt die Patienten in einer Jlist (besagter Jlist ) verknüpfen.
Der User soll die Patienten Anklicken, dadurch wird die .pat geladen und die Daten vom Patienten angezeigt.

Hab dafür diesen Listener eingebaut:

Java:
      //MOUSE LISTENER
      
      MouseListener mouseListener = new MouseAdapter() {
         //Checken ob Patient doppelt geklickt wurde.
    	  public void mouseClicked(MouseEvent mouseEvent) {
            JList list = (JList) mouseEvent.getSource();
            if (mouseEvent.getClickCount() == 2) {
              int index = list.locationToIndex(mouseEvent.getPoint());
              if (index >= 0) {
                Object patient = list.getModel().getElementAt(index);
                System.out.println("Doppelklick auf: " + patient);
              }
              }
          }
      };
      //Listener zu Liste hinzufuegen
      list.addMouseListener(mouseListener);
	}

Momentan sind in der Jlist nur Strings gespeichert die vom ActionListener dann ausgegeben werden.
(Wie) Kann ich in der JList ein Objekt speichern und nur dessen Namen anzeigen? Bzw ist das so überhaupt "sauber geproggt" ?



gruß
Kaji
 
Bin mir nicht sicher, ob ich dich richtig verstanden habe.

Du wirst wohl Objekte bauen müssen, die zur Datenhaltung bzw. -verwaltung dienen.
POJOs sind Datenobjekte, die Informationen zu Objekten sammeln und speichern.

Du wirst hier also eine kleine Vererbungshirarchie aufbauen müssen...
Bspw. Person -> Patient

...und die jeweils relevanten Daten in den Objekten verwalten und speichern müssen.
Hier sind deine Stichworte: get- und set-Methoden

Die Objekte kannst du erzeugen, verändern, auslesen und speichern und so auch selektiv die gewünschten Daten auf deiner Oberfläche anzeigen.
 

Zurück
Oben