2012-04-20 8 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/. 기본적으로 클래스 경로에 문제가있을 수 있습니다.

걱정하지 마세요. 코드가 지정한 모든 것을 수행 한 것 같습니다.

관련 문제