2010-04-30 5 views
3

Je rencontre un petit problème (je suppose) d'affichage du panneau JTable. Je classe contient tableau d'objets avec:ne peut pas afficher JTable

public class Item 

{ 

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

} 

est ici la classe table contient les 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); 

    } 

} 

Le programme principal est:

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

Je n'ai reçu aucune erreur/warning, mais je ne vois toujours pas de table. Quelqu'un peut-il me dire ce qui cause le problème?

Merci.

+0

@Edan: Veuillez essayer d'améliorer la mise en forme de votre code. Utilisez 'Code Sample (Ctrl + K)' au lieu de 'Blockquote (Ctrl + q)'. –

+0

je vais la prochaine fois ... – firestruq

+0

Je le veux cette fois que j'ai des erreurs de compilation .. Vous pouvez toujours modifier votre code .. – bragboy

Répondre

3

Je ne peux pas dire ce qui a mal tourné. Mais j'ai un peu changé votre code (puisqu'il y avait des erreurs de compilation)

Cela fonctionne très bien pour moi. Voici la capture d'écran

Item

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

Votre principale classe de table

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

Si je montre seulement la table (Init) donc tout va bien .. mais le problème commence chaque fois que je définis la valeur pour chaque paramètre de l'objet. Vous pourriez avoir une idée de comment résoudre ce problème? (Je veux montrer la table avec le paramètre qui est réglé pendant le programme lui-même - par exemple si j'entre un nouvel article, alors je dois entrer les paramètres Description (Chaîne), type (Enum) et prix (Float) ... Merci – firestruq

2

par exemple si je saisis nouvel élément, puis je dois entrer les paramètres de Description (String) , type (Enum) et prix (Float) ...

Pour ajouter une nouvelle ligne de données, vous devez utiliser la méthode addRow (...) du DefaultTableModel.

Toutes les mises à jour doivent être effectuées sur le modèle et non sur le tableau utilisé pour créer le modèle.