JSlider renderer dans une JTable

cs_malawih Messages postés 2 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 4 décembre 2007 - 3 déc. 2007 à 19:22
cs_malawih Messages postés 2 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 4 décembre 2007 - 4 déc. 2007 à 19:42
Bonjour,


J ai insere des JSlider dans une colonne d une JTable, en refinissant
le renderer et l editor. Le probleme est que les slider ne sont pas mis
a jour quand je redimensionne la table.


Ils sont seulement redimensionne quand je passe une autre fenetre sur
le slider. Il doit y avoir une histoir de paint() la dessous, mais je
ne sais pas ou l appliquer.


Voici mon code: j ai mis la table et le renderer seulement, en enlevant les choses superflues pour ce probleme.

Voici la JTable (avec un main pour la lancer)

<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
<!--[if !IE]><--><!----><!--[endif]--><!--[if IE]>
<![endif]--> 
import GUI.TimeView.CategoryTimeDimensionView;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
 
 
publicclass TableDialogEditDemo extends JPanel {
privateboolean DEBUG = false;
JTable table;

public TableDialogEditDemo(){
super(new GridLayout(1,0));

table = new JTable(new MyTableModel());
table.setPreferredScrollableViewportSize(new Dimension(200, 48));

//Create the scroll pane and add the table to it.
JScrollPane scrollPane = new JScrollPane(table);

table.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_LAST_COLUMN);

table.getColumnModel().getColumn(0).setResizable(false);
table.getColumnModel().getColumn(0).setPreferredWidth(80);
table.getColumnModel().getColumn(1).setResizable(false);
table.getColumnModel().getColumn(1).setPreferredWidth(80);
 
table.getColumnModel().getColumn(2).setCellRenderer(new SliderRenderer());
table.getTableHeader().setReorderingAllowed(false);

//Add the scroll pane to this panel.
add(scrollPane);
}

class MyTableModel extends AbstractTableModel {
private String[] columnNames = {"Curve", "Color", "Transparency", "Displayed"};
private Object[][] data = {
{"Average", Color.black, 70, newBoolean(false)},
{"Minimum", Color.black, 70, newBoolean(false)},
{"Maximum", Color.black, 70, newBoolean(false)}
};

publicint getColumnCount(){
return columnNames.length;
}

publicint getRowCount(){
return data.length;
}

public String getColumnName(int col){
return columnNames[col];
}

public Object getValueAt(int row, int col){
return data[row][col];
}

publicClass getColumnClass(int c){
return getValueAt(0, c).getClass();
}

publicboolean isCellEditable(int row, int col){
//Note that the data/cell address is constant,
//no matter where the cell appears onscreen.
if(col < 1){
returnfalse;
}else{
returntrue;
}
}

publicvoid setValueAt(Object value, int row, int col){
if(DEBUG){
System.out.println("Setting value at " + row + "," + col
+ " to " + value
+ " (an instance of "
+ value.getClass() + ")");
}

data[row][col] = value;
fireTableCellUpdated(row, col);

if(DEBUG){
System.out.println("New value of data:");
printDebugData();
}
}

privatevoid printDebugData(){
int numRows = getRowCount();
int numCols = getColumnCount();

for(int i=0; i < numRows; i++){
System.out.print(" row " + i + ":");
for(int j=0; j < numCols; j++){
System.out.print(" " + data[i][j]);
}
System.out.println();
}
System.out.println("--------------------------");
}

private Object[] longValues;
}

privatestaticvoid createAndShowGUI(){
JFrame frame = new JFrame("TableDialogEditDemo");
frame.setDefaultCloseOperation(JFra
JComponent newContentPane = new TableDialogEditDemo();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
}

publicstaticvoid main(String[] args){
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable(){
publicvoid run(){
createAndShowGUI();
}
});
}
}
 

<!-- END TEMPLATE: bbcode_code -->

et le renderer:
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :
<!--[if !IE]><--><!----><!--[endif]--><!--[if IE]>
<![endif]--> 
mport java.awt.Color;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
import java.awt.Component;
import javax.swing.BorderFactory;
import javax.swing.JSlider;
import javax.swing.border.Border;
 
publicclass SliderRenderer extends JSlider implements TableCellRenderer {

Border unselectedBorder = null;
Border selectedBorder = null;

public SliderRenderer(){
setMinimum(0);
setMaximum(100);
setBackground(Color.white);

setOpaque(true);
}

public Component getTableCellRendererComponent(JTable table, Object val, boolean isSelected, boolean hasFocus, int row, int column){
if(isSelected){
if(selectedBorder == null){
selectedBorder = BorderFactory.createMatteBorder(1,3,1,3, table.getSelectionBackground());
}
setBorder(selectedBorder);
}else{
if(unselectedBorder == null){
unselectedBorder = BorderFactory.createMatteBorder(1,3,1,3, table.getBackground());
}
setBorder(unselectedBorder);
}

int value = (Integer) val;
setValue(value);

returnthis;
}
}
 

<!-- END TEMPLATE: bbcode_code -->Merci pour vos reponses

1 réponse

cs_malawih Messages postés 2 Date d'inscription jeudi 30 mars 2006 Statut Membre Dernière intervention 4 décembre 2007
4 déc. 2007 à 19:42
up

Qqn pour m aider?

Merci
0
Rejoignez-nous