2

私はJavaを初めて使用し、Netbeansを使用しています。レシピとして使用するJListを作成しました。これは、jScrollPane内に含まれています。jListにアイテムを追加するときは、リストの最後のアイテムでスクロールするために、アイテムを一番下に固定する必要があります。使ってみましensureIndexIsVisible(int)たが、効果がないようです。

DLMを宣言しました...

public class ShoppingCart extends javax.swing.JFrame {

DefaultListModel dlm = new DefaultListModel();

そして、これを使用してリストにデータを入力しています。

private void PrintToReceipt(){

    JList Receipt = new JList( dlm );

    dlm.addElement(ItemQuantity + "@ " + Money.format(ItemPrice) + " * " + TaxRate.format(ItemTax) + "% = " + Money.format(ItemTotal));

    Receipt.ensureIndexIsVisible(Receipt.getSelectedIndex());

}

のバリエーションも試しgetSelectedIndexましたが、追加したアイテムの数を追跡するために変数を配置するだけで、何も機能しません。さらに追加すると、ビューポートに表示されますが、単純に追加し続けますが、スクロールバーは上部に留まります。誰かが私に他に何を試すことができるかについて何か考えを教えてもらえますか?

4

2 に答える 2

4

選択したインデックス値を確認します。また、ensureIndexIsVisible をラップしてみてくださいSwingUtilities.invokeLater

于 2012-09-10T06:46:25.727 に答える
3

次の 2 つの方法があります。

(前述のように+1)にラップensureIndexIsVisibleすることによりinvokeLater@Stas

また

ListSelectionListenerたとえば、直接使用する

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;

public class ListOneItem extends JFrame implements ListSelectionListener {

    private static final long serialVersionUID = 1L;

    public ListOneItem() {
        setLayout(new GridLayout(1, 2));
        String[] numbers = {"one", "two", "three", "four", "five", "six", "seven"};
        final JList list = new JList(numbers);
        list.setVisibleRowCount(1);
        list.addListSelectionListener(this);
        JScrollPane scrollPane = new JScrollPane(list);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        add(scrollPane);
        Runnable doRun = new Runnable() {

            @Override
            public void run() {
                list.setSelectedIndex(3);
            }
        };
        SwingUtilities.invokeLater(doRun);
    }

    @Override
    public void valueChanged(final ListSelectionEvent e) {
        JList list = (JList) e.getSource();
        list.ensureIndexIsVisible(list.getSelectedIndex());
    }

    public static void main(String[] args) {
        Runnable doRun = new Runnable() {

            @Override
            public void run() {
                ListOneItem frame = new ListOneItem();
                frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
                frame.setLocationRelativeTo(null);
                frame.pack();
                frame.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(doRun);
    }
}
于 2012-09-10T06:57:35.947 に答える