2012-04-20 112 views
0

我使用下面粘貼的代碼,在JTable顯示後延遲5秒來調整列寬。但是,當我運行「TestColumnResizer.java」時,它顯示錯誤「java.lang.NoClassDefFoundError」,主要未找到。我如何修改代碼以使其運行?或者我怎樣才能在其他類中調用TestColumnResizer程序?調整JTable列的大小以適合表格內容

public class ColumnResizer { 
    public static void adjustColumnPreferredWidths(JTable table) { 
     // strategy - get max width for cells in column and 
     // make that the preferred width 
     TableColumnModel columnModel = table.getColumnModel(); 
     for (int col = 0; col < table.getColumnCount(); col++) { 

      int maxwidth = 0; 
      for (int row = 0; row < table.getRowCount(); row++) { 
       TableCellRenderer rend = table.getCellRenderer(row, col); 
       Object value = table.getValueAt(row, col); 
       Component comp = rend.getTableCellRendererComponent(table, 
         value, false, false, row, col); 
       maxwidth = Math.max(comp.getPreferredSize().width, maxwidth); 
      } // for row 
      TableColumn column = columnModel.getColumn(col); 
      column.setPreferredWidth(maxwidth); 
     } // for col 
    } 
} 

// Testing automatic column sizing 

public class TestColumnResizer { 
    final static Object[][] TABLE_DATA = { 
      { new Integer(1), "ONJava", "http://www.onjava.com/" }, 
      { new Integer(2), "Joshy's Site", "http://www.joshy.org/" }, 
      { new Integer(3), "Anime Weekend Atlanta", 
        "http://www.awa-con.com/" }, 
      { new Integer(4), "QTJ book", 
        "http://www.oreilly.com/catalog/quicktimejvaadn/" } }; 

    final static String[] COLUMN_NAMES = { "Count", "Name", "URL" }; 

    public static void main(String[] args) { 
     // 142 mac l&f has a header bug - force metal for today 
     try { 

      UIManager.setLookAndFeel(UIManager 
        .getCrossPlatformLookAndFeelClassName()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     DefaultTableModel mod = new DefaultTableModel(TABLE_DATA, COLUMN_NAMES); 
     JTable table = new JTable(mod); 
     JScrollPane pane = 

     new JScrollPane(table, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, 
       ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
     JFrame frame = new JFrame("JTable Column Widths"); 
     frame.getContentPane().add(pane); 
     frame.pack(); 
     frame.setVisible(true); 

     try { 
      Thread.sleep(5000); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     // now get smart about col widths 
     final JTable fTable = table; 
     SwingUtilities.invokeLater(new Runnable() { 

      public void run() { 
       ColumnResizer.adjustColumnPreferredWidths(fTable); 
       fTable.revalidate(); 
      } 
     }); 
    } 
} 

回答

2

從我可以看到沒有錯的代碼的工作,只是類的方式定義。

如果這是全部在一個類文件中,那麼你將得到一個錯誤。要糾正這只是編輯類修飾符是這樣的:

import java.awt.Component; 
import javax.swing.*; 
import javax.swing.table.*; 

//Testing automatic column sizing 
public class TestColumnResizer { 
    final static Object[][] TABLE_DATA = { 
      { new Integer(1), "ONJava", "http://www.onjava.com/" }, 
      { new Integer(2), "Joshy's Site", "http://www.joshy.org/" }, 
      { new Integer(3), "Anime Weekend Atlanta", 
        "http://www.awa-con.com/" }, 
      { new Integer(4), "QTJ book", 
        "http://www.oreilly.com/catalog/quicktimejvaadn/" } }; 

    final static String[] COLUMN_NAMES = { "Count", "Name", "URL" }; 

    public static void main(String[] args) { 
     // 142 mac l&f has a header bug - force metal for today 
     try { 

      UIManager.setLookAndFeel(UIManager 
        .getCrossPlatformLookAndFeelClassName()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     DefaultTableModel mod = new DefaultTableModel(TABLE_DATA, COLUMN_NAMES); 
     JTable table = new JTable(mod); 
     JScrollPane pane = 

     new JScrollPane(table, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, 
       ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
     JFrame frame = new JFrame("JTable Column Widths"); 
     frame.getContentPane().add(pane); 
     frame.pack(); 
     frame.setVisible(true); 

     try { 
      Thread.sleep(5000); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     // now get smart about col widths 
     final JTable fTable = table; 
     SwingUtilities.invokeLater(new Runnable() { 

      public void run() { 
       ColumnResizer.adjustColumnPreferredWidths(fTable); 
       fTable.revalidate(); 
      } 
     }); 
    } 
} 


class ColumnResizer { 
    public static void adjustColumnPreferredWidths(JTable table) { 
     // strategy - get max width for cells in column and 
     // make that the preferred width 
     TableColumnModel columnModel = table.getColumnModel(); 
     for (int col = 0; col < table.getColumnCount(); col++) { 

      int maxwidth = 0; 
      for (int row = 0; row < table.getRowCount(); row++) { 
       TableCellRenderer rend = table.getCellRenderer(row, col); 
       Object value = table.getValueAt(row, col); 
       Component comp = rend.getTableCellRendererComponent(table, 
         value, false, false, row, col); 
       maxwidth = Math.max(comp.getPreferredSize().width, maxwidth); 
      } // for row 
      TableColumn column = columnModel.getColumn(col); 
      column.setPreferredWidth(maxwidth); 
     } // for col 
    } 
} 

如果不是在同一個類文件不是嘗試:http://www.tech-recipes.com/rx/826/java-exception-in-thread-main-javalangnoclassdeffounderror/。基本上,你的類路徑可能會有問題。

不要擔心,但代碼似乎執行您指定的一切!

相關問題