2015-10-17 75 views
1

今天我正在玩JList的,然後我發現了一個問題。 我知道我的田野沒有好名字,但正如我所說,我只是在玩耍。如何顯示JList的水平和垂直滾動條?

我想爲我的JList創建一個水平和垂直的JScrollPane。實際上,它可以工作,但仍然存在問題。

我總是要滾動到右側才能看到垂直滾動窗格: my ScrollPanes my ScrollPanes

我的代碼:

final JList list = new JList(GUI.strings.toArray()); 

    JScrollPane scrollPane = new JScrollPane(list); 
    JScrollPane scrollPanex = new JScrollPane(scrollPane); 

    scrollPanex.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
    scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 

    getContentPane().add(scrollPanex, BorderLayout.CENTER); 

有沒有一種辦法可以解決這個,所以我可以隨時看到兩個滾動條?

回答

3

只需使用一個JScrollPane,然後設置單個JScrollPane的兩個滾動條策略。

final JList list = new JList(GUI.strings.toArray()); 
JScrollPane scrollPane = new JScrollPane(list); 

scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 

getContentPane().add(scrollPane, BorderLayout.CENTER); 

例如,

import java.awt.Dimension; 
import java.util.Random; 

import javax.swing.DefaultListModel; 
import javax.swing.JList; 
import javax.swing.JOptionPane; 
import javax.swing.JScrollPane; 
import javax.swing.JViewport; 
import javax.swing.SwingUtilities; 

public class ScrollPaneFun { 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      Random rand = new Random(); 
      DefaultListModel<String> lModel = new DefaultListModel<>(); 
      JList<String> myList = new JList<>(lModel); 
      myList.setVisibleRowCount(20); 

      for (int i = 0; i < 50; i++) { 
       StringBuilder sb = new StringBuilder(); 
       sb.append(String.valueOf(i) + ": "); 
       for (int j = 0; j < 50; j++) { 
        for (int k = 0; k < 3; k++) { 
        char c = (char) ('a' + rand.nextInt('z' - 'a' + 1)); 
        sb.append(c); 
        } 
        sb.append(' '); 
       } 
       lModel.addElement(sb.toString()); 
      } 

      JScrollPane scrollPane = new JScrollPane(myList); 
      scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
      scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
      JViewport viewport = scrollPane.getViewport(); 
      int w = 400; 
      int h = viewport.getPreferredSize().height; 
      Dimension preferredSize = new Dimension(w, h); 
      viewport.setPreferredSize(preferredSize); 
      JOptionPane.showMessageDialog(null, scrollPane); 
     } 
     }); 
    } 
} 
+0

謝謝,它的工作:) – Freakey