2010-07-06 7 views
12

क्यूटी समाधान resizeColumnsToContent() को एक कॉल है, .NET में एक TextRenderer.MeasureText() उपयोग कर सकते हैं, JTable AUTO_RESIZE_ALL_COLUMNS इस्तेमाल कर सकते हैं।SWT तालिका: ऑटो सभी स्तंभों का आकार बदलने के

एसडब्ल्यूटी में, क्या प्रोग्रामेटिकल का आकार बदलने के बाद स्तंभों का आकार बदलने का कोई तरीका है?

कॉलिंग computeSize(SWT.DEFAULT, SWT.DEFAULT) कॉलम में वर्ण बाएं ओवर को अनदेखा करते हुए वही मान देता है।
टेबलकॉलम में setWidth() है, लेकिन मैं वर्तमान सामग्री के लिए फ़ॉन्ट फेस इत्यादि को ध्यान में रखते हुए आकार संकेत कैसे प्राप्त करूं?

private static void resizeColumn(TableColumn tableColumn_) 
{ 
    tableColumn_.pack(); 

} 
private static void resizeTable(Table table_) 
{ 
    for (TableColumn tc : table.getColumns()) 
     resizeColumn(tc); 
} 

उत्तर

4

कई मामलों में, तालिका प्रविष्टियों रन-टाइम में बदल डेटा मॉडल में बदलाव को प्रतिबिंबित करने के लिए:

19

साथ हल। डेटा मॉडल में प्रवेश जोड़ने के लिए कॉलम का आकार बदलना आवश्यक है, लेकिन मॉडल के संशोधन के बाद मेरे मामले में कॉलिंग .pack() में समस्या पूरी तरह से हल नहीं होती है। सजावट के साथ कण में अंतिम प्रविष्टि का आकार कभी नहीं बदला जाता है। यह seams async तालिका दर्शक अद्यतन के कारण होने के लिए है। इसने मेरी समस्या हल कर दी:

public class LabelDecoratorProvider extends DecoratingStyledCellLabelProvider { 

    public LabelDecoratorProvider(IStyledLabelProvider labelProvider, 
     ILabelDecorator decorator, IDecorationContext decorationContext) { 
     super(labelProvider, decorator, decorationContext); 
    } 

    @Override 
    public void update(ViewerCell cell) { 
     super.update(cell); 
     if (TableViewer.class.isInstance(getViewer())) { 
      TableViewer tableViewer = ((TableViewer)getViewer()); 
      Table table = tableViewer.getTable(); 
      for (int i = 0, n = table.getColumnCount(); i < n; i++) 
       table.getColumn(i).pack(); 
     } 
    } 
} 
+14

क्या एक पंक्ति कार्य बल्कि बेकार नहीं हैं? क्यों आकार बदलने योग्य पैक में पैक नहीं? – Buttons840

+1

मैं उपरोक्त उदाहरण में बटन से सहमत हूं, Buttons840। लेकिन वे बेकार नहीं हैं, अगर आप एक अपठनीय 'एक लाइनर' को अधिक अभिव्यक्तिपूर्ण/पठनीय बनाना चाहते हैं - ताकि विधि का नाम बेहतर हो जो आप करते हैं। –