2011-10-16 8 views
7

मेरे पास कई कॉलम के साथ एक JTable है। मैं एक विशेष कॉलम का आकार बदलना चाहता हूं। मैं उम्मीद कर रहा था कि setPreferredWidth का उपयोग करके, कॉलम उस आकार का आकार बदल जाएगा, या सामग्री का आकार कोई छंटनी नहीं हुई और शेष कॉलम शेष स्थान लेते हैं, लेकिन इसके बजाय, सभी कॉलम, जिसमें मैंने आकार बदल दिया, तालिका के सभी स्थान को समान रूप से विभाजित करता है; जैसे कि setPreferredWidth ने को पर कुछ भी नहीं किया था। असल में, मैं एक कॉलम की चौड़ाई निर्धारित करने में सक्षम होना चाहता हूं और इसे उस आकार पर बिना किसी सामग्री के छिड़काव (क्या मैंने अभी तक इतना अधिक जोर दिया है?) इस तरह से कम किया है कि सभी कॉलम जिन्हें आकार में नहीं बदला गया है शेष जगह SetMaxWidth का उपयोग सामग्री को छोटा करता है (क्या मैंने उल्लेख किया है कि मुझे यह पसंद नहीं आया?) मैं इसे बिना किसी कटाई के कॉलम का आकार बदल/छोटा कर सकता हूं और इसके बिना बिल्कुल कुछ भी नहीं? यहाँ अपमानजनक कोड नहीं है: -:TableColumn setPreferredWidth काम नहीं कर रहा

new GridBagConstraints(0, 3, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(2, 0, 0, 2), 0, 0)) 

संपादित करें:

for (int i = 0, x = 0; i < table.getColumnModel().getColumnCount(); i++) 
    if ((x = model.getColumnWidth(i)) > -1) 
     table.getColumnModel().getColumn(i).setPreferredWidth(x); 

तालिका एक JPanel (MyListPanel BorderLayout) में है जो एक और JPanel (GridBagLayout) में है के साथ जोड़ा इस के लिए निर्माता है मेरी JPanel के उपवर्ग:

public MyListPanel(boolean showHeader, String title, ColData...columns) { 
    super(new BorderLayout()); 
    model = new MyListTableModel(columns); 
    table = new JTable(model); 

    table.addFocusListener(this); 

    add(table); 
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

    setTitle(title); 

    if (showHeader) 
     add(table.getTableHeader(), BorderLayout.NORTH); 

    for (int i = 0, x = 0; i < table.getColumnModel().getColumnCount(); i++) 
     if ((x = model.getColumnWidth(i)) > -1) 
      table.getColumnModel().getColumn(i).setPreferredWidth(x); 

    setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED)); 
} 

और MyListTableModel.ColData:

public static class ColData { 
    private int index; 
    private String title; 
    private int width; 
    public ColData(int _index, String _title, int _width) { index = _index; title = _title; width = _width; } 
} 

उत्तर

8

को शामिल करें:

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
+0

चाल :( –

2

मैं जानता हूँ कि यह थोड़ी देर हो चुकी ताकि भविष्य पाठकों के लिए ज्यादातर है, लेकिन मैं एक ही समस्या थी और दोनों स्तंभ के पसंदीदा चौड़ाई और अधिकतम चौड़ाई निर्धारित करके इसे हल वही मूल्य

3

मुझे दो अन्य उत्तरों की कोशिश करने के बावजूद भी एक ही समस्या थी। मेरे मामले में, दूसरी बार चौड़ाई दूसरी बार सही ढंग से सेट हो जाएगी, यह नहीं होगा। मैंने पाया कि समस्या आई थी क्योंकि मैं अपने टेबल मॉडल को बदलने के तुरंत बाद कॉलम चौड़ाई सेट करने की कोशिश कर रहा था। मुझे SwingUtilities.invokeLater() के अंदर कॉलम चौड़ाई सेट करने की चाल मिली। अर्थात।

SwingUtilities.invokeLater(new Runnable(){ 

    @Override 
    public void run() { 
     int width = 100; 
     for (int column = 1; column < table.getColumnCount(); column++) { 
      columnModel.getColumn(column).setPreferredWidth(width); 
     } 
    } 
} 
+0

मैं तुम्हें वोट दें क्योंकि यह लगता है जैसे कि यह मेरी समस्या तय हो सकता है जा रहा हूँ ऐसा नहीं करता है, लेकिन मुझे लगता है कि नौकरी छोड़ दी। –

1

मेरे पास एक ही समस्या थी और @Jay Askren उत्तर पढ़ना, विपरीत मेरे लिए काम किया। मुझे उस विधि में चौड़ाई निर्धारित करनी थी जहां टेबल बनाया जा रहा था।

public class Example{ 
    //..stuff 
    private JTable myTable; 

    public Example{ 
    //..stuff 
    myTable = AnotherClass.getTable(); 
    myTable .getColumnModel().getColumn(0).setPreferredWidth(100);//not here 
    } 

} 

public class AnotherClass{ 
    public static JTable getTable(){ 
    JTable table= new JTable(); 
    table.setModel(anyModel); 
    table.getColumnModel().getColumn(0).setPreferredWidth(100);//Here! 
    return table 
    } 
} 
संबंधित मुद्दे