У меня есть 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