JList mit Events Steuern ?

Status
Nicht offen für weitere Antworten.

vrcat

Mitglied
Hallo ich hoffe ihr könnt mir helfen. Mein Problem ist das ich eine JList gerne mittels Button hoch- und runterscrollen möchte. Das mit den Buttons und Events bekomme ich ja noch hin und dass ich bei der JList setAutoScroll flase setze, damit ich keinen Scrollbalken habe.
Wie kann ich aber nun der JListe sagen welche Elemente sichtbar sein müssen? (selber scrollen)
 

Sky

Top Contributor
ohne es getestet zu haben: in der API findest Du die Methode JList#ensureIndexIsVisible
 

alipecki

Mitglied
Hallo vrcat,

ich habe da auch nicht so ne grosse Ahnung, doch schau mal im thread glasspane,denke dies könnte ein Tipp für dich sein,

gruss Alex
 

vrcat

Mitglied
Hmm das scheint nicht zu Funktionieren ich Poste mal mein Quellcode dan wird das Problem glaube verständlicher.

Code:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;

public class ListExample extends JFrame implements ActionListener {

	private JList list = null;
	
	public ListExample(){
		setTitle("ListExample");
		setSize(150,250);
				
		String[] 	entries = { "Entry 1", "Entry 2", "Entry 3",
								"Entry 4", "Entry 5", "Entry 6",
								"Entry 7", "Entry 8", "Entry 9",
								"Entry10", "Entry11", "Entry12",
								"Entry13", "Entry14", "Entry15",
								"Entry16", "Entry17", "Entry18",
								"Entry19", "Entry20", "Entry21",
								"Entry22", "Entry23", "Entry24"};
		
		list = new JList(entries);		
		list.setLayout(new BorderLayout());
		JPanel p;
		list.add(p = new JPanel());
		p.setOpaque(false);
		p.setLayout(new BorderLayout());
		JButton btn1,btn2;
		p.add(btn1 = new JButton(">>"),BorderLayout.NORTH);
		p.add(btn2 = new JButton("<<"),BorderLayout.SOUTH);
		btn1.addActionListener(this);
		btn2.addActionListener(this);
		
		getContentPane().add(list);
		setVisible(true);
	}
	
	public void actionPerformed(ActionEvent arg0) {
		list.ensureIndexIsVisible(14);		
	}
	
	public static void main(String[] args){
		new ListExample();
	}

}

Hoffe nun wird es verständlicher.
 

vrcat

Mitglied
Nein nicht ganz ich will eigentlich nur die Einträge in der JList hoch und runter scrollen so wie man das mit dem Scrollbar machen kann nur möchte (muss) ich dafür buttons nehmen die oben und untern an der Listbat zu sehen sind.
 

mic_checker

Top Contributor
Ach, die Einträge an sich - nicht die Markierung ?

Sprich du hast Entry1 markiert, drückst auf den ">>" Button und nun steht Entry2 an Position 1 und Entry1 an der Position 2 ?

Dazu müsstest du erst kontrollieren ob du nicht schon am Ende bist (weil du dann ja nicht mehr "verschieben" kannst) - also den Index des ausgewählten Elements holen.

Aber vielleicht kannst du auch erstmal antworten ob es das ist was du willst bevor ich hier weiter ***** poste ;)
 

alipecki

Mitglied
Salute,

also mit

Code:
if ("runter".equals(arg0.getActionCommand()))
{
    list.setSelectedIndex(list.getSelectedIndex()+1);
}
else if("rauf".equals(arg0.getActionCommand()))
{
    list.setSelectedIndex(list.getSelectedIndex()-1); 
}

kannst Du zwar rauf und runter bei dein einzelnen Elementen, doch habe nicht herausgefunden wie du den focus veränderst, damit wenn du ausserhalb des sichtbaren Bereichs den sichtbarenbereich verändern kannst.

Sorry, denke wirst dies ja auch schon wissen was ich dir geschrieben habe...

gruss Alex
 

mic_checker

Top Contributor
du musst ja sowieso vorher kontrollieren ob du schon am Anfang / Ende bist, da du sonst versuchst einen nicht vorhandenen Index zu selektieren.

außerdem glaube ich - dass er nicht das machen wollte - da das in dem text von sun oben drüber beschrieben steht...
 

vrcat

Mitglied
Hmm kann garnicht glauben was sich alles aus so einer Fagestellung ergben kann :D .

Ich versuchs nochmal:

1. Also am anfang ist die Liste mit 10 Einträgen
2. Mann kann aber nur 5 Einträge sehen da die Liste nicht so gross ist um alle zu sehen
bsp.
In der Liste Sichtbar:
Entry1
Entry2
Entry3
Entry4
Entry5

3. Nun will kucken was noch so in der Liste ist also drücke ich unten auf den Button "<<"
4. Nun soll sich die Anzeige der Elemente ändern
bsp.
In der Liste Sichtbare Elemente nach dem Drücken:
Entry2
Entry3
Entry4
Entry5
Entry6

5. und so weiter halt wenn mann auf ">>" drückt soll es dann andersrum funktionieren.


Hoffe diesmal habe ich mich besser ausgedrückt.
 

Sky

Top Contributor
Das Verhalten, welches Du bauen willst entspricht also einer normalen JScrollBar!?
Warum arbeitest Du nicht damit sondern mit deiner Button-Lösung???
 

mic_checker

Top Contributor
Probier mal den Code vom Sun Tut mit folgendem Listener:

Code:
    class UpDownListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            int moveMe = list.getFirstVisibleIndex();

            if (e.getActionCommand().equals(upString)) {
                if (moveMe != 0) {  
                	list.ensureIndexIsVisible(moveMe-1);  
                }
            } else {
					int newPos = moveMe + list.getVisibleRowCount();
               if (newPos <= listModel.getSize()-1) {
						list.ensureIndexIsVisible(newPos);
					}
            }
        }
    }
 

vrcat

Mitglied
Ja genau, also das liegt darin begrundet das es später nicht soviel Platz auf der Oberfläche gibt. Durch die Button's sieht es aber recht ordentlich aus nun muss es halt nur noch Funktionieren.
(PDA-Auflösung)

@mic_checker: Kannst mir mal den Link von diesem Tutorial geben ?
 

Sky

Top Contributor
Ansonsten geht es auch, wenn Du das ganze in ein JScrollpane packst und die Methode scrollRectToVisble verwendest:

Code:
class ListExample extends JFrame implements ActionListener {

  private JList list = null;
  private int pos = 0;

  public ListExample() {
    setTitle( "ListExample" );
    String[] entries = {"Entry 1", "Entry 2", "Entry 3",
        "Entry 4", "Entry 5", "Entry 6",
        "Entry 7", "Entry 8", "Entry 9",
        "Entry10", "Entry11", "Entry12",
        "Entry13", "Entry14", "Entry15",
        "Entry16", "Entry17", "Entry18",
        "Entry19", "Entry20", "Entry21",
        "Entry22", "Entry23", "Entry24"};

    list = new JList( entries );
    JPanel p= new JPanel();
    list.setVisibleRowCount(5);
    p.setLayout( new BorderLayout() );
    JButton btn1 = new JButton( ">>" );
    JButton btn2 = new JButton( "<<" );
    p.add( btn1, BorderLayout.NORTH );
    p.add( btn2, BorderLayout.SOUTH );
    p.add( new JScrollPane( list, JScrollPane.VERTICAL_SCROLLBAR_NEVER,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ), BorderLayout.CENTER );
    btn1.addActionListener( this );
    btn2.addActionListener( this );
    getContentPane().add(p);
    setVisible( true );
    pack();
  }

  public void actionPerformed( ActionEvent arg0 ) {
    int min = 0;
    int max = list.getModel().getSize()-list.getVisibleRowCount();

    if ( ">>".equals(arg0.getActionCommand())) {
      pos--;
    } else {
      pos++;
    }

    if ( pos < min) pos = min;
    if ( pos >= max) pos = max;

    list.scrollRectToVisible(list.getCellBounds(pos,pos+4));
  }

  public static void main( String[] args ) {
    new ListExample();
  }

}
 

vrcat

Mitglied
Hallo sky80 ja das geht auch habs leider zu spät gesehen habe mir nun ne eigene Klasse ExList geschrieben mit der das soweit alles geht was ich brauche.

Code:
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JList;


public class ExList extends JList implements ActionListener {

	private int					aktIndex    =    0;
	private JButton				btn1,btn2   = null;
	private ArrayList		 	elementList	= null;
	private DefaultListModel 	model 		= null;

	public ExList(){
		model 		= new DefaultListModel();
		elementList = new ArrayList();
		setModel(model);
		setLayout(new BorderLayout());
		add(btn1 = new JButton(">>"),BorderLayout.NORTH);
		add(btn2 = new JButton("<<"),BorderLayout.SOUTH);
		btn1.setOpaque(false);
		btn1.setVisible(false);
		btn1.setFocusable(false);
		btn1.addActionListener(this);
		btn1.setBorder(BorderFactory.createEmptyBorder());
		btn2.setOpaque(false);
		btn2.setVisible(false);
		btn2.setFocusable(false);
		btn2.addActionListener(this);
		btn2.setBorder(BorderFactory.createEmptyBorder());		
	}
	
	public void add(String s){
		elementList.add(elementList.size(),s);	
		updateModel();
	}

	public void actionPerformed(ActionEvent e) {
		if (e.getSource()==btn1) 		aktIndex--;
		else if (e.getSource()==btn2) 	aktIndex++; 
		updateModel();	
	}
	
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		if (getHeight()>getCellBounds(0,0).height*model.size())
			btn2.setVisible(false); else btn2.setVisible(true);		
	}
	
	private void updateModel(){
		model.removeAllElements();
		for (int z=0, i=aktIndex;i<elementList.size();i++, z++)
			model.add(z,elementList.get(i));
		if (aktIndex>0) btn1.setVisible(true); else btn1.setVisible(false);
	}	
}

Also nochmal danke an alle für eure Hilfe.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Jlist füllen AWT, Swing, JavaFX & SWT 4
H JList.setEnabled(false) - Text soll nicht grau sein AWT, Swing, JavaFX & SWT 2
BananenBrötchen Swing Arraylist in jList anzeigen AWT, Swing, JavaFX & SWT 6
J Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
A Swing JList zu JTree AWT, Swing, JavaFX & SWT 11
G Eingabe in JTextField in Array speichern und in JList ausgeben AWT, Swing, JavaFX & SWT 7
cezary Choice, JComboBox oder JList AWT, Swing, JavaFX & SWT 5
J JList scrollen AWT, Swing, JavaFX & SWT 3
Neumi5694 Swing JList - Klick abfangen AWT, Swing, JavaFX & SWT 3
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
M Swing JList Auswahl-GUI-Konzept AWT, Swing, JavaFX & SWT 9
C JList: Bestimmte Objekte ausschließen AWT, Swing, JavaFX & SWT 1
F JList aktualisiert nicht AWT, Swing, JavaFX & SWT 24
F JList auffüllen aus Array von Instanzen AWT, Swing, JavaFX & SWT 4
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
F JList bei Windowbuilder AWT, Swing, JavaFX & SWT 8
F JList zeigt keine Einträge mehr AWT, Swing, JavaFX & SWT 1
P JList erstellen AWT, Swing, JavaFX & SWT 4
G DefaultListModel für JList AWT, Swing, JavaFX & SWT 2
P Einer JList mit eigenem ListModel einen Eintrag hinzfügen AWT, Swing, JavaFX & SWT 5
P Übergeben von ListModel an nichtparametrisierte JList AWT, Swing, JavaFX & SWT 8
M Ein Element in mehreren JList selektieren AWT, Swing, JavaFX & SWT 5
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
Nabbit Über JList kein JPopupMenu AWT, Swing, JavaFX & SWT 2
O Swing JList beim Klicken in der GUI erstellen AWT, Swing, JavaFX & SWT 6
C Swing JList zeigt keine neuen Einträge an AWT, Swing, JavaFX & SWT 1
B Swing Auf JList-Elemente aus einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 1
T Generische Klasse in JList über DefaultListModel AWT, Swing, JavaFX & SWT 1
T Swing WindowBuilder: JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
C Button Text in JList neue Zeile AWT, Swing, JavaFX & SWT 6
C Hilfe bei JSpinner und JList AWT, Swing, JavaFX & SWT 1
D Swing ArrayList in Jlist/ List oder Array in JList/List AWT, Swing, JavaFX & SWT 5
S JList ist leer, aber DefaultListModel hat die Daten? AWT, Swing, JavaFX & SWT 9
M JList wird angezeigt, JTable (DefaultTableModel) nicht AWT, Swing, JavaFX & SWT 7
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
D Swing Jlist Größe während der Laufzeit verändern. AWT, Swing, JavaFX & SWT 11
Q JList Update Problem AWT, Swing, JavaFX & SWT 1
W Sichtbarer Bereich JScrollPane vs. JList AWT, Swing, JavaFX & SWT 3
N AWT Markierte Zeile jList aus mySQL DB löschen AWT, Swing, JavaFX & SWT 2
S JList repaint AWT, Swing, JavaFX & SWT 1
F Swing JTextField in JList (Funktion beibehalten) AWT, Swing, JavaFX & SWT 2
H JList AWT, Swing, JavaFX & SWT 5
B Swing Bild von Webseite herunterladen, diese dann in JList anzeigen. AWT, Swing, JavaFX & SWT 1
B Swing Dynamische JList mit Bildern AWT, Swing, JavaFX & SWT 4
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
S JList Index finden AWT, Swing, JavaFX & SWT 6
3 Swing JList-Inhalt als verschlüsselte Datei schreiben und lesen AWT, Swing, JavaFX & SWT 1
N JComponenten in JList oder doch anders? AWT, Swing, JavaFX & SWT 0
S Swing JList, ArrayList + DefaultModel AWT, Swing, JavaFX & SWT 5
B Tabelleneinträge in JList anzeigen AWT, Swing, JavaFX & SWT 5
P JList/JScroolPane Text verschieben und text wrappen AWT, Swing, JavaFX & SWT 3
D Swing JList keine Selektionsänderung bei "dragged-Maus" AWT, Swing, JavaFX & SWT 4
M JList Model filtern AWT, Swing, JavaFX & SWT 4
K Swing JList - Element richtig hinzufügen AWT, Swing, JavaFX & SWT 4
T Swing Elemente der JList überlappend darstellen AWT, Swing, JavaFX & SWT 5
P Swing JList mit Objekten - Name anzeigen AWT, Swing, JavaFX & SWT 5
Ollek JList - neuer Eintrag in ArrayList dadurch keine Anzeige der Objekte AWT, Swing, JavaFX & SWT 18
K Mehrfachselektierungen in einer JList AWT, Swing, JavaFX & SWT 6
L Swing Component alignment innerhalb einer JList AWT, Swing, JavaFX & SWT 3
M Swing JList Listener AWT, Swing, JavaFX & SWT 20
M Accelerator zu JMenuItem des JPopupMenu einer JList AWT, Swing, JavaFX & SWT 2
S Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 3
M Element aus JList eines JFileChooser entfernen AWT, Swing, JavaFX & SWT 3
E selektierter Datensatz in JList als String Datentyp AWT, Swing, JavaFX & SWT 23
E selektiertes Element aus JList zurückgeben AWT, Swing, JavaFX & SWT 7
E JList /DefaultListModel mit Datenbank verbinden AWT, Swing, JavaFX & SWT 10
L SQL & Jtable o. JList AWT, Swing, JavaFX & SWT 5
K Swing JList und veränderte CellRenderer AWT, Swing, JavaFX & SWT 8
B JList + ListCellRenderer AWT, Swing, JavaFX & SWT 5
B JList -> Disabled AWT, Swing, JavaFX & SWT 6
J JList, Anzeige aktualisieren AWT, Swing, JavaFX & SWT 7
I Jlist isselectionEmpty AWT, Swing, JavaFX & SWT 4
I Jlist dynamisch aus Datenbank füllen AWT, Swing, JavaFX & SWT 14
R Swing unbegrenzte Anzahl vonEinträgen in JList AWT, Swing, JavaFX & SWT 2
MiMa Dateien aus Ordner in einer JList Ausgeben AWT, Swing, JavaFX & SWT 32
P Elemente einer JList ausgeben AWT, Swing, JavaFX & SWT 11
M JList mit 2-zeiligen Objekten füllen AWT, Swing, JavaFX & SWT 7
S JList mit Einträgen versehen schlägt fehl AWT, Swing, JavaFX & SWT 4
F Swing ArrayList in JList anzeigen und Objekte auswählen AWT, Swing, JavaFX & SWT 2
B JList zeigt Elemente nicht an AWT, Swing, JavaFX & SWT 3
S Fragen zu JList AWT, Swing, JavaFX & SWT 3
B Aktualisierung einer JList AWT, Swing, JavaFX & SWT 5
W JList valueChanges weiterleiten? AWT, Swing, JavaFX & SWT 14
D JButton-Click in JList mit Panels (auf dem der Button ist) AWT, Swing, JavaFX & SWT 6
E Jlist nur mit Klasse? AWT, Swing, JavaFX & SWT 5
D Swing JList <-> AdapterModel <-> Model AWT, Swing, JavaFX & SWT 4
1 JList - Elemente mit rechter Maustaste wählen AWT, Swing, JavaFX & SWT 6
M JList mit DefaultListModel und listener AWT, Swing, JavaFX & SWT 4
B JList nach dem Rendern sortieren AWT, Swing, JavaFX & SWT 3
T Wie ist das "Lookup-Verhalten" von JList, JCombobox änderbar? AWT, Swing, JavaFX & SWT 4
D JList items voneinander trennen AWT, Swing, JavaFX & SWT 10
E Keine Ausgabe von JList bei drücken von Button auf die Konsole AWT, Swing, JavaFX & SWT 7
M gleiches Element in JList mehrmals hintereinander auswählen AWT, Swing, JavaFX & SWT 6
T JList und Objekte AWT, Swing, JavaFX & SWT 7
M Swing JList Item in andere JList während Ausführung AWT, Swing, JavaFX & SWT 4
V JList filtern AWT, Swing, JavaFX & SWT 6
GianaSisters jList nur einmal ein Element anklicken AWT, Swing, JavaFX & SWT 3
TheWhiteShadow JList-Inhalt nach Änderung weg AWT, Swing, JavaFX & SWT 3
T JList ruft getElementAt nicht mehr auf AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben