2012-04-10 20 views
8

मैं JTable से एक कॉलम बनाने की कोशिश कर रहा हूं, चौड़ाई को शून्य पर सेट करके अदृश्य है लेकिन यह नहीं हो सकता है और यह चौड़ाई = 15. के लिए दृश्यमान रहता है। यहां कोड है -कॉलम चौड़ाई को शून्य पर सेट नहीं कर सका यानी कॉलम अदृश्य नहीं बनाया गया

public void restoreColumnWithWidth(int column, int width) { 
     try { 
      TableColumn tableColumn = table.getColumnModel().getColumn(column); 
      table.getTableHeader().setResizingColumn(tableColumn); 
      tableColumn.setWidth(width); 
      tableColumn.setMaxWidth(width); 
      tableColumn.setMinWidth(width); 
      tableColumn.setPreferredWidth(width); 
     } catch (Exception ex) { 
     } 
    } 

कोड के साथ क्या गलत है?

उत्तर

13
  • , नहीं TableModel से TableColumn दूर करने के लिए कभी नहीं, यह गलत सुझाव है, बजाय करने के लिए उपयोग में निर्मित विधि JTable#removeColumn(TableColumn aColumn),

  • नोटिस, इस विधि केवल दृश्य से इस स्तंभ को निकालने, मॉडल में है हटाया स्तंभ अभी भी प्रस्तुत करता है, और आपको लगता है कि वापस कर सकते हैं का उपयोग करके, दृश्य हटा दिया स्तंभ JTable#addColumn(TableColumn aColumn)

संपादित

enter image description hereenter image description hereenter image description hereenter image description here

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.Font; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Stack; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.WindowConstants; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.table.TableColumn; 
import javax.swing.table.TableColumnModel; 

public class TableRowHeight { 

    private static final long serialVersionUID = 1L; 
    private JFrame frame = new JFrame("p*s*s*s*s*t*t"); 
    private String[] columnNames = {"one", "two", "Playing with", "four", "five",}; 
    private String[][] data = { 
     {"aaaaaa", "bbbbbb", "cccccc", "dddddd", "eeeeeee",}, 
     {"bbbbbb", "cccccc", "dddddd", "eeeeeee", "aaaaaa",}, 
     {"cccccc", "dddddd", "eeeeeee", "aaaaaa", "bbbbbb",}, 
     {"dddddd", "eeeeeee", "aaaaaa", "bbbbbb", "cccccc",}, 
     {"eeeeeee", "aaaaaa", "bbbbbb", "cccccc", "dddddd",}}; 
    private JTable table = new JTable(new DefaultTableModel(data, columnNames)); 
    private TableColumnModel tcm = table.getColumnModel(); 
    private Stack<TableColumn> colDeleted = new Stack<TableColumn>(); 
    private JButton restoreButton = new JButton("Restore Column Size"); 
    private JButton hideButton = new JButton("Set Column Size to Zero"); 
    private JButton deleteButton = new JButton("Delete Column"); 
    private JButton addButton = new JButton("Restore Column"); 

    public TableRowHeight() { 
     table.setRowMargin(4); 
     table.setRowHeight(30); 
     table.setFont(new Font("SansSerif", Font.BOLD + Font.PLAIN, 20)); 
     JScrollPane scrollPane = new JScrollPane(table); 
     for (int i = 0; i < (tcm.getColumnCount()); i++) { 
      tcm.getColumn(i).setPreferredWidth(100); 
     } 
     table.setPreferredScrollableViewportSize(table.getPreferredSize()); 
     restoreButton.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) { 
       tcm.getColumn(2).setPreferredWidth(100); 
      } 
     }); 
     hideButton.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) { 
       tcm.getColumn(2).setPreferredWidth(000); 
      } 
     }); 
     deleteButton.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) { 
       if (table.getColumnCount() > 0) { 
        TableColumn colToDelete = table.getColumnModel().getColumn(table.getColumnCount() - 1); 
        table.removeColumn(colToDelete); 
        table.validate(); 
        colDeleted.push(colToDelete); 
        addButton.setEnabled(true); 
       } else { 
        deleteButton.setEnabled(false); 
       } 
      } 
     }); 
     addButton.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) { 
       if (colDeleted.size() > 0) { 
        table.addColumn(colDeleted.pop()); 
        table.validate(); 
        deleteButton.setEnabled(true); 
       } else { 
        addButton.setEnabled(false); 
       } 
      } 
     }); 
     JPanel btnPanel = new JPanel(); 
     btnPanel.add(hideButton); 
     btnPanel.add(restoreButton); 
     btnPanel.add(deleteButton); 
     btnPanel.add(addButton); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     frame.add(scrollPane, BorderLayout.CENTER); 
     frame.add(btnPanel, BorderLayout.SOUTH); 
     frame.pack(); 
     frame.setLocation(150, 150); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      public void run() { 
       TableRowHeight frame = new TableRowHeight(); 
      } 
     }); 
    } 
} 

EDIT2

आप भी

JTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
JTable.getTableHeader().setReorderingAllowed(false); 
+0

धन्यवाद श्री mKorbel जाँच करने के लिए है, लेकिन आप मेरे कोड पर गौर कृपया कर सकते हैं। क्या इसमें कोई बात गलत है? चौड़ाई को शून्य पर सेट करना चाहिए। –

+1

@ आशीष पंचोली कृपया मेरा संपादन देखें, क्या हमने इसके बारे में बात की :-) – mKorbel

+0

धन्यवाद श्री एमकोरबेल। अब आपका नमूना कोड देखने के बाद यह स्पष्ट है। केस हल हो गया। –

4

अगर इसे हटाया जाना चाहिए, और न केवल छुपाया गया है: इसे तालिका-मॉडल से हटा दें। यदि इसे केवल छुपाया जाना चाहिए और बाद में दिखाया गया है, तो आप TableColumnModel

से तालिका कॉलम को हटा सकते हैं कॉलम ऊंचाई 0 बनाना थोड़ा बोगस है।

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

  • कोई संबंधित समस्या नहीं^_^