2015-10-17 3 views
1

Сегодня я играл с JList, и тогда я нашел проблему. Я знаю, что у моих полей нет хороших имен, но, как я уже сказал, я просто играл.Как показать горизонтальную и вертикальную полосу прокрутки для JList?

Я хотел создать горизонтальную и вертикальную JScrollPane для моего JList. На самом деле, это работает, но проблема все еще остается.

Я всегда должен прокрутить вправо, чтобы увидеть вертикальный ScrollPane: 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

Смежные вопросы