【问题标题】:How to show horizontal AND vertical scrollbar for a JList?如何显示 JList 的水平和垂直滚动条?
【发布时间】:2015-10-17 12:36:20
【问题描述】:

今天我在玩JList的,然后我发现了一个问题。 我知道我的领域没有好名字,但正如我所说,我只是在玩。

我想为我的 JList 创建一个水平和垂直的 JScrollPane。其实是可以的,但是还是有问题。

我总是必须向右滚动才能看到垂直滚动窗格:

我的代码:

   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);

有什么办法可以解决这个问题,以便我始终可以看到两个滚动条?

【问题讨论】:

    标签: java swing jlist scrollpane


    【解决方案1】:

    只需使用一个 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);
             }
          });
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-02-25
      • 2020-03-08
      • 2013-01-16
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 2022-06-13
      • 2014-01-09
      • 1970-01-01
      相关资源
      最近更新 更多