Zawijanie wierszy w JList

Zawijanie wierszy w JList
JQ
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 367
0

Witajcie. Mam pewien problem.
Jak zrobić zawijanie wierszy w JList?

LN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1398
JQ
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 367
0

widziałem to, ale to raczej u mnie nie zadziała z takiego powodu, że mam Listę, której szerokość zmienia się względem okna, mam to dodane do BorderLayouta jako NORTH i jeśli ktoś powiększy okno, to powiększy się również lista

na necie znalazłem kilka sugestii, żeby wykorzystać CellRenderer i zmienić polę JListy na jakieś pole, na ktorym można wywołać funkcję, setWrap...
nie wiem niestety jak to wykorzystać

AB
  • Rejestracja: dni
  • Ostatnio: dni
0

Coś takiego stworzyłem

Kopiuj
class TextAreaRenderer extends DefaultListCellRenderer {

    private JTextArea area;

    public TextAreaRenderer() {
        area = new JTextArea();
        area.setLineWrap(true);
    }

    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        
        area.setText((String)value);
        area.setFont(label.getFont());
        area.setForeground(label.getForeground());
        area.setBackground(label.getBackground());
        area.setBorder(label.getBorder());
        
        int textWidth = area.getFontMetrics(area.getFont()).stringWidth(area.getText());
        int listWidth = list.getWidth() - (list.getInsets().left + list.getInsets().right);
        
        area.setRows(textWidth/listWidth+1);
        return area;
    }
}

Jednak aby to zadziałało musiałem po zmianie rozmiaru tworzyć na nowo renderer, czyli:

Kopiuj
list.addComponentListener(new ComponentAdapter() {

    @Override
    public void componentResized(ComponentEvent e) {
        list.setCellRenderer(new TextAreaRenderer());
    }

});

Wiec nie jest to chyba zbyt wydajny sposób, ale działa.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.