मैं पहले से ही पढ़ने/इन पदों की कोशिश की लेकिन वह मदद नहीं की:स्विंग JList
- Display multiple lines within a Jlist cell
- How to get multiline for a Jlist text?
- Problem displaying components of JList
मैं क्या जरूरत है एक ListCellRenderer
जो बाएं ओर एक आइकन के साथ एक पैनल और दाईं ओर गतिशील लंबाई का एक पाठ देता है (जैसे किसी भी मंच में: बाईं तरफ उपयोगकर्ता अवतार, दाईं ओर वह पाठ पोस्ट)। ग्रंथ नहीं मुझे ज्ञात हैं, इसलिए मैं एक निश्चित सेल ऊंचाई निर्धारित नहीं कर सकता। इसके अलावा, पाठ की लंबाई सूची सेल से सूची कक्ष में भिन्न होती है। इसलिए पाठ की लंबाई के आधार पर प्रत्येक सूची कक्ष को अपनी ऊंचाई की आवश्यकता होती है। दरअसल वास्तव में एक आम लेआउट ... लेकिन स्विंग के लिए नहीं। सेल ऊंचाई बस पाठ की लंबाई के अनुसार विस्तार नहीं करता है।
मैंने JList
में डायनामिक सेल हाइट्स और मल्टीलाइन ग्रंथों के बारे में लगभग किसी भी पोस्ट को पढ़ा है, लेकिन समाधान नहीं मिला। तो मैंने एक छोटा सा एसएससीसीई देने का फैसला किया। कृपया मुझे बताएं कि मैंने जो वर्णन किया है उसे हासिल करने के लिए या कृपया मेरे कोड को ठीक करें यदि आपको लगता है कि यह आसान है।
धन्यवाद
यहाँ चौथाई 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;
}
}
}
हाथ से समस्या से असंबंधित: ए) neve getXXRendererComponent में r-ever _create_ घटक b) _extend_ कक्षाएं न करें अगर नया पूरा नहीं करता है- एक आवश्यकता – kleopatra
ध्यान दें कि एक एसएससीसीई में आयात शामिल होना चाहिए। हम सभी ऑटोमैजिक आईडीई का उपयोग नहीं करते हैं जो उन्हें समझ सकते हैं! –
मैं इसे ध्यान में रखूंगा – haferblues