[英]Java Swing JList, can't set minimum width
尝试简单地创建一个具有指定可见行数但最小宽度的JList。 似乎“ setMinimumSize()”什么也不做。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class UserInterface
{
final static private int HEIGHT = 400;
final static private int WIDTH = 650;
public static void main(String[] args) {
JPanel content = new JPanel();
String[] entries = { "Entry 1", "Entry 2", "Entry 3",
"Entry 4", "Entry 5", "Entry 6" };
DefaultListModel sampleModel = new DefaultListModel();
for(int i=0; i<entries.length; i++)
sampleModel.addElement(entries[i]);
JList sampleList = new JList(sampleModel);
sampleList.setMinimumSize(new Dimension(1000,1000));
sampleList.setMaximumSize(new Dimension(1000,1000));
content.add(sampleList);
//main window frame
JFrame window = new JFrame("NAD Assignment 1");
window.setSize(WIDTH, HEIGHT);
window.setContentPane(content);
window.setLocationRelativeTo(null);
window.setVisible(true);
window.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
setPreferredSize()似乎可以工作,但是它会覆盖我在setVisibleRowCount()中设置的内容:
public static void main(String[] args) {
JPanel content = new JPanel();
String[] entries = { "Entry 1", "Entry 2", "Entry 3",
"Entry 4", "Entry 5", "Entry 6" };
DefaultListModel sampleModel = new DefaultListModel();
for(int i=0; i<entries.length; i++)
sampleModel.addElement(entries[i]);
JList sampleList = new JList(sampleModel);
sampleList.setPreferredSize(new Dimension(200,10));
sampleList.setVisibleRowCount(8);
content.add(sampleList);
//main window frame
JFrame window = new JFrame("NAD Assignment 1");
window.setSize(WIDTH, HEIGHT);
window.setContentPane(content);
window.setLocationRelativeTo(null);
window.setVisible(true);
window.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
如何在JList上设置最小宽度并使用setVisibleRowCount指定高度? 谢谢。
您的代码有几处错误。
始终使用SwingUtilities调用Swing应用程序。 这样可以确保在事件调度线程(EDT)上创建并执行Swing组件。
将数据创建与GUI创建分开。 这使您一次可以专注于代码的一部分。 另外,将代码放入类方法中,而不要尝试在main方法中编写所有内容。
将您的应用程序分成越来越小的部分,直到您无需费神就可以编写每个部分。 想法是分解您的应用程序。
您必须使用Swing布局。 我选择BorderLayout
,但其他布局可能会更好地满足您的需求。 学习Oracle可视化布局管理器指南,直到您可以在睡眠中描述Swing布局管理器为止。
最后,当将JList
封装在JScrollPane
时,它会更好地工作。
。
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
public class UserInterface implements Runnable {
final static private int HEIGHT = 400;
final static private int WIDTH = 650;
private String[] entries = { "Entry 1", "Entry 2", "Entry 3",
"Entry 4", "Entry 5", "Entry 6" };
private DefaultListModel sampleModel;
public UserInterface() {
this.sampleModel = new DefaultListModel();
}
@Override
public void run() {
createPartControl();
}
protected void createPartControl() {
JPanel content = new JPanel();
content.setLayout(new BorderLayout());
for (int i = 0; i < entries.length; i++) {
sampleModel.addElement(entries[i]);
}
JList sampleList = new JList(sampleModel);
sampleList.setMinimumSize(new Dimension(1000, 1000));
sampleList.setMaximumSize(new Dimension(1000, 1000));
JScrollPane scrollPane = new JScrollPane(sampleList);
content.add(scrollPane, BorderLayout.CENTER);
// main window frame
JFrame window = new JFrame("NAD Assignment 1");
window.setSize(WIDTH, HEIGHT);
window.setContentPane(content);
window.setLocationRelativeTo(null);
window.setVisible(true);
window.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new UserInterface());
}
}
// assuming Strings are being used:
sampleList.setPrototypeCellValue("1234567890"); // or whatever
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.