2012-04-20 14 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

私は、コードの作業に間違いがないことを見てから、クラスが定義されている方法だけです。

これが1つのクラスファイル内にある場合は、エラーが発生します。 http://www.tech-recipes.com/rx/826/java-exception-in-thread-main-javalangnoclassdeffounderror/:それはすべて試すよりも1つのクラスファイルに含まれていない場合

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 
    } 
} 

:この問題を修正するにはちょうどこのようなクラスの修飾子を編集します。基本的にクラスパスに問題がある可能性があります。

心配する必要はありませんが、コードは指定したすべての処理を実行します。

関連する問題