[英]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.