Java Swing JList,无法设置最小宽度 [英] Java Swing JList, can't set minimum width

查看:108
本文介绍了Java Swing JList,无法设置最小宽度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试简单地创建一个具有指定可见行数但最小宽度的JList.似乎"setMinimumSize()"什么也没做...

Trying to simple create a JList with a specified visible row count, but a minimum width. It seems "setMinimumSize()" does nothing though...

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()中设置的内容:

setPreferredSize() seems to work, but it overrides whatever I set up in 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指定高度?谢谢.

How can I set a minimum width on my JList and specify the height with setVisibleRowCount? Thanks.

推荐答案

您的代码有几处错误.

  1. 始终使用SwingUtilities调用Swing应用程序.这样可以确保在事件调度线程(EDT)上创建并执行Swing组件.

  1. Always invoke a Swing application with SwingUtilities. This ensures that the Swing components are created and executed on the Event Dispatch thread (EDT).

将数据创建与GUI创建分开.这使您可以一次专注于代码的一部分.另外,将您的代码放入类方法中,而不要尝试在main方法中编写所有内容.

Separate out the data creation from the GUI creation. This allows you to focus on one part of the code at a time. Also, put your code into class methods, rather than trying to write everything in the main method.

将您的应用程序分成越来越小的部分,直到您无需费神就可以编写每个部分.这种想法是在分解您的应用程序.

Break your application up into smaller and smaller pieces until you can code each piece without much thought. The thinking is in breaking up your application.

必须使用Swing布局.我选择了BorderLayout,但是另一种布局可能更适合您想要的布局.研究 Oracle可视化版式管理器指南,直到您可以描述Swing布局经理在您的睡眠中.

You must use a Swing layout. I chose the BorderLayout, but another layout may work better for what you want. Study Oracle's Visual Guide to Layout Managers until you can describe the Swing layout managers in your sleep.

最后,将JList封装在JScrollPane中会更好.

Finally, JList works better when you enclose it in a 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());
    }

}

这篇关于Java Swing JList,无法设置最小宽度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆