【发布时间】:2017-07-22 19:30:03
【问题描述】:
我有一个显示文件列表(带有图标)的 JList。我正在使用DefaultListCellRenderer 来完成此操作。
但是,我只希望它显示 3 列,但它会显示更多。我不希望用户必须水平滚动,只能垂直滚动。我怎样才能做到这一点?我对 Java 还很陌生。
这是我目前的代码:
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.io.File;
import java.io.FileFilter;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileSystemView;
public class StartMeUpBaby extends JFrame {
public StartMeUpBaby() {
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("TESTING");
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new GridBagLayout());
File f = new File(System.getProperty("user.home"));
JList<File> results = new JList<File>(f.listFiles(new FileFilter() {
public boolean accept(File file) {
String name = file.getName().toLowerCase();
return name.length() < 20;
}
}));
results.setCellRenderer(new DefaultListCellRenderer() {
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Component component = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
JLabel label = (JLabel)component;
File file = (File)value;
label.setText(file.getName());
label.setIcon(FileSystemView.getFileSystemView().getSystemIcon(file));
label.setBorder(new EmptyBorder(3, 3, 3, 3));
return label;
}
});
results.setLayoutOrientation(JList.HORIZONTAL_WRAP);
JScrollPane scrollPane = new JScrollPane(results, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setPreferredSize(new Dimension(408, 100));
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 3;
gbc.gridheight = 2;
gbc.weightx = 100;
gbc.weighty = 100;
gbc.anchor = GridBagConstraints.WEST;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(5, 5, 5, 5);
mainPanel.add(scrollPane, gbc);
this.add(mainPanel);
this.pack();
this.setVisible(true);
}
public static void main(String[] args) {
new StartMeUpBaby();
}
}
我将首选大小设置为仅显示 3 列,但是如果您调整窗口(使其更大),您可以看到列继续显示。
【问题讨论】:
标签: java file jlist horizontal-scrolling