Problema jtable

di il
4 risposte

Problema jtable

Sto creando un'applicazione che nella schermata principale mostri l'elenco dei clienti presenti nel db. Ho letto articoli, documentazione ufficiale ma nulla, la jtable non si visualizza.
Ho creato anche una stringa di titoli di prova e elementi di prova caricati facendo
tabella = new JTable(data, colonne);
pane = new JScrollPane(tabella);

E poi aggiunto al contentpane del frame.. Ma nulla non si visualizza.. Non capisco dove posso sbagliare con una cosa così semplice

4 Risposte

  • Re: Problema jtable

    Non sono io l'autore di questo codice, ma l'ho provato per una cosa che interessava a mè e funziona

    import java.awt.*;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.*;
    import javax.swing.border.LineBorder;
    import javax.swing.table.*;

    public class TablePrepareRenderer extends JFrame {

    private static final long serialVersionUID = 1L;
    private JTable table;
    private Date maturityDate = new Date();
    private Date todayDate = new Date();
    private SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
    private Date tableDate = new Date();
    private String strDate = "";
    private Date modifDate = new Date();
    private Calendar cal;

    public TablePrepareRenderer() {
    Object[] columnNames = {"Type", "Company", "Shares", "Price", "Date"};
    Object[][] data = {
    {"Buy", "IBM", new Integer(1000), new Double(80.50), new Date()},
    {"Sell", "MicroSoft", new Integer(2000), new Double(6.25), new Date()},
    {"Sell", "Apple", new Integer(3000), new Double(7.35), new Date()},
    {"Buy", "Nortel", new Integer(4000), new Double(20.00), new Date()}
    };
    DefaultTableModel model = new DefaultTableModel(data, columnNames) {

    private static final long serialVersionUID = 1L;

    @Override
    public Class getColumnClass(int column) {
    return getValueAt(0, column).getClass();
    }
    };
    table = new JTable(model) {

    private static final long serialVersionUID = 1L;

    @Override
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
    Component c = super.prepareRenderer(renderer, row, column);
    /*int firstRow = 0;
    int lastRow = table.getRowCount() - 1;
    if (row == lastRow) {
    ((JComponent) c).setBackground(Color.red);
    } else if (row == firstRow) {
    ((JComponent) c).setBackground(Color.blue);
    } else {
    ((JComponent) c).setBackground(table.getBackground());
    }*/
    if (!isRowSelected(row)) {
    if (table.getColumnCount() >= 0) {
    String type = (String) getModel().getValueAt(row, 0);
    c.setBackground("Buy".equals(type) ? Color.YELLOW : Color.GREEN);
    //
    maturityDate = new Date();
    todayDate = new Date();
    strDate = sdf.format(todayDate);
    try {
    todayDate = sdf.parse(strDate);
    } catch (ParseException ex) {
    Logger.getLogger(TablePrepareRenderer.class.getName()).log(Level.SEVERE, null, ex);
    }
    tableDate = (Date) table.getValueAt(row, 4);
    strDate = sdf.format(tableDate);
    if (strDate != null) {
    if (!strDate.isEmpty()) {
    try {
    maturityDate = sdf.parse(strDate);
    } catch (ParseException ex) {
    Logger.getLogger(TablePrepareRenderer.class.getName()).log(Level.SEVERE, null, ex);
    }
    if (maturityDate != null) {
    int mmDiffDealToValue = (maturityDate).compareTo(todayDate);
    if (((mmDiffDealToValue < 0))) {
    c.setBackground(Color.orange);
    c.setFont(new Font("Serif", Font.BOLD, 12));
    }
    }
    }
    }
    //
    }
    }
    if (isRowSelected(row) && isColumnSelected(column)) {
    ((JComponent) c).setBorder(new LineBorder(Color.red));
    }
    return c;
    }
    };
    modifyDateInTable();
    table.setPreferredScrollableViewportSize(table.getPreferredSize());
    JScrollPane scrollPane = new JScrollPane(table);
    getContentPane().add(scrollPane);
    }

    private void modifyDateInTable() {
    Calendar c = Calendar.getInstance();
    c.setTime(modifDate);
    c.add(Calendar.DATE, - 1);
    modifDate = c.getTime();
    table.setValueAt(modifDate, 0, 4);
    c.setTime(modifDate);
    c.add(Calendar.DATE, +5);
    modifDate = c.getTime();
    table.setValueAt(modifDate, 1, 4);
    c.setTime(modifDate);
    c.add(Calendar.DATE, +1);
    modifDate = c.getTime();
    table.setValueAt(modifDate, 1, 4);
    c.setTime(modifDate);
    c.add(Calendar.DATE, - 16);
    modifDate = c.getTime();
    table.setValueAt(modifDate, 3, 4);
    }

    public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {

    @Override
    public void run() {
    TablePrepareRenderer frame = new TablePrepareRenderer();
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    frame.pack();
    frame.setLocation(150, 150);
    frame.setVisible(true);
    }
    });
    }
    }
  • Re: Problema jtable

    Ho provato sia con i table model che semplicemente a creare la tabella. Ma non visualizza. Non mi appare la tabella
  • Re: Problema jtable

    LucaM ha scritto:


    Non sono io l'autore di questo codice
    E meno male ... perché già solo con quella estensione di JTable tramite anonymous inner class lunga più di 50 righe è inguardabile.
  • Re: Problema jtable

    @andbin

    Non ho un know-how in java cosi' approfondito per giudicare, mentre a quanto ho visto dal link nella tua firma tu si, quindi mi fido..

    @squizzi

    squizzi ha scritto:


    Ho provato sia con i table model che semplicemente a creare la tabella. Ma non visualizza. Non mi appare la tabella
    Se usi netbeans come mè (anche eclipse và bene ovviamente), è sufficiente creare un nuovo progetto JavaApplication con la Main Class, poi ci incolli il codice che ho postato e premi play e la vedi
Devi accedere o registrarti per scrivere nel forum
4 risposte