0

我使用下面粘贴的代码在 JTable 显示后延迟 5 秒调整列宽。但是,当我运行“TestColumnResizer.java”时,它显示错误“java.lang.NoClassDefFoundError”,找不到主。如何修改代码以使其运行?或者如何在其他类中调用 TestColumnResizer 程序?

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();
            }
        });
    }
}
4

1 回答 1

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/ 。基本上你的类路径可能有问题。

不过不用担心,代码似乎可以执行您指定的所有操作!

于 2012-04-20T07:11:36.470 回答