2014-11-17 44 views
1

我創建了下表,它爲我設置標題列。基本上,它看起來像這樣:調整標題表中的列值以顯示名稱

enter image description here

正如你所看到的rowNamesString[] rowNames = {"Production Valuation", "Sales Production", "R&D Department", "Cost Valuation"}; 值不完全顯示。

我試圖設置:

headerTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
    headerTable.getColumnModel().getColumn(0).setPreferredWidth(360); 

然而,沒有什麼變化。這裏是一個示例程序:

import java.awt.Color; 
    import java.awt.Component; 
    import java.awt.Dimension; 
    import java.awt.EventQueue; 
    import java.awt.Font; 
    import java.util.Calendar; 

    import javax.swing.JFrame; 
    import javax.swing.JLabel; 
    import javax.swing.JScrollPane; 
    import javax.swing.JTable; 
    import javax.swing.SwingConstants; 
    import javax.swing.UIManager; 
    import javax.swing.UnsupportedLookAndFeelException; 
    import javax.swing.event.ListSelectionEvent; 
    import javax.swing.event.ListSelectionListener; 
    import javax.swing.event.RowSorterEvent; 
    import javax.swing.event.RowSorterListener; 
    import javax.swing.table.DefaultTableModel; 
    import javax.swing.table.TableCellRenderer; 
    import javax.swing.table.TableColumnModel; 
    import javax.swing.table.TableModel; 
    import javax.swing.table.TableRowSorter; 

    public class JTableRowHeader { 

     private JFrame frame = new JFrame("JTable"); 
     private JScrollPane scrollPane; 
     private JTable tableAnalytics; 
     private DefaultTableModel model; 
     private DefaultTableModel model1; 
     private TableRowSorter<TableModel> sorter; 
     private JTable headerTable; 

     public JTableRowHeader() { 

      analyticsTable(); 
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
      frame.add(scrollPane); 

      frame.pack(); 
      frame.setLocation(150, 150); 
      frame.setVisible(true); 
     } 

     /** 
     * Is the analytics table for each values. 
     */ 
     public void analyticsTable() { 
      String[] columnNames = {"2012", "2013", "2014"}; 
      String[] rowNames = {"Production Valuation", "Sales Production", "R&D Department", "Cost Valuation"}; 

      model1 = new DefaultTableModel(rowNames.length, columnNames.length) { 
       /** 
       * UUID 
       */ 
       private static final long serialVersionUID = 8538648271391086030L; 

       @Override 
       public boolean isCellEditable(int row, int col) { 
        return false; 
       } 
      }; 

      tableAnalytics = new JTable(model1); 
      //set Values 
      for (int i = 0; i < model1.getRowCount(); i++) { 
       for (int ii = 0; ii < model1.getColumnCount(); ii++) { 
        model1.setValueAt(i, i, ii); 
       } 
      } 

      TableColumnModel tcm = tableAnalytics.getColumnModel(); 
      for (int k = 0; k < tcm.getColumnCount(); k++) { 
       tcm.getColumn(k).setHeaderValue(columnNames[k]); 
      } 

      sorter = new TableRowSorter<TableModel>(tableAnalytics.getModel()); 
      tableAnalytics.setRowSorter(sorter); 
      model = new DefaultTableModel() { 
       private static final long serialVersionUID = 12312432141L; 

       @Override 
       public int getColumnCount() { 
        return 1; 
       } 

       @Override 
       public boolean isCellEditable(int row, int col) { 
        return false; 
       } 

       @Override 
       public int getRowCount() { 
        return tableAnalytics.getRowCount(); 
       } 

       @Override 
       public Class<?> getColumnClass(int colNum) { 
        switch (colNum) { 
        case 0: 
         return String.class; 
        default: 
         return super.getColumnClass(colNum); 
        } 
       } 
      }; 
      headerTable = new JTable(model); 
      for (int o = 0; o < rowNames.length; o++) { 
       headerTable.setValueAt(rowNames[o], o, 0); 
      } 

      headerTable.setShowGrid(false); 
      headerTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
      headerTable.getColumnModel().getColumn(0).setPreferredWidth(360); 
      headerTable.setPreferredScrollableViewportSize(new Dimension(50, 0)); 
      headerTable.getColumnModel().getColumn(0).setPreferredWidth(50); 
      headerTable.getColumnModel().getColumn(0).setCellRenderer(new TableCellRenderer() { 
       @Override 
       public Component getTableCellRendererComponent(JTable x, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 

        boolean selected = tableAnalytics.getSelectionModel().isSelectedIndex(row); 
        Component component = tableAnalytics.getTableHeader().getDefaultRenderer().getTableCellRendererComponent(tableAnalytics, value, false, false, -1, -2); 
        ((JLabel) component).setHorizontalAlignment(SwingConstants.CENTER); 
        if (selected) { 
         component.setFont(component.getFont().deriveFont(Font.BOLD)); 
         component.setForeground(Color.red); 
        } else { 
         component.setFont(component.getFont().deriveFont(Font.PLAIN)); 
        } 
        return component; 
       } 
      }); 
      tableAnalytics.getRowSorter().addRowSorterListener(new RowSorterListener() { 
       @Override 
       public void sorterChanged(RowSorterEvent e) { 
        model.fireTableDataChanged(); 
       } 
      }); 
      tableAnalytics.getSelectionModel().addListSelectionListener(new ListSelectionListener() { 
       @Override 
       public void valueChanged(ListSelectionEvent e) { 
        model.fireTableRowsUpdated(0, model.getRowCount() - 1); 
       } 
      }); 
      scrollPane = new JScrollPane(tableAnalytics); 
      scrollPane.setRowHeaderView(headerTable); 
      tableAnalytics.setPreferredScrollableViewportSize(tableAnalytics.getPreferredSize()); 
     } 

     public static void main(String[] args) { 
      try { 
       UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
      } catch (ClassNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (InstantiationException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IllegalAccessException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (UnsupportedLookAndFeelException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      EventQueue.invokeLater(new Runnable() { 
       @Override 
       public void run() { 
        @SuppressWarnings("unused") 
        JTableRowHeader TestTableRowHeader = new JTableRowHeader(); 
       } 
      }); 
     } 
    } 

任何建議我做錯了什麼?

我很感謝您的回答!

+0

'setPreferredWidth(360);'給出比更寬表格的**圖片**(292px),您如何期望Swing兌現(使用)該寬度? –

+0

@AndrewThompson Thx爲您解答!我只想測試這是否會調整列的大小。然而,沒有什麼變化...... – mrquad

+1

*「我只是想測試..」*確定。測試很好。但是你測試了* 80或90等其他*值嗎?運行時更有可能提供的值? –

回答

2

組滾動面板的rowHeader尺寸等,

scrollPane.getRowHeader().setPreferredSize(new Dimension(120, 50)); 

添加上面的語句之後

scrollPane.setRowHeaderView(headerTable); 

和註釋行

//headerTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);