Problem mit JList und JScrollPane

Javak

Grünschnabel
Hallo,

Ich bin dabei momentan ein kleines Programm am programieren, doch dabei macht mir JScrollPane Probleme. Habe schon gegooglet und auch hier das Tutorial zur JScrollPane gelesen. Doch zu einer Lösung kam ich nicht, irgendwie habe ich da einen Denkfehler drin...

Also mein Problem:

Ich habe einen JDialog zu dem ich ein JPanel hinzufüge, welches ein JLabel und ein JButton enthält, was soweit auch funktioniert.
Dann soll jetzt ein JScrollPane hinzugefügt werden und darin eine JList die halt unterscheidlich lang sein wird --> Deswegen in einem JScrollPane. Doch irgendwie scrollt die JScrollPane nicht obwohl beide Scrollbars da sind und die JList viel größer als die JScrollPane ist. Zudem wird zwar die Jlist erstellt doch sie wir erst nach anklicken der einzelnen Einträge ganz sichtbar. Also ScrollPane bei start leer und erst wenn ich reinklicke in die ScrollPane erscheinen die Zeilen der JList.

Hier der Code dazu:
Java:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*; 
import javax.swing.*;
import javax.swing.event.*;
 
public class JScrollPane
{
  // main-Methode
  public static void main(String[] args)
  {
    
    String testString[] = {"TestReihe123", "TestReihe123456", "TestReihe123456", 
    "TestReihe123456", "TestReihe123456", "TestReihe1", "TestReihe5"};
    
    JDialog ChooseDialog = new JDialog();         
    ChooseDialog.setTitle("JDialog");
    ChooseDialog.setSize(400,400);
    ChooseDialog.setModal(true);    
    ChooseDialog.setResizable(false);
    ChooseDialog.setLayout(null);
        
    JPanel panel = new JPanel();          
    panel.setBounds(5,5,370,350);
    panel.setLayout(null);
    ChooseDialog.add(panel);  
    
    JLabel JLSchriftzug = new JLabel();
    JLSchriftzug.setBounds(10,0,100,25);
    JLSchriftzug.setText("TestLabel");
    JLSchriftzug.setFont(new Font("Arial", Font.PLAIN, 14));         
    panel.add(JLSchriftzug);
    
    JScrollPane scrollPane = new JScrollPane ();    
    scrollPane.setBounds(10,25,320,270);  
    scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        
    JList Auswahl = new JList(testString);
    Auswahl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    Auswahl.setBounds(10,10,550,550); 
    scrollPane.add(Auswahl);
    
    panel.add(scrollPane);
    
    JButton JBLaden = new JButton();
    JBLaden.setText("...");
    JBLaden.setBounds(10,325,100,25);
    panel.add(JBLaden);
    
    ChooseDialog.setVisible(true);
    
  }
}

Ich hoffe hier habt eine Lösung oder eine Idee wonach ich suchen muss.

Wenn sich jemand mit dem JavaEditor auskennt hätte ich da auch eine Frage: Wenn ich ein Programm starte mit drücken auf Play und dieses dann irgendwann schließe via Button X oben rechts vom Frame, wird normalerweise der JavaEditor auch wieder zurückgesetzt, also vom runden roten Kreis (stopp Button) auf Play Button (start Button). Doch bei mir funktioniert das irgendwie nicht mehr. Der JavaEditor bleibt im gestarteten Modus bzw. das Frame auch, denn ich muss erst über den TaskManager die java.exe schließen bevor ich über den JavaEditor das Programm wieder starten kann. Jemand eine Idee wieso das nichtmehr geht?! Neuinstalation von JRE und JavaEditor half nicht...

LG Philipp

PS: Hoffe bin im richtigen Unterforum gelandet...
 
Zuletzt bearbeitet:
Tausch mal die Reihenfolge von "scrollPane" und "Auswahl" und verwende "Auswahl" im Konstruktor von "scrollPane" anstatt der add-Methode.

Ansonsten genereller Tipp: Variablen in Java werden normalerweise kleingeschrieben und der Klassenname ist ungünstig gewählt...
 
Danke HonniCilest :)
Die Lösung war "Auswahl" über den Konstruktor von "scrollPane" zu adden.
Das sowas über den Konstruktor geht wusste ich noch gar nicht...

Zu der Klasse: Das ist nur eine Testdatei damit ich damit einfacher umgehen kann... Der Code wird noch in eine andere Klasse eingebaut.

Hier die Lösung/Code:

Java:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*; 
import javax.swing.*;
import javax.swing.event.*;
 
public class JScrollPanel
{
  public static void main(String[] args)
  {        
    String testString[] = new String[50];
    
    for (int i = 0; i< testString.length ;i++ ) {
      testString[i] = "TestLangeReihe TestLangeReihe TestLangeReiheTest LangeReihe TestLangeReihe " + Integer.toString(i);
    } // end of for
    
    JDialog ChooseDialog = new JDialog();         
    ChooseDialog.setTitle("JDialog");
    ChooseDialog.setSize(400,400);
    ChooseDialog.setModal(true);    
    ChooseDialog.setResizable(false);
    ChooseDialog.setLayout(null);
    
    JPanel panel = new JPanel();          
    panel.setBounds(5,5,370,350);
    panel.setLayout(null);
    ChooseDialog.add(panel);  
    
    JLabel JLSchriftzug = new JLabel();
    JLSchriftzug.setBounds(10,0,100,25);
    JLSchriftzug.setText("TestLabel");
    JLSchriftzug.setFont(new Font("Arial", Font.PLAIN, 14));         
    panel.add(JLSchriftzug);
    
    
    JList Auswahl = new JList(testString);
    Auswahl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  
    JScrollPane scrollPane = new JScrollPane (Auswahl);
    scrollPane.setBounds(10,25,320,270);  
    scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);      scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);        
        
    panel.add(scrollPane); 
    
    JButton JBLaden = new JButton();
    JBLaden.setText("...");
    JBLaden.setBounds(10,325,100,25);
    panel.add(JBLaden);
    
    ChooseDialog.setVisible(true);
        
  }
}
 
Das sowas über den Konstruktor geht wusste ich noch gar nicht...

Du kannst deinen Code noch mit weiteren Kontruktoren verkürzen...
z.B.:
Text bei JLabels:
http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/JLabel.html#JLabel(java.lang.String)
ScrollBarPolicies & Inhalt der JScrollPane:
http://docs.oracle.com/javase/6/doc...tml#JScrollPane(java.awt.Component, int, int)
Layout von JPanel:
http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/JPanel.html#JPanel(java.awt.LayoutManager)
 
Zuletzt bearbeitet:
Danke für die Links...spart echt einiges.

Zusatz: Der JavaEditor meint ich wüde mit der Übergabe des Stings an die JList eine "unchecked or unsafe operation" benutzen. Ist das was trägisches?
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück