Я застрял с проектом, который я должен сделать в школе.
я пытался создать пользовательский JList
для «простого» пользовательского интерфейса: вариант использования должен отображать список заказов, и пользователь должен иметь возможность выбрать один и установить, если он прочитан/сделан, нажав две кнопки (прочитано и сделано), которые также действует как «неустановщик» (я использую 2 логических значения в классе Order, которые продолжают проходить через t, f, t, f...). После нажатия кнопки «Готово» выбранная строка должна стать зеленой (и постоянно оставаться в этом цвете), пока в этой строке снова не будет нажата кнопка «Готово» (= снято). То же самое с кнопкой «Читать», которая должна сделать выбранную строку постоянно желтой, относящейся к флагу «is_read» в классе Order.
Прочитав некоторые похожие сообщения, я написал этот пользовательский ListCellRenderer
:
public class CookListCellRender extends JLabel implements ListCellRenderer<Order>{
public CookListCellRender(){
setOpaque(true);
}
@Override
public Component getListCellRendererComponent(JList<? extends Order> list, Order value, int index, boolean isSelected, boolean cellHasFocus) {
setLayout(new FlowLayout());
setText(value.getNameEl());
list.setVisibleRowCount(30);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
setFont(new Font("Arial",Font.ITALIC,17));
if (isSelected) {
setBackground(Color.BLUE);
setForeground(Color.BLUE);
} else {
setBackground(getBackground());
setForeground(getForeground());
}
if(value.getOrderRead()){
setBackground(Color.YELLOW);
}else{
setBackground(Color.WHITE);
}
if(value.getOrderDone()){
setBackground(Color.GREEN);
}else{
setBackground(Color.WHITE);
}
return this;
}
}
Моя проблема в том, что после запуска моего тестового файла все появляется правильно, но когда я выбираю строку и нажимаю одну из этих двух кнопок, ничего не происходит, пока я не выберу новую строку: затем продолжает становиться зеленым или желтым (в зависимости от кнопки, которую я нажал ) цвет строки, которую я выбираю.
Я почти уверен, что это проблема, связанная с моим пользовательским средством визуализации ячеек, а также потому, что я все еще учусь, как его использовать, и я начал сильно запутываться.
Вот остальная часть моего соответствующего кода, связанного с пользовательским интерфейсом, возможно, это полезно. Кнопки и их слушатели находятся в отдельном классе (пользовательский JPanel
), но они работают нормально, так что...
Класс InitGraphics
(напрямую вызывается моим тестовым классом):
public class InitGraphics {
Cook c;
JList list;
public InitGraphics(Cook cuoco){
c=cuoco;
initUi();
}
private void initUi() {
JFrame frame = new JFrame("Cucina");
list =new JList(c.getOrdersCopy().toArray());
list.setCellRenderer(new CookListCellRender());
JScrollPane panel = new JScrollPane(list);
panel.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
panel.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
ButtonPanel buttonPanel = new ButtonPanel(c.getOrdersCopy(),list);
buttonPanel.setLayout(new FlowLayout());
frame.add(buttonPanel,BorderLayout.NORTH);
frame.add(panel,BorderLayout.CENTER);
frame.setVisible(true);
frame.setSize(600, 400);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}