4

同じデータのさまざまな順序で定期的に更新され、新しいアイテムで更新されることはめったになく、より少ないアイテムで更新されることもめったにないJListがあるSwingベースのアプリケーションを作成しています。私はこれを美しく見せるための最良の方法を見つけようとしています。今、私はただ電話します

JList.setListData(String [] data);

見た目はあまり良くなく、選択したアイテムをクリアします。

リストから削除された場合にのみ選択されたアイテムをクリアし、それ以外の場合はインデックスが変更されても同じアイテムが選択されたままになるように更新する方法が必要です。どのインデックスが選択されているかを追跡し、データを変更した後に選択された項目を設定することを検討していましたが、それは恐ろしいことです。また、ListModelsを調べて自分の項目を追跡しましたが、選択された項目がJList自体に保持されているため、完全には機能しないようです。

何か提案をいただければ幸いです。

4

2 に答える 2

4

標準JListには並べ替えを調整する方法がないようです(なぜ彼らはそれをJTable...に追加しただけなのですか)が、並べ替えられたリストのチュートリアルがあります

于 2012-04-06T18:37:06.430 に答える
4

私はあなたに実用的な例を作りました。

私はJListあなたが要求したものを使用し、リストから再利用、追加、削除するボタンを追加しました。

とにかく、これが役立つことを願っています!

乾杯。

public class Test {

    private static String selectedValue = null;
    private static JList jList = new JList();

    public static void main(String args[]) {
        JFrame jFrame = new JFrame();
        jFrame.setSize(500, 500);
        jFrame.setLocationRelativeTo(null);
        jFrame.setLayout(new GridLayout(4, 1));

        jList = new JList(new String[]{"1", "2", "3", "4", "5"});
        jFrame.add(jList);

        JButton rearrangeButton = new JButton("rearrange");
        rearrangeButton.addActionListener(new Test().new SelectedListener());
        jFrame.add(rearrangeButton);

        JButton addButton = new JButton("add");
        addButton.addActionListener(new Test().new SelectedListener());
        jFrame.add(addButton);

        JButton deleteButton = new JButton("delete");
        deleteButton.addActionListener(new Test().new SelectedListener());
        jFrame.add(deleteButton);

        jFrame.setVisible(true);
    }

    private class SelectedListener implements ActionListener {

        public void actionPerformed(ActionEvent actionEvent) {
            storeSelected();

            if (actionEvent.getActionCommand().equalsIgnoreCase("rearrange")) {
                jList.setListData(new String[]{"5", "4", "3", "2", "1"});
            } else if (actionEvent.getActionCommand().equalsIgnoreCase("add")) {
                List< String> items = new ArrayList< String>();

                for (int item = 0; item < jList.getModel().getSize(); item++) {
                    items.add(jList.getModel().getElementAt(item).toString());
                }

                items.add("new");

                jList.setListData(items.toArray());
            } else if (actionEvent.getActionCommand().equalsIgnoreCase("delete")) {
                List< String> items = new ArrayList< String>();

                for (int item = 0; item < jList.getModel().getSize(); item++) {
                    items.add(jList.getModel().getElementAt(item).toString());
                }

                items.remove(0);

                jList.setListData(items.toArray());
            }

            reSelect();
        }
    }

    private static void storeSelected() {
        if (jList.getSelectedIndex() > -1) {
            selectedValue = jList.getSelectedValue().toString();
        } else {
            selectedValue = null;
        }
    }

    private static void reSelect() {
        if (selectedValue != null) {
            jList.setSelectedValue(selectedValue, true);
        }
    }
}
于 2012-04-06T19:04:36.410 に答える