0

I Have java code like this:

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);
            }
        });;
    }

And text file like this:

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

Text file is shown normaly in JTable in order like in text file. But I have JComboBox with two filters: Number (room Number - split[0] in text file) and Room Type split[2].

The question is: What is the simplest way to sort JTable by one of theese parameters?

EDIT: I would like to use tblRooms.setAutoCreateRowSorter(true);, but profesor said he want from us to do that on harder way and you sort only by these two parameters. :D Also, Even when I tried it number is sorted only by first digit. For example if I want to sort by descending numbers it will sort like this: 41 21 15 13 1234 123 12 0 Instead of: 1234 123 41 21 15 13 12 0

Neo Cortex
  • 47
  • 1
  • 11
  • [How to use tables: Sorting and Filtering](https://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting) would be the best place to start. [How to sort JTable in shortest way?](https://stackoverflow.com/questions/28823670/how-to-sort-jtable-in-shortest-way/28823706#28823706) demonstrates how to set which column to sort – MadProgrammer May 31 '18 at 00:43
  • Why not just set the JTable's **setAutoCreateRowSorter** property to true then you can just click on the table header and sort based on whichever column you like either ascending or descending? `myJTable.setAutoCreateRowSorter(true);`. – DevilsHnd - 退職した May 31 '18 at 00:44
  • @DevilsHnd Because that would be easy, we don't want easy – MadProgrammer May 31 '18 at 00:45
  • Possible duplicate of [How to sort JTable in shortest way?](https://stackoverflow.com/questions/28823670/how-to-sort-jtable-in-shortest-way) – DevilsHnd - 退職した May 31 '18 at 00:47
  • @DevilsHnd I would like to use that, but profesor said he want from us to do that on harder way and you sort only by these two parameters. :D – Neo Cortex May 31 '18 at 00:51

0 Answers0