Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionajouter_colonne.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(tab.getColumnCount() >= 7){ Object[][] contenu = new Object[3][2]; contenu[0][0] = new String(""); contenu[0][0] = new String(""); contenu[1][0] = new String("variable : 11"); contenu[2][0] = new String("variable : 22"); contenu[1][1] = new Double(0); contenu[2][1] = new Double(0); Object[] entete = new Object[2]; entete[0] = "g"; entete[1] = "sdcv"; MyModel mm2 = new MyModel(contenu,entete); JTable tab2 = new JTable(mm2); aa.add(tab2); System.out.println("suis je"); aa.setVisible(true); }else{ Object[] tmp = new Object[2]; tmp[0] = new Double(0); tmp[1] = new Double(0); ((MyModel) tab.getModel()).setColumnCount(tab.getColumnCount()); ((MyModel) tab.getModel()).addColumn("",tmp); } } });
contenu_table = new Object[lignes][colonnes]; entete = new String[colonnes]; for(int i = 0; i< lignes ; i++){ contenu_table[i][0] = new String("variable"+i); for(int j = 1 ;j<colonnes; j++){ contenu_table[i][j] = new Double(0); } } for(int j = 0; j<colonnes; j++){ entete[j] = ""; } mm = new MyModel(contenu_table,entete); tab = new JTable(mm); tab.setRowHeight(20); tab.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); RendererDecorator renderer = new RendererDecorator(); renderer.setAlternerLignes(true); renderer.setBackground1(Color.CYAN); //renderer.setBackground2(Color.GREEN); renderer.setBackgroundSelection(Color.GREEN); tab.setDefaultRenderer(Object.class, renderer); tab.setColumnSelectionAllowed(true); tab.setRowSelectionAllowed(true); aa = new JPanel(); aa.add(tab); JScrollPane scrollPane = new JScrollPane(aa); getContentPane().add(scrollPane, BorderLayout.CENTER);
ne classe Table qui contient une arrayList de JTable et qui étend JPanel.
Su fais un setLayout(new GridLayout(tables.size(), 0)) et une méthode addRow qui créé à chaque fois une nouvelle JTable.
package regression; import java.awt.Color; import java.awt.GridLayout; import java.util.ArrayList; import javax.swing.JPanel; import javax.swing.JTable; public class table extends JPanel{ /** * */ private static final long serialVersionUID = 1L; ArrayList<JTable> tabs; int nbcols; MyModel mm ; table(int nb_cols){ this.nbcols = nb_cols ; Object[][] contenu_table = new Object[2][nbcols]; Object[] entete = new String[nbcols]; for(int i = 0; i< 2 ; i++){ contenu_table[i][0] = new String("variable"+i); for(int j = 1 ;j<nbcols; j++){ contenu_table[i][j] = new Double(0); } } for(int j = 0; j<nbcols; j++){ entete[j] = ""; } mm = new MyModel(contenu_table,entete); JTable tab = new JTable(mm); tab.setRowHeight(20); tab.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); RendererDecorator renderer = new RendererDecorator(); renderer.setAlternerLignes(true); renderer.setBackground1(Color.CYAN); //renderer.setBackground2(Color.GREEN); renderer.setBackgroundSelection(Color.GREEN); tab.setDefaultRenderer(Object.class, renderer); tab.setColumnSelectionAllowed(true); tab.setRowSelectionAllowed(true); tabs =new ArrayList<JTable>(); tabs.add(tab); add(tab); setLayout(new GridLayout(tabs.size(),0)); } public void addTable(){ int a = tabs.size(); if(tabs.get(tabs.size()-1).getColumnCount() == 10){ Object[][] contenu_table = new Object[3][2]; //contenu for(int i = 1; i< 3 ; i++){ contenu_table[i][0] = new String("variable"+i); contenu_table[i][1] = new Double(0); } Object[] entete = {"fsdfcvd","qdsfsfvd"}; MyModel mm = new MyModel(contenu_table,entete); JTable tab = new JTable(mm); tabs.add(tab); for(int i = 0 ;i< tabs.size();i++ ){ add(tabs.get(i)); } setLayout(new GridLayout(tabs.size(),0)); //this.repaint(); this.validate(); }else{ Object[] tmp = new Object[2]; tmp[0] = new Double(0); tmp[1] = new Double(0); ((MyModel) tabs.get(tabs.size()-1).getModel()).setColumnCount(tabs.get(tabs.size()-1).getColumnCount()); ((MyModel) tabs.get(tabs.size()-1).getModel()).addColumn("",tmp); } //this.setVisible(true); } }
dans le scrollpane, avec le gridlayout(tabs.size(),0) il me divise l'espace en deux : alors que il doit etre juste au dessous .....
aussi lorsque la table de dessous vient d'etre ajouté les 2 petites colonnes qui contient s'elargit et prend toute la largeur qui correspond a 10 colonnes du premier table
import java.awt.Color; import java.awt.Component; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableCellRenderer; public class TableRenderer implements TableCellRenderer { private DefaultTableCellRenderer support = new DefaultTableCellRenderer(); public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component c = support.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); Table t = (Table)table; if(t.isActif(row, column)){ if(!isSelected){ c.setBackground(Color.WHITE); } else{ c.setBackground(Color.CYAN); } } else{ c.setBackground(Color.LIGHT_GRAY); } return c; } }
import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import javax.swing.JTable; import javax.swing.UIManager; import javax.swing.table.DefaultTableModel; public class Table extends JTable { private List taillesLignes; private int maxColonnes; public Table(int maxColonnes) { super(new DefaultTableModel(0, maxColonnes)); taillesLignes=new ArrayList(); setDefaultRenderer(Object.class, new TableRenderer()); } public void addLigne(Object[] data){ List<Object> donnees = new ArrayList<Object>(); for(int i=0; i<data.length; i++){ donnees.add(data[i]); } for(int i=data.length; i<maxColonnes; i++){ donnees.add(""); } taillesLignes.add(data.length); ((DefaultTableModel)getModel()).addRow(donnees.toArray()); } public boolean isActif(int row, int column){ return taillesLignes.get(row)>=column; } public static void main(String[] args){ JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(300, 300); f.setLocationRelativeTo(null); Table table = new Table(5); table.addLigne(new Object[]{"1", "2", "3"}); table.addLigne(new Object[]{"1", "2"}); table.addLigne(new Object[]{"1"}); table.addLigne(new Object[]{"1", "2", "3"}); f.add(table); f.setVisible(true); } }