-1

JList を追加し、一度に 4 つのレコードのみを表示するようにしました。4 つ以上のレコードがある場合、ユーザーはスクロールして他のレコードを表示できる必要があります。しかし、私の場合、追加した 8 ~ 10 個のレコードすべてが表示されます。コードは最初の 4 つのレコードとスクロール バーを表示していません。誰かが私に欠けているものを教えてもらえますか?

import java.awt.BorderLayout;

public class FrameTest {

    private JPanel panel;
    private JFrame frame;
    private FrameTest ft;
    private JList list;

    public FrameTest() {
        initComponents();
        ft = this;
    }

    private void initComponents() {
        frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

        panel = new JPanel();
        panel.setBorder(new EmptyBorder(5, 5, 5, 5));
        panel.setLayout(new BorderLayout(0, 0));

        frame.getContentPane().add(panel);

        list = new JList();
        list.setVisibleRowCount(4);
        list.setModel(new AbstractListModel() {
            String[] values = new String[] {"adf", "gr", "rg", "g", "tg", "gt", "tg", "tg", "t", "gt", "gt"};
            public int getSize() {
                return values.length;
            }
            public Object getElementAt(int index) {
                return values[index];
            }
        });
        list.setSelectedIndex(1);
        panel.add(list, BorderLayout.SOUTH);

        frame.setLocationByPlatform(true);
        frame.pack();
        frame.setVisible(true);
    }


}

注:上記は私のコードの簡略版です。

4

3 に答える 3

1

setVisibleRowCount()JListのサイズ設定を変更しますが、実際のサイズは、どのレイアウトマネージャーがJListをレイアウトしているかによって決まります。いくつかのレイアウトは好ましいサイズに注意を払いますが、他のレイアウトは気にしません。

ドキュメントには次のように書かれています。

垂直レイアウト方向の場合、これにより、スクロールを必要とせずに表示する優先行数が設定または取得されます。HORIZONTAL_WRAPまたはVERTICAL_WRAPレイアウト方向の場合、セルの折り返し方法を定義します。

詳細については、JavaDocを参照してください。

于 2012-11-21T20:27:24.377 に答える
1

を追加して、スクロール ペインをフレームに追加JListしてみてください。JScrollPane

    panel.add(new JScrollPane(list), BorderLayout.SOUTH);

は、スクロール ペインに表示する行数を決定するためにvisibleRowCount使用されます。getPreferredScrollableViewportSize

于 2012-11-21T20:21:38.113 に答える
1

JScrollPaneスクロールバーを実現するために使用します。

    JScrollPane scrollPane = new JScrollPane(list);
    panel.add(scrollPane, BorderLayout.SOUTH);

こちらのチュートリアルの詳細: Using JScrollPane

于 2012-11-21T20:29:35.663 に答える