2015-10-09 2 views
1

Это, как выглядит программа:Как добавить пользовательский флажок в JList (Java)?

http://i.stack.imgur.com/zOFCh.png

Это, как я хочу, чтобы это выглядело:

http://i.stack.imgur.com/XTdlJ.png

Как вы можете видеть на картинке, я попробовал немного и узнал, что мне нужно использовать ListCellRenderer, но проблема в том, что я создал 2 пользовательских файла png

  1. checked.png и

  2. unchecked.png

, когда я нажимаю ежедневно goals #1 он должен дать state = true и checked.png должен появиться и остаться проверены, если я нажмите на него еще раз. Unchecked.png может быть стандартным на jList column.

Я также хочу разместить свой флажок 1 см слева от конца строки (прокладка), не уверен, что его сделано в java печально. (Вы поймете, если посмотреть на картинку)

После просмотра некоторых руководств я узнал, что единственный способ добавить дополнительный материал в JList column - это использовать ListCellRenderer. Я пробовал довольно долгое время, не добившись успеха, поэтому подумал о том, чтобы спросить других. Кто-нибудь есть идеи о том, как это сделать?

Мысль заключалась в том, чтобы заставить его работать, а затем отображать в JTable, изменив столбец Jtable на ежедневные цели и отображая X, чтобы указать, что цель была достигнута. Но я думаю, что я должен это сделать. Главный вопрос - это пользовательская реализация флажка.

+0

Я думаю, что JButton будет лучше, если вы что-то вроде wan't чем. – jtothebee

+0

Можете ли вы показать, что вы пробовали с помощью ListCellRenderer? – rsutormin

ответ

0
  1. Вы можете использовать два типа флажков, которые будут использоваться в качестве рендеринга ячейки jlist, один для выбранных ячеек, другой для невыбранных.
  2. Используйте ImageIcon, чтобы украсить этот флажок вашими изображениями.
  3. В вашем представлении ячейки jlist вам нужно иметь логику, чтобы вернуть установленный флажок, чтобы отобразить эту ячейку списка.
  4. Примечание переопределить текст в окошке для фактического значения ячейки списка

    public class TestFrame extends JFrame { 
    ImageIcon iconChecked = new ImageIcon(TestFrame.class.getResource("checked.png")); 
    ImageIcon iconUnchecked = new ImageIcon(TestFrame.class.getResource("unchecked.png")); 
    JList jList = new JList(new Object[]{"ABC", "123"}); 
    
    public TestFrame() { 
        this.add(jList); 
        jList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 
    
    jList.setCellRenderer(new ListCellRenderer() { 
        @Override 
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
         for (int i : list.getSelectedIndices()) { 
          if (index == i) { 
           JCheckBox checkBoxChecked = new JCheckBox(value.toString(), iconChecked); 
           return checkBoxChecked; 
          } 
         } 
    
         JCheckBox checkBoxUnchecked = new JCheckBox(value.toString(), iconUnchecked); 
         return checkBoxUnchecked; 
        } 
    }); 
    }} 
    
+0

Конечно, поскольку функция переключения флажка здесь не используется, вы можете использовать другие компоненты для рендеринга ячейки списка аналогичным образом. – Bon

+0

Спасибо, сработало, у меня появился новый класс, который обрабатывал ListCellRenderer и был более сложным, чем это, ваш код намного проще и понятнее. У вас есть какие-либо советы о том, как сделать так, чтобы он оставался включенным до тех пор, пока я не нажму кнопку, тогда значения должны будут передаваться в jtable, так как теперь он появляется, когда пользовательские флажки появляются, но проверяются только, если я нажимаю один столбец, я хочу, чтобы несколько где я могу проверить 3-4 ежедневных гола, и он должен оставаться проверенным. Теперь я могу только нажать на одну ежедневную цель, как только я нажму следующий, предыдущий не будет проверен ... Любые решения? –

+0

@JavaGamer вы можете ссылаться на это сообщение http: // stackoverflow.com/questions/2528344/jlist-deselect-when-click-an-selected-selected-item для подробного обсуждения. – Bon

Смежные вопросы