zarziszita
Messages postés5Date d'inscriptionmercredi 16 avril 2003StatutMembreDernière intervention 7 avril 2004
-
24 févr. 2004 à 11:12
kirua12
Messages postés1155Date d'inscriptionsamedi 17 janvier 2004StatutMembreDernière intervention29 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.*;
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_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) {
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) {
kirua12
Messages postés1155Date d'inscriptionsamedi 17 janvier 2004StatutMembreDernière intervention29 avril 20118 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 ...