Tôi đã đọc/thử các bài viết nhưng điều đó không giúp:Swing JList với văn bản nhiều dòng và chiều cao năng động
- Display multiple lines within a Jlist cell
- How to get multiline for a Jlist text?
- Problem displaying components of JList
Những gì tôi cần là ListCellRenderer
trả về bảng điều khiển có biểu tượng ở bên trái và văn bản có độ dài động ở bên phải (như trong bất kỳ diễn đàn nào: ở bên trái hình đại diện của người dùng, ở bên phải t anh ấy đăng văn bản). Các văn bản là NOT được tôi biết, vì vậy tôi không thể đặt chiều cao ô cố định. Hơn nữa, độ dài văn bản khác với ô danh sách để liệt kê ô. Vì vậy, mỗi ô danh sách cần chiều cao của riêng nó tùy thuộc vào độ dài của văn bản. Trên thực tế một bố trí thực sự phổ biến ... nhưng không phải cho Swing. Chiều cao ô chỉ không mở rộng theo độ dài văn bản.
Tôi đã đọc hầu hết mọi bài đăng ở đó về chiều cao ô động và văn bản nhiều dòng trong JList
, nhưng không thể tìm thấy giải pháp. Vì vậy, tôi quyết định đưa ra một SSCCE nhỏ. Xin vui lòng cho tôi một gợi ý về làm thế nào để đạt được những gì tôi mô tả hoặc xin vui lòng sửa mã của tôi nếu bạn nghĩ rằng nó dễ dàng.
Cảm ơn
Đây là ths SSCCE:
public class MultiLineList extends JFrame
{
private static final long serialVersionUID = 1L;
public static void main(final String[] args)
{
new MultiLineList();
}
private MultiLineList()
{
setTitle("MultiLineList");
setSize(800, 450);
setResizable(true);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.getContentPane().setLayout(new BorderLayout());
final DefaultListModel model = new DefaultListModel();
model.addElement("This is a short text");
model.addElement("This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. This is a long text. ");
model.addElement("This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. This is an even longer text. ");
final JList list = new JList(model);
list.setCellRenderer(new MyCellRenderer());
this.add(list);
this.getContentPane().invalidate();
this.getContentPane().validate();
}
public class MyCellRenderer extends DefaultListCellRenderer
{
@Override
public Component getListCellRendererComponent(final JList list, final Object value, final int index, final boolean isSelected, final boolean hasFocus)
{
final String text = (String) value;
//create panel
final JPanel p = new JPanel();
p.setLayout(new BorderLayout());
//icon
final JPanel IconPanel = new JPanel(new BorderLayout());
final JLabel l = new JLabel("icon"); //<-- this will be an icon instead of a text
IconPanel.add(l, BorderLayout.NORTH);
p.add(IconPanel, BorderLayout.WEST);
//text
final JTextArea ta = new JTextArea();
ta.setText(text);
ta.setLineWrap(true);
ta.setWrapStyleWord(true);
p.add(ta, BorderLayout.CENTER);
return p;
}
}
}
không liên quan đến vấn đề ở bàn tay: a) neve Các thành phần r-ever _create_ trong các lớp getXXRendererComponent b) không _extend_ nếu mới không đáp ứng yêu cầu là một yêu cầu – kleopatra
Lưu ý rằng một SSCCE phải bao gồm cả việc nhập khẩu. Không phải tất cả chúng ta đều sử dụng các IDE tự động hóa có thể tìm ra chúng! –
Tôi sẽ ghi nhớ điều đó trong đầu – haferblues