2011-04-28 10 views
11

मेरे पास एक जेटीबल है जिसमें अंतिम कॉलम डेटा फ़ील्ड अलग-अलग स्ट्रिंग मानों में बदल जाएगा। मैं कॉलम को स्ट्रिंग लम्बाई में आकार बदलना चाहता हूं। स्ट्रिंग लंबाई चौड़ाई के लिए सूत्र क्या है?स्ट्रिंग लंबाई के लिए जेटीबल कॉलम का आकार कैसे बदलें?

मैं JTable.getColumnModel().getColumn().setPreferredWidth() का उपयोग करने जा रहा हूं, इसलिए मैं जानना चाहता हूं कि स्ट्रिंग लंबाई से चौड़ाई मान का अनुवाद कैसे करें।

उत्तर

15

तुम सच में स्ट्रिंग की लंबाई (और न ही किसी विशेष फ़ॉन्ट/मीट्रिक के लिए अपनी मैपिंग) में कोई दिलचस्पी नहीं कर रहे हैं। आप renderingComponent के पसंदीदा आकार में रूचि रखते हैं जो सेल सामग्री प्रस्तुत करता है। सभी पंक्तियों के माध्यम से कि, पाश हो और आकार, कुछ

तरह
int width = 0; 
for (row = 0; row < table.getRowCount(); row++) { 
    TableCellRenderer renderer = table.getCellRenderer(row, myColumn); 
    Component comp = table.prepareRenderer(renderer, row, myColumn); 
    width = Math.max (comp.getPreferredSize().width, width); 
} 

क्वेरी या JXTable का उपयोग करें (SwingX परियोजना में) करने के लिए: यह एक तरीका है पैक(), जो आप के लिए काम करता है है :-)

संपादित करें: टेबल की तैयारी को प्राथमिकता देने का कारण रेंडरर को मैन्युअल रूप से कॉल करने के लिए रेंडरर पर कॉम्पोनेंट है यह है कि तालिका प्रतिपादन कॉम्पोनेंट के दृश्य गुणों को सजाने में सक्षम हो सकती है। यदि उन सजावट घटक के prefSize को प्रभावित करते हैं, तो एक मैन्युअल कॉन्फ़िगरेशन बंद है।

+0

का निर्धारण करने tableColumn.getWidth() = tableColumn.getPreferredWidth() में हेडर के लिए मैन्युअल रूप से तैयारी कर रहा – kleopatra

+0

ग्रेट उत्तर जैसा ही है, मैं इस सवाल को स्ट्रिंग लम्बाई के साथ लागू कर रहा था जब मुझे यह प्रश्न मिला। लेकिन क्या आपको पता है कि स्तंभ नाम की लंबाई पर विचार कैसे करें? –

+0

ठीक है, अभी पता चला है कि एक विधि 'getHeaderRenderer() ' –

5

इस विधि एक JTable में किसी दिए गए स्तंभ पैक जाएगा -

/** 
* Sets the preferred width of the visible column specified by vColIndex. The column 
* will be just wide enough to show the column head and the widest cell in the column. 
* margin pixels are added to the left and right 
* (resulting in an additional width of 2*margin pixels). 
*/ 
public static void packColumn(JTable table, int vColIndex, int margin) { 
    DefaultTableColumnModel colModel = (DefaultTableColumnModel)table.getColumnModel(); 
    TableColumn col = colModel.getColumn(vColIndex); 
    int width = 0; 

    // Get width of column header 
    TableCellRenderer renderer = col.getHeaderRenderer(); 
    if (renderer == null) { 
     renderer = table.getTableHeader().getDefaultRenderer(); 
    } 
    java.awt.Component comp = renderer.getTableCellRendererComponent(
     table, col.getHeaderValue(), false, false, 0, 0); 
    width = comp.getPreferredSize().width; 

    // Get maximum width of column data 
    for (int r=0; r<table.getRowCount(); r++) { 
     renderer = table.getCellRenderer(r, vColIndex); 
     comp = renderer.getTableCellRendererComponent(
      table, table.getValueAt(r, vColIndex), false, false, r, vColIndex); 
     width = Math.max(width, comp.getPreferredSize().width); 
    } 

    // Add margin 
    width += 2*margin; 

    // Set the width 
    col.setPreferredWidth(width); 
} 
+0

आलसी हो: JTable एक विधि prepareRenderer है - काम है कि इसे करते हैं बजाय स्तंभ चौड़ाई – kleopatra

+0

+1 - पूर्व संपत्ति है! वास्तविक चौड़ाई जबकि उत्तरार्द्ध कॉलम प्राप्त करना चाहता है। जेटीबल के autoResizeMode के आधार पर कॉलम को व्यूपोर्ट फिट करने के लिए निचोड़ा/फैलाया जाता है। Table.setAutoResizeMode (JTable.AUTO_RESIZE_OFF) आज़माएं। शायद यह एक स्क्रॉलबार दिखाएगा (तालिका जेएसक्रोलपैन में है, है ना?) और कॉलम चौड़ाई इसके prefWidth – amaidment

4

Table Column Adjuster दोनों स्थिर और गतिशील रूप से काम करता है और उपयोगकर्ता इसे नियंत्रित कर सकता है।

+0

केवल जोर देने के लिए है, ऊपर से मेरी टिप्पणी दोहराएं: आलसी रहें: जेटीबल के पास एक विधि तैयार है रेंडरर - इसे मैन्युअल रूप से – kleopatra

+0

@ क्लोपेट्रा तैयार करने के बजाय यह काम करने दें, धन्यवाद जेनेट के बाहर इंगित करने के लिए। आमतौर पर मैं आलसी हूँ। मेरे ब्लॉग में अन्य पोस्टिंग इस विधि का उपयोग करते हैं। यकीन नहीं है कि मैंने इस समय readyRender() विधि का उपयोग क्यों नहीं किया :) – camickr

संबंधित मुद्दे