2016-04-22 13 views
0

ich nächsten Teil des Codes habe:Java JScrollPane manchmal nicht erfolgreich Größe verändert

final JList<String> list = new JList<String>(strings); 
    list.setLayoutOrientation(JList.VERTICAL); 
    list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 

    /* Create scroll pane instance */ 
    JScrollPane scroll = new JScrollPane(list) { 
     @Override 
     public Dimension getPreferredSize() 
     { 
      BookFrame frame = BookFrame.instance(); 

      Container parent = getParent(); 

      return new Dimension(frame.getWidth(), parent.getHeight() - parent.getComponent(parent.getComponentCount() - 1).getHeight() - 14); 
     } 
    }; 

    /* Create button instance */ 
    JButton button = new JButton("Add Directory"); 

    /* Add new panel */ 
    JPanel panel = new JPanel(); 
    panel.add(scroll); 
    panel.add(button); 

Dieser Code wird ausgeführt, wenn Programm startet und manchmal Taste Höhe ein normaler Wert ist (ex. 15), aber manchmal ist es 0. Ich denke, die Problem ist mit JScrollPane-Instanz - es wurde vor JButton-Instanz erstellt - aber ich kann nicht synchronisieren. Ich habe auch versucht, JButton button = ... vor JScrollPane scroll = ... hinzuzufügen, aber es funktioniert auch nicht.

Ich bin Newby in Java also sag mir bitte, was ich falsch mache.

Antwort

2

Ich sehe keinen Grund, dass Sie die getPreferredSize() -Methode überschreiben müssen. Ich schätze, das ist das Problem.

JScrollPane scroll = new JScrollPane(list) 

Ich weiß nicht, was „Liste“ ist, aber vorausgesetzt, Sie verwenden ein JList dann können Sie verwenden:

list.setVisibleRowCount(...); 

die Anzahl der Zeilen für die Größe der Liste anzuzeigen. Die Bildlaufleiste hat dann diese Größe und Bildlaufleisten werden bei Bedarf angezeigt.

+0

Aber wie kann ich meine 'JScrollPane' dynamisch verändern? Wie kann ich das mit 'setVisibleRowCount (...)' machen? – ventaquil

+0

@ventaquil, Jede Komponente, die der MITTE eines JFrames hinzugefügt wird, wird dynamisch skaliert, wenn die Größe des Rahmens geändert wird. Der setVisibleRowCount() ist ein Vorschlag für die Verwendung der pack() -Methode. Lesen Sie den Abschnitt aus dem Swing-Lernprogramm unter [Verwendung von BorderLayout] (http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html), um weitere Informationen und Arbeitsbeispiele zu erhalten. Laden Sie die – camickr

+0

in Ordnung - Problem ist mit 'JPanel'. Wenn ich Scroll um 'getContentPane() addiere, addiere (..)' Methode 'setVisibleRowCount (..)' funktioniert gut. Vielen Dank :) – ventaquil

Verwandte Themen