Date dans jtable

zarziszita Messages postés 5 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 7 avril 2004 - 24 févr. 2004 à 11:12
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 - 24 févr. 2004 à 14:02
le probleme c'est que je n'arriver pas calcalez le nombre de jour et stocker ca dans la cellule et ensuite trie le tableaux

on java

c'est le code
/*
* Created on 23 févr. 2004
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package creeTableaux;

/**
* @author Sehmimi Mohamed-Hich
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
import java.awt.*;
import creeTableaux.*;
import java.awt.event.*;

import java.util.*;

import java.text.SimpleDateFormat;

import javax.swing.*;

import javax.swing.border.*;

import javax.swing.event.*;

import javax.swing.table.*;

public class ExpenseReport extends JFrame {

protected JTable m_table;

protected ExpenseReportData m_data;

protected JLabel m_title;

public ExpenseReport() {

super("Double A");

setSize(570, 200);

m_data = new ExpenseReportData(this);

m_table = new JTable();

m_table.setAutoCreateColumnsFromModel(false);

m_table.setModel(m_data);

m_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

for (int k = 0; k < ExpenseReportData.m_columns.length; k++) {

TableCellRenderer renderer;

if (k == ExpenseReportData.COL_APPROVED)
renderer = new CheckCellRenderer();

else {

DefaultTableCellRenderer textRenderer =
new DefaultTableCellRenderer();

textRenderer.setHorizontalAlignment(
ExpenseReportData.m_columns[k].m_alignment);

renderer = textRenderer;

}

TableCellEditor editor;

if (k == ExpenseReportData.COL_SEX)
editor =
new DefaultCellEditor(
new JComboBox(ExpenseReportData.SEX));

else if (k == ExpenseReportData.COL_LABLE)
editor =
new DefaultCellEditor(
new JComboBox(ExpenseReportData.LABLE));
else if (k == ExpenseReportData.COL_FONCTION)
editor =
new DefaultCellEditor(
new JComboBox(ExpenseReportData.FONCTION));

else
editor = new DefaultCellEditor(new JTextField());

TableColumn column =
new TableColumn(
k,
ExpenseReportData.m_columns[k].m_width,
renderer,
editor);

m_table.addColumn(column);

}

JTableHeader header = m_table.getTableHeader();

header.setUpdateTableInRealTime(false);

JScrollPane ps = new JScrollPane();

ps.setSize(550, 150);

ps.getViewport().add(m_table);

getContentPane().add(ps, BorderLayout.CENTER);

JPanel p = new JPanel();

p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));

m_title = new JLabel("Total: $", null, JButton.LEFT);

m_title.setForeground(Color.black);

m_title.setAlignmentY(0.5f);

p.add(m_title);

p.add(Box.createHorizontalGlue());

JButton bt = new JButton("Insert before");

bt.setMnemonic('b');

bt.setAlignmentY(0.5f);

ActionListener lst = new ActionListener() {

public void actionPerformed(ActionEvent e) {

int row = m_table.getSelectedRow();

m_data.insert(row);

m_table.tableChanged(
new TableModelEvent(
m_data,
row,
row,
TableModelEvent.ALL_COLUMNS,
TableModelEvent.INSERT));

m_table.repaint();

}

};

bt.addActionListener(lst);

p.add(bt);

bt = new JButton("Insert after");

bt.setMnemonic('a');

bt.setAlignmentY(0.5f);

lst = new ActionListener() {

public void actionPerformed(ActionEvent e) {
int i = 0;
int row = m_table.getSelectedRow();

m_data.insert(row + 1);

m_table.tableChanged(
new TableModelEvent(
m_data,
row + 1,
row + 1,
TableModelEvent.ALL_COLUMNS,
TableModelEvent.INSERT));

m_table.repaint();

}

};

bt.addActionListener(lst);

p.add(bt);

bt = new JButton("Graphe");

bt.setMnemonic('g');

bt.setAlignmentY(0.5f);

lst = new ActionListener() {

public void actionPerformed(ActionEvent e) {

}

};

bt.addActionListener(lst);

p.add(bt);

bt = new JButton("Delete row");

bt.setMnemonic('d');

bt.setAlignmentY(0.5f);

lst = new ActionListener() {

public void actionPerformed(ActionEvent e) {

int row = m_table.getSelectedRow();

if (m_data.delete(row)) {

m_table.tableChanged(
new TableModelEvent(
m_data,
row,
row,
TableModelEvent.ALL_COLUMNS,
TableModelEvent.INSERT));

m_table.repaint();

calcTotal();

}

}

};

bt.addActionListener(lst);

p.add(bt);

getContentPane().add(p, BorderLayout.PAGE_END);

calcTotal();

WindowListener wndCloser = new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

};

addWindowListener(wndCloser);

setVisible(true);

}

public void calcTotal() {

double total = 0;

for (int k = 0; k < m_data.getRowCount(); k++) {
Date date = (Date) m_data.getValueAt(k,ExpenseReportData.COL_DATE);
Date date_fin = (Date) m_data.getValueAt(k,ExpenseReportData.COL_DATE_FIN);

//total = (date.getDay() - date_fin.getDate());
total = (2-1);

};
//je veux la diference soit stockes dans cette ligne
m_title.setText("Total: $" + total);

}

public static void main(String argv[]) {

new ExpenseReport();

}

}

class CheckCellRenderer extends JCheckBox implements TableCellRenderer {

protected static Border m_noFocusBorder;

public CheckCellRenderer() {

super();

m_noFocusBorder = new EmptyBorder(1, 2, 1, 2);

setOpaque(true);

setBorder(m_noFocusBorder);

}

public Component getTableCellRendererComponent(
JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {

if (value instanceof Boolean) {

Boolean b = (Boolean) value;

setSelected(b.booleanValue());

}

setBackground(
isSelected
&& !hasFocus
? table.getSelectionBackground()
: table.getBackground());

setForeground(
isSelected
&& !hasFocus
? table.getSelectionForeground()
: table.getForeground());

setFont(table.getFont());

setBorder(
hasFocus
? UIManager.getBorder("Table.focusCellHighlightBorder")
: m_noFocusBorder);

return this;

}

}

class ExpenseData {
class ColumnData {

public String m_title;

int m_width;

int m_alignment;
/* original ////public ColumnData(String title, int width, int alignment) {

m_title = ( title;

m_width = width;

m_alignment = alignment;*/
public ColumnData(JButton title, int width, int alignment) {
JButton m_title = new JButton();
m_title = (JButton) title;

m_width = width;

m_alignment = alignment;

}

}
public String m_nom;

public String m_prenom;

public Double m_age;

public Integer m_sex;

public Integer m_lable;

public Integer m_fonction;

public Date m_date_fin;

public Date m_date;

public Double m_jour;

public ExpenseData() {

m_nom = "";

m_prenom = "";

m_sex = new Integer(0);

m_lable = new Integer(0);

m_fonction = new Integer(0);

m_date = new Date();

m_date_fin = new Date();

}

public ExpenseData(
String nom,
String prenom,
double age,
int sex,
int lable,
int fonction,
Date date,
Date date_fin,
double jour
) {

m_nom = nom;

m_prenom = prenom;

m_age = new Double(age);

m_sex = new Integer(sex);

m_lable = new Integer(lable);

m_fonction = new Integer(fonction);

m_date = date;

m_date_fin = date;

m_jour = new Double(jour);

}

}

class ColumnData {

public String m_title;

int m_width;

int m_alignment;

public ColumnData(String title, int width, int alignment) {

m_title = new String(title);

m_width = width;

m_alignment = alignment;

}

/**
* @param string
* @param i
* @param j
*/

}

class ExpenseReportData extends AbstractTableModel {

public static final ColumnData m_columns[] =
{
new ColumnData("Nom", 80, JLabel.LEFT),
new ColumnData("Prenom", 80, JLabel.LEFT),
new ColumnData("Age", 80, JLabel.LEFT),
new ColumnData("Sex", 80, JLabel.LEFT),
new ColumnData("Lable", 80, JLabel.LEFT),
new ColumnData("Fonction", 80, JLabel.LEFT),
new ColumnData("Date", 80, JLabel.LEFT),
new ColumnData("Date_fin", 80, JLabel.LEFT),
new ColumnData("Nombre Jour", 80, JLabel.LEFT)};

public static final int COL_NOM = 0;

public static final int COL_PRENOM = 1;

public static final int COL_AGE = 2;

public static final int COL_SEX = 3;

public static final int COL_LABLE = 4;

public static final int COL_FONCTION = 5;

public static final int COL_DATE = 6;

public static final int COL_DATE_FIN = 7;

public static final int COL_NOMBRE_JOUR = 8;

public static final int COL_AMOUNT = 9;

public static final int COL_APPROVED =10 ;

public static final String[] SEX = { "Male", "Femme" };
public static final String[] LABLE =
{ "lable1", "lable2", "lable3", "lable4" };
public static final String[] FONCTION =
{ "fonction1", "fonction2", "fonction3", "fontion4" };

protected ExpenseReport m_parent;

protected SimpleDateFormat m_frm;

protected Vector m_vector;

public ExpenseReportData(ExpenseReport parent) {

m_parent = parent;

m_frm = new SimpleDateFormat("dd/MM/yy");

m_vector = new Vector();

setDefaultData();

}

public void setDefaultData() {

}

public int getRowCount() {

return m_vector == null ? 0 : m_vector.size();

}

public int getColumnCount() {

return m_columns.length;

}
/*public boolean isCellEditable(int row, int col) {
//Note that the data/cell address is constant,
//no matter where the cell appears onscreen.
if (col < 1) {
return false;
} else {
return true;
}
}*/
public String getColumnName(int column) {

return m_columns[column].m_title;

}

public boolean isCellEditable(int nRow, int nCol) {

return true;

}

public Object getValueAt(int nRow, int nCol) {

if (nRow < 0 || nRow >= getRowCount())
return "";

ExpenseData row = (ExpenseData) m_vector.elementAt(nRow);

switch (nCol) {

case COL_DATE :
return m_frm.format(row.m_date);

case COL_DATE_FIN :
return m_frm.format(row.m_date_fin);

case COL_NOMBRE_JOUR :
return row.m_jour;

case COL_NOM :
return row.m_nom;

case COL_PRENOM :
return row.m_prenom;

case COL_AGE :
return row.m_age;

case COL_SEX :
return SEX[row.m_sex.intValue()];

case COL_LABLE :
return LABLE[row.m_lable.intValue()];

case COL_FONCTION :
return FONCTION[row.m_fonction.intValue()];
}

return "";

}

public void setValueAt(Object value, int nRow, int nCol) {

if (nRow < 0 || nRow >= getRowCount())
return;

ExpenseData row = (ExpenseData) m_vector.elementAt(nRow);

String svalue = value.toString();

switch (nCol) {

case COL_DATE :

Date date = null;

try {

date = m_frm.parse(svalue);

} catch (java.text.ParseException ex) {

date = null;

}

if (date == null) {

JOptionPane.showMessageDialog(
null,
svalue + " is not a valid date",
"Warning",
JOptionPane.WARNING_MESSAGE);

return;

}

row.m_date = date;

break;
case COL_DATE_FIN :

Date date_fin = null;

try {

date_fin = m_frm.parse(svalue);

} catch (java.text.ParseException ex) {

date = null;

}

if (date_fin == null) {

JOptionPane.showMessageDialog(
null,
svalue + " is not a valid date",
"Warning",
JOptionPane.WARNING_MESSAGE);

return;

}

row.m_date = date_fin;

break;

case COL_NOMBRE_JOUR :

try {

row.m_jour = new Double(svalue);

} catch (NumberFormatException e) {
break;
}

break;

case COL_AGE :

try {

row.m_age = new Double(svalue);

} catch (NumberFormatException e) {
break;
}

break;

case COL_SEX :

for (int k = 0; k < SEX.length; k++)
if (svalue.equals(SEX[k])) {

row.m_sex = new Integer(k);

break;

}

break;
case COL_LABLE :

for (int k = 0; k < LABLE.length; k++)
if (svalue.equals(LABLE[k])) {

row.m_lable = new Integer(k);

break;

}

break;
case COL_FONCTION :

for (int k = 0; k < FONCTION.length; k++)
if (svalue.equals(FONCTION[k])) {

row.m_fonction = new Integer(k);

break;

}

break;

case COL_NOM :

row.m_nom = svalue;

break;
case COL_PRENOM :

row.m_prenom = svalue;

break;

}

}

public void insert(int row) {

if (row < 0)
row = 0;

if (row > m_vector.size())
row = m_vector.size();

m_vector.insertElementAt(new ExpenseData(), row);

}

public boolean delete(int row) {

if (row < 0 || row >= m_vector.size())
return false;

m_vector.remove(row);

return true;

}

}

momo

1 réponse

kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
24 févr. 2004 à 14:02
Salut,

les valeurs dans la table sont de type String donc tu ne peux pas les caster en Date. Tu dois créer un objet Date à partir de la représentation en chaine de caractères de la date. Rapidement voici une solution (c'est un peu lourd je trouve mais j'ai pas cherché si il y avait quelque chose de plus simple) :
public void calcTotal() {

int total = 0;
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yy");
for (int k = 0; k < m_data.getRowCount(); k++) {
try {
Calendar dateDebut = new GregorianCalendar();
dateDebut.setTime(format.parse((String) m_data.getValueAt(k, ExpenseReportData.COL_DATE)));
Calendar date_fin = new GregorianCalendar();
date_fin.setTime(format.parse((String) m_data.getValueAt(k, ExpenseReportData.COL_DATE_FIN)));

Date totalDate = new Date(date_fin.getTime().getTime() - dateDebut.getTime().getTime());
Calendar date = new GregorianCalendar();
date.setTime(totalDate);
total += date.get(Calendar.DATE) - 1;
} catch (ParseException e) {
System.out.println(e.getMessage());
}

}
//je veux la diference soit stockes dans cette ligne
m_title.setText("Total: $" + total);

}

Il faut utiliser un SimpleDateFormat pour parser ta chaine de caractères et la transformer en Date. Après on crée un calendar qui va représenter la différence en temps entre les 2 dates. Enfin on récupère la valeur. Il y a un -1 après le get(Calendar.DATE) car on veut la différence de jours et non la date. Si il y a 4 jours d'écart la date sera le 5 janvier 1970. Donc 5-1=4 :) .
A noter que ce que j'ai écris ne marche que pour un nombre de jours < 31 (en fait le nombre de jour dans le mois de janvier). A toi d'adapter ...

Pour le reste j'ai pas trop compris ton problème.
0
Rejoignez-nous