在Java上找不到符号错误?

问题描述:

我收到此错误:在Java上找不到符号错误?

symbol : constructor JTable(float[][],java.lang.String[]) 
    location: class javax.swing.JTable 
    table = new JTable(dataValues, columnNames); 
下面

是代码

import java.awt.*; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.io.*; 
import java.util.ArrayList; 
import javax.swing.table.*; 

public class benchtesting extends JFrame 
{ 

    private  JTabbedPane tabbedPane; 
    private  JPanel  panel1; 
    private  JPanel  panel2; 
    private  JPanel  panel3; 
private JTable table; 
    private JScrollPane scrollPane; 


    public static void main(String args[]) 
    { 
     benchtesting mainFrame = new benchtesting(); 
     mainFrame.setVisible(true); 
    } 

public benchtesting() 
    { 

     setSize(280,200); 
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     setLocation(1300,280); 
     setTitle("Photoreceptor Analysis"); 

     JPanel topPanel = new JPanel(); 
     topPanel.setLayout(new BorderLayout()); 
     getContentPane().add(topPanel); 

     // Create the tab pages 
     createPage1(); 
    // createPage2(); 
    // createPage3(); 

     // Create a tabbed pane 
     tabbedPane = new JTabbedPane(); 
     tabbedPane.addTab("Table", panel1); 
     tabbedPane.addTab("Intensity Map", panel2); 
     tabbedPane.addTab("Notes", panel3); 
     topPanel.add(tabbedPane, BorderLayout.CENTER); 
} 


    public void createPage1() 
    { 

panel1 = new JPanel(); 
     panel1.setLayout(new BorderLayout()); 

    float dataValues_all[]= new float[400]; 

BufferedReader inputFile2=null; 
BufferedReader inputFile=null; 

      try { 
    FileReader freader =new FileReader("results.txt"); 
     inputFile2 = new BufferedReader(freader); 


    String read = ""; 
    String number =""; 

    for (int linenum=0; linenum<400; linenum++) { 

    read = inputFile2.readLine(); 


    if(read != null && read.startsWith("D")) 
    { 

       number = read.substring(9,15); 
       float real_numbers = Float.parseFloat(number); 

      real_numbers= real_numbers*2817217; 
      System.out.println(Math.round(real_numbers)+" cells/mm^2"); 
     dataValues_all[linenum] = real_numbers; 
    } 
     } 

     // System.out.println("hmm "+dataValues_all[398]); 

     String columnNames[] = {"1","2","3","4","5","6","7","8","9","10"}; 
    float dataValues[][]= new float [1][10]; //1 row, 10 coloumns 


dataValues[0][0] = dataValues_all[2]; 
dataValues[0][1] = dataValues_all[6]; 
dataValues[0][2] = dataValues_all[10]; 
dataValues[0][3] = dataValues_all[14]; 
dataValues[0][4] = dataValues_all[18]; 
dataValues[0][5] = dataValues_all[22]; 
dataValues[0][6] = dataValues_all[26]; 
dataValues[0][7] = dataValues_all[30]; 
dataValues[0][8] = dataValues_all[34]; 
dataValues[0][9] = dataValues_all[38]; 


table = new JTable(dataValues, columnNames); 

     scrollPane = new JScrollPane(table); 
panel1.add(scrollPane, BorderLayout.CENTER); 



     } catch(Exception y) { y.printStackTrace(); } 

}} 
+0

你在编译时遇到这个错误吗?你是否在运行时获得它?你的类路径是什么样的?细节,我们需要它们。 – 2011-01-13 18:05:13

+0

仅供参考:编译在`table = new JTable(dataValues,columnNames);`的第108行失败。 – slartidan 2011-01-13 18:07:58

JTable的构造函数需要参数(Object[][] rowData, Object[] columnNames)。所以当调用该构造函数时,您需要使用该类型的值调用它。

传递String[]作为Object[]是没有问题的(因为StringObject,但经过float[][]作为Object[][]是无效的(因为float不是一个Object)。

随着Java5中的“拳”原始类型(如float)转化为包装对象(如Float)成为可能,这意味着Float a = 0.1f;有效,但装箱不适用于阵列。

对于您的问题,最好的解决方案可能是将您的变量dataValues更改为Float[][]

不能使用基本类型的多维数组。你需要使用一个多维的对象数组。

这是无效:

float[][] arr; 

这是有效的:

Float[][] arr; 
+0

这根本不是真的。你可以做float [] []数组或int [] []就好了。你将它与List或Collection混淆。 – 2011-01-13 18:16:03

没有为JTable没有匹配的构造,其预期的第一个参数延伸Object[][]float是原始类型,不延伸ObjectFloat是一个对象。改用它。

float是原始类型,不是对象。

查看Javadocs。您可能需要制作一个Float[][](对象)

JTable类实际上没有接受2维浮点数组和常规字符串数组的构造函数。它具有构造器

JTable(Object[], String[])

因此,只要改变

float dataValues[][]= new float [1][10];

Object dataValues[][]= new Object [1][10];

和享受。说“谢谢”自动装箱...

JTable(Object[][] rowData, Object[] columnNames) 

http://download.oracle.com/javase/1.5.0/docs/api/javax/swing/JTable.html

构造JTable二维数组rowData中显示的值,其列名称为columnNames。

如前所述,构造函数带有对象,不能传递原始的多维数组。