Как отсортировать JTable в зависимости от выбранного элемента JComboBox - PullRequest
0 голосов
/ 31 мая 2018

У меня есть Java-код, подобный следующему:

private ArrayList<Room> loadRoom() {
            ArrayList<Room> rooms = new ArrayList<Room>();
            try {
                File roomsFile = new File("src/txt/rooms");
                BufferedReader br = new BufferedReader(new FileReader(roomsFile));
                String line = null;
                while ((line = br.readLine()) != null) {
                    String[] split = line.split("\\|");
                    int number = Integer.parseInt(split[0]);
                    String type = split[1];
                    String name = split[2];
                    int beds = Integer.parseInt(split[3]);
                    Boolean tv = Boolean.parseBoolean(split[4]);
                    Boolean miniBar = Boolean.parseBoolean(split[5]);
                    Boolean ocupied = Boolean.parseBoolean(split[6]);
                    Boolean deleted = Boolean.parseBoolean(split[7]);
                    Room newRoom = new Room(number, type, name, beds, tv, miniBar, ocupied, deleted);
                    rooms.add(newRoom);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return rooms;

    }

    private void initGUI() {

        tbToolBar = new JToolBar();
        btnAdd = new JButton();
        tbToolBar.add(btnAdd);

        spScroll = new JScrollPane();

        lblSort = new JLabel("Sort by ");
        cbSort = new JComboBox();
        btnSort = new JButton("Sort");
        cbSort.addItem("Number");
        cbSort.addItem("Type");

        tbToolBar.add(lblSort);
        tbToolBar.add(cbSort);
        tbToolBar.add(btnSort);

        ArrayList<Room> rooms = loadRoom();
        String[] header = new String[] { "Number", "Type", "Name", "No. beds", "TV", "Mini bar", "Occupation" };
        Object[][] show = new Object[rooms.size()][header.length];
        for (int i = 0; i < rooms.size(); i++) {
            Room r = rooms.get(i);
            show[i][0] = r.getNumber();
            show[i][1] = r.getType();
            show[i][2] = r.getName();
            show[i][3] = r.getBeds();
            show[i][4] = r.getTv().toString();
            show[i][5] = r.getMiniBar().toString();
            show[i][6] = r.getOcupied().toString();
            // show[i][7] = r.getDeleted();
        }

        DefaultTableModel tableModel = new DefaultTableModel(show, header);
        tblRooms = new JTable(tableModel);
        tblRooms.setRowSelectionAllowed(true);
        tblRooms.setColumnSelectionAllowed(true);
        tblRooms.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        tblRooms.setDefaultEditor(Object.class, null);

        JScrollPane tableScroll = new JScrollPane(tblRooms);
        add(spScroll);
        add(tbToolBar, BorderLayout.NORTH);
        add(tableScroll, BorderLayout.CENTER);



    }

    private void initAction() {
        btnAdd.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                RoomAddWindow addRoom = new RoomAddWindow();
                addRoom.setVisible(true);
            }
        });;
    }

И текстовый файл, подобный этому:

13|family room|name apartman|4|true|true|empty|false
16|superior room|super room|2|true|false|empty|false
15|room|room for one|1|false|false|full|false

Текстовый файл обычно отображается в JTable в порядке, как в текстовом файле.Но у меня есть JComboBox с двумя фильтрами: номер (номер комнаты - разделение [0] в текстовом файле) и тип помещения: разделение [2].

Вопрос в следующем: Какой самый простой способ сортировки JTableпо одному из этих параметров?

РЕДАКТИРОВАТЬ: Я хотел бы использовать tblRooms.setAutoCreateRowSorter(true);, но профессор сказал, что он хочет от нас сделать это более сложным способом, и вы сортируете только поэти два параметра.: D Кроме того, даже когда я попробовал это число сортируется только по первой цифре.Например, если я хочу отсортировать по убыванию чисел, это будет выглядеть так: 41 21 15 13 1234 123 12 0 Вместо: 1234 123 41 21 15 13 12 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...