salut, g un gros problM et j'espère ke kelq1 peut m'aidé. c'est vraiment important.
Je dois faire une jtable avec un spinner pour permettre d'entrer des heures et minutes. G fais un tit exemple de code é je comprd po pq ca marche po.
j'ai une tite classe de test->
Mon model de table:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 public class BootClass { public static void main(String[] args) { Runnable runnable = new Runnable() { public void run() { JFrame f = new JFrame("Spinner Date and JTable"); JTable table = new JTable(new MyModel()); f.add(new JScrollPane(table)); TableColumnModel tcm = table.getColumnModel(); TableColumn tc = tcm.getColumn(1); tc.setCellEditor(new TimeSpinnerEditor(new Date())); tc.setCellRenderer(new DateCellRenderer("HH:mm")); f.pack(); f.setLocationRelativeTo(null); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }; SwingUtilities.invokeLater(runnable); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 import javax.swing.table.TableModel; import javax.swing.event.TableModelListener; import java.util.Date; public class MyModel implements TableModel { Object [][] datas = new Object[][] { {"XXXXXXXXXXX", new Date()}, {"YYYYYYYYYYY", new Date()} }; String [] columnNames = {"Col1", "Time", }; Class [] columnClass = {String.class, Date.class, }; public int getRowCount() { return datas.length; } public int getColumnCount() { return datas[0].length; } public String getColumnName(int columnIndex) { return columnNames[columnIndex]; } public Class<?> getColumnClass(int columnIndex) { return columnClass[columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return true; } public Object getValueAt(int rowIndex, int columnIndex) { return datas[rowIndex][columnIndex]; } public void setValueAt(Object aValue, int rowIndex, int columnIndex) { datas[rowIndex][columnIndex] = aValue; } public void addTableModelListener(TableModelListener l) { //To change body of implemented methods use File | Settings | File Templates. } public void removeTableModelListener(TableModelListener l) { //To change body of implemented methods use File | Settings | File Templates. } }
Mon editeur ki recoit une date en paramètre. Il doit accepter tte les combinaison heur-minute de cette journée. Ca ca marche, le problème c'est que l'éditeur affiche une date complète au lieu de juste les heures et les minutes. Comment je peux spécifier le format ?
G essayé de mettre le format (regardez les lignes en commentaire) et puis j'arivais plu à changé la valeur de l'editeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 import javax.swing.AbstractCellEditor; import javax.swing.JSpinner; import javax.swing.JTable; import javax.swing.SpinnerDateModel; import javax.swing.table.TableCellEditor; import java.awt.Component; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; public class TimeSpinnerEditor extends AbstractCellEditor implements TableCellEditor { private JSpinner spinner = null; public TimeSpinnerEditor(Date date) { /* start date */ Calendar startDate = new GregorianCalendar(); startDate.setTime(date); startDate.set(Calendar.HOUR_OF_DAY, 0); startDate.set(Calendar.MINUTE, 0); startDate.set(Calendar.SECOND, 0); startDate.set(Calendar.MILLISECOND, 0); /* end date */ Calendar endDate = (GregorianCalendar) startDate.clone(); endDate.set(Calendar.HOUR_OF_DAY, 23); endDate.set(Calendar.MINUTE, 59); endDate.set(Calendar.SECOND, 59); /* the spinner model: all time betwenn start date and end date are allowed */ spinner = new JSpinner(new SpinnerDateModel(date, startDate.getTime(), endDate.getTime(), Calendar.MINUTE)); /* HOW TO SET THE DATE FORMAT USED IN THE EDITOR ??? If you uncomment the 2 next lines, the format is correctly set, but I can't change editor's value anymore :-S */ // JSpinner.DateEditor editor = new JSpinner.DateEditor(spinner, "HH:mm"); // spinner.setEditor(editor); spinner.setBorder(null); } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { spinner.setValue(value); return spinner; } public Object getCellEditorValue() { return spinner.getValue(); } }
Mon renderer pour afficher les heures/minutes comme je le veux!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 import javax.swing.table.DefaultTableCellRenderer; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; public class DateCellRenderer extends DefaultTableCellRenderer { private DateFormat dateFormat = null; public DateCellRenderer(String format) { dateFormat = new SimpleDateFormat(format); } protected void setValue(Object value) { try { if (value == null) { // null values are accepted. setText(""); } else { setText(dateFormat.format((Date) value)); } } catch (ClassCastException e) { super.setValue(value); } } }
svp kelk'1 peut m'aider? c'est très important.
mici
Partager