簡體   English   中英

在Swing中將ScrollBar添加到JList

[英]Adding a ScrollBar to JList in Swing

我目前正在使用Java處理基於Swing的桌面應用程序。 我在下面遇到了這個問題。

我一直在嘗試將滾動條添加到ListArea(JList類型)中,但是我無法做到,盡管我打算這樣做。 這是代碼片段。我正在MainFrame擴展JFrame中編寫此代碼。 任何幫助,將不勝感激。 謝謝...

super(title)
Jpanel panel = new Panel()
panel(add)
panel.setlayout(null)

final JList<String> listArea = new JList<String>(labels);
    listArea.setBounds(50, 180, 700, 300);
    listArea.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    listArea.setFont(new Font("Serif", Font.ITALIC, 14));
    listArea.setVisibleRowCount(-1);
    JScrollPane listScroller = new JScrollPane();
    listScroller.setViewportView(listArea);
    listArea.setLayoutOrientation(JList.VERTICAL);
    panel.add(listArea); 
    panel.add(listScroller);

擺脫panel.add(listArea); ,它將從JScrollPane刪除listArea

避免使用null布局,像素完美布局是現代ui設計中的一種幻覺。 有太多因素會影響組件的單個大小,您無法控制。 Swing旨在與布局經理為核心一起工作,舍棄這些問題不會導致問題和問題的終結,您將花費越來越多的時間來進行糾正。

JScrollPane (和JViewport )有自己的布局例程,您無需控制。 一旦將JList的大小傳遞給JScrollPane它的設置將無效。

請參閱為什么在SWING中使用空布局會讓人皺眉? 更多細節

我不知道你期望listArea.setVisibleRowCount(-1); 這樣做,但我建議您不要這樣做。

更新了示例

一個列表

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestList {

    public static void main(String[] args) {
        new TestList();
    }

    public TestList() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JPanel panel = new JPanel(new BorderLayout());

                List<String> labels = new ArrayList<>(25);
                for (int index = 0; index < 100; index++) {
                    labels.add("Item " + index);
                }

                final JList<String> listArea = new JList<String>(labels.toArray(new String[labels.size()]));
                listArea.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                listArea.setFont(new Font("Serif", Font.ITALIC, 14));
                JScrollPane listScroller = new JScrollPane();
                listScroller.setViewportView(listArea);
                listArea.setLayoutOrientation(JList.VERTICAL);
                panel.add(listScroller);

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(panel);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM