2011-01-13 103 views
3

我收到此錯誤:在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

回答

2

JTable的構造函數需要參數(Object[][] rowData, Object[] columnNames)。所以當調用該構造函數時,您需要使用該類型的值調用它。

傳遞String[]作爲Object[]是沒有問題的(因爲StringObject,但經過float[][]作爲Object[][]是無效的(因爲float不是一個Object)。

隨着Java5中的「拳」原始類型(如float)轉化爲包裝對象(如Float)成爲可能,這意味着Float a = 0.1f;有效,但裝箱不適用於陣列。

對於您的問題,最好的解決方案可能是將您的變量dataValues更改爲Float[][]

2

不能使用基本類型的多維數組。你需要使用一個多維的對象數組。

這是無效:

float[][] arr; 

這是有效的:

Float[][] arr; 
+0

這根本不是真的。你可以做float [] []數組或int [] []就好了。你將它與List或Collection混淆。 – 2011-01-13 18:16:03

0

沒有爲JTable沒有匹配的構造,其預期的第一個參數延伸Object[][]float是原始類型,不延伸ObjectFloat是一個對象。改用它。

0

float是原始類型,不是對象。

0

查看Javadocs。您可能需要製作一個Float[][](對象)

0

JTable類實際上沒有接受2維浮點數組和常規字符串數組的構造函數。它具有構造器

JTable(Object[], String[])

因此,只要改變

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

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

和享受。說「謝謝」自動裝箱...