2010-04-30 3 views
3

У меня небольшая проблема (я думаю) показать панель JTable. я класс содержит массив объектов с:не может показать JTable

public class Item 

{ 

    String itemDesc = ""; 
    float price = 0; 
    private itemType enmItemType; 
    Object[][] data = {{itemDesc, enmItemType , new Float(price)}}; 
    . 
    . 
    . 
    . 

} 

здесь класс Таблица содержит в JTable:

class Table extends JFrame 
{ 
    // Instance attributes used in this example 
    private JPanel  topPanel; 
    private JTable  table; 
    private JScrollPane scrollPane; 
    private JButton  update_Button; 

    // Constructor of main frame 
    public Table() 
    { 
    // Set the frame characteristics 
    setTitle("Add new item"); 
    setSize(300, 200); 
    setBackground(Color.gray); 

    // Create a panel to hold all other components 
    topPanel = new JPanel(); 
    topPanel.setLayout(new BorderLayout()); 
    getContentPane().add(topPanel); 

    // Create columns names 
    String columnNames[] = {"Item Description", "Item Type", "Item Price"}; 

    // Create some data 
    Object dataValues[][] ; 
    Item itm = new Item(); 
    dataValues = itm.data; 

    // Create a new table instance 
    table = new JTable(dataValues, columnNames); 

    //////////////////////////// 

    JComboBox itemTypeCombobox = new JComboBox(); 
     TableColumn column1 = table.getColumnModel().getColumn(1); 
    column1.setCellEditor(new DefaultCellEditor(itemTypeCombobox)); 

    ////////////////////////////  

    // Add the table to a scrolling pane 
    scrollPane = new JScrollPane(table); 
    topPanel.add(scrollPane, BorderLayout.CENTER); 
    JButton button = new JButton("Add Item"); 
    topPanel.add(button, BorderLayout.SOUTH); 

    } 

} 

Основная программа:

public static void main(String[] args) 
{ 
    Menu m = new Menu(); 
    m.chooseMenu(); 

    // Create an instance of the test application 
    Table mainFrame = new Table(); 
    mainFrame.setVisible(true); 
} 

Я не получал никакой ошибки/warning, но все же я не вижу ни одной таблицы. Может ли кто-нибудь направить меня, что вызывает проблему?

Спасибо.

+0

@Edan: Пожалуйста, попробуйте улучшить форматирование вашего кода. Используйте 'Code Sample (Ctrl + K)' вместо 'Blockquote (Ctrl + q)'. –

+0

я буду в следующий раз ... – firestruq

+0

Я хочу это на этот раз, так как у меня есть ошибки в компиляции. Вы все еще можете редактировать свой код. – bragboy

ответ

3

Я не могу сказать, что пошло не так. Но я немного изменил код (поскольку он имел ошибки времени компиляции)

Это отлично работает для меня. Ниже приведен скриншот

Item

public class Item{ 
    String itemDesc = ""; 
    float price = 0; 
    Object[][] data = {{"test","test","test"}, 
      {"test","test","test"}, 
      {"test","test","test"}, 
      {"test","test","test"}}; 
} 

Ваш главный класс таблицы

package test; 

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Menu; 

import javax.swing.DefaultCellEditor; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.TableColumn; 

public class Table extends JFrame 

{ 
    // Instance attributes used in this example 

    private JPanel topPanel; 
    private JTable table; 
    private JScrollPane scrollPane; 
    private JButton update_Button; 

    // Constructor of main frame 
    public Table() { 
     // Set the frame characteristics 
     setTitle("Add new item"); 
     setSize(300, 200); 
     setBackground(Color.gray); 

     // Create a panel to hold all other components 
     topPanel = new JPanel(); 
     topPanel.setLayout(new BorderLayout()); 
     getContentPane().add(topPanel); 

     // Create columns names 
     String columnNames[] = { "Item Description", "Item Type", "Item Price" }; 

     // Create some data 
     Object dataValues[][]; 
     Item itm = new Item(); 
     dataValues = itm.data; 

     // Create a new table instance 
     table = new JTable(dataValues, columnNames); 

     // ////////////////////////// 

     JComboBox itemTypeCombobox = new JComboBox(); 
     TableColumn column1 = table.getColumnModel().getColumn(1); 
     column1.setCellEditor(new DefaultCellEditor(itemTypeCombobox)); 

     // ////////////////////////// 

     // Add the table to a scrolling pane 
     scrollPane = new JScrollPane(table); 
     topPanel.add(scrollPane, BorderLayout.CENTER); 
     JButton button = new JButton("Add Item"); 
     topPanel.add(button, BorderLayout.SOUTH); 

    } 

    public static void main(String[] args) { 
     Menu m = new Menu(); 
     // Create an instance of the test application 
     Table mainFrame = new Table(); 
     mainFrame.setVisible(true); 
    } 

} 
+0

Если я покажу только таблицу (Init), чтобы все было в порядке .. но проблема начинается, когда я устанавливаю значение для каждого параметра объекта. Возможно, у вас есть идея, как решить эту проблему? (Я хочу показать таблицу с параметром, который устанавливается во время самой программы - например, если я ввожу новый элемент, тогда мне нужно ввести параметры Description (String), type (Enum) и price (Float) ... благодаря – firestruq

2

, например, если я ввожу новый элемент, а затем мне нужно ввести параметры Описание (String) , тип (Enum) и цена (плавающая) ...

Чтобы добавить новую строку данных, вам необходимо использовать метод addRow (...) метода DefaultTableModel.

Все обновления должны быть выполнены с использованием модели, а не массива, используемого для создания модели.