0

指定された表示行数で 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 で高さを指定するにはどうすればよいですか? ありがとう。

4

2 に答える 2

5

コードにいくつか問題がありました。

  1. 常にSwingUtilities を使用して Swing アプリケーションを呼び出します。これにより、Swing コンポーネントがイベント ディスパッチ スレッド (EDT) で作成および実行されることが保証されます。

  2. データの作成と GUI の作成を分離します。これにより、一度にコードの一部に集中することができます。また、メイン メソッドにすべてを記述しようとするのではなく、コードをクラス メソッドに入れます。

  3. 深く考えずに各部分をコーディングできるようになるまで、アプリケーションをどんどん小さな部分に分割します。考え方は、アプリケーションを分割することです。

  4. Swing レイアウトを使用する必要があります。私は を選択しましたBorderLayoutが、別のレイアウトの方が適している場合もあります。眠っている間に Swing レイアウト マネージャーを説明できるようになるまで、Oracle の Layout Manager のビジュアル ガイドを読んでください。

  5. 最後に、 で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());
    }

}
于 2013-01-28T17:13:27.613 に答える
2
// assuming Strings are being used:    
sampleList.setPrototypeCellValue("1234567890");  // or whatever

参照: JList.setPrototypeCellValue(オブジェクト)

于 2013-01-28T20:40:51.090 に答える