JTable avec JTextField [Résolu]

Signaler
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
-
 basssouma -
salut

j'ai un JButton ajouter et un JTable t , je cherche sije click sur le bouton  alors  le text de JTextField s'affiche sur  la ligne de la colonne 1 

 
publicclass Untitled2 extends JFrame implements ActionListener   {
 
  
  
   JPanel jPanel1 = new JPanel();
 
JScrollPane jS = new JScrollPane();
  JButton ajouter = new JButton();
  JTextField text = new JTextField();
 
 
 
 
           public Untitled2(){
             setTitle(" fenetre ");
    this.setResizable(false);
    this.setSize(650, 650);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
    try{
      jbInit();
    }
    catch(Exception e){
      e.printStackTrace();
    }
            
           }
  privatevoid jbInit()throws Exception {
   
    jPanel1.setLayout(null);
   this.getContentPane().setLayout(null);
  
     jPanel1.setBounds(new Rectangle(51, 12, 269, 262));
    Object[][] data = {
        {
        "", "", "", "", "", "", "", ""}
        , {
        "", "", "", "", "", "", "", ""}
    };
 
    String[] columns = {
        "Date_etablissement", "equipement", "Description_equipement",
        "Designation_article"};
    JTable t = new JTable(data, columns);
 
    jS.setBounds(new Rectangle(30, 17, 208, 134));
       jS.setViewportView(t);
     jPanel1.add(jS);
    
   
 
    ajouter.setBounds(new Rectangle(193, 197, 71, 23));
    ajouter.setText("ajouter");
    ajouter.addActionListener(this);
    text.setText("");
    text.addActionListener(this);
    text.setBounds(new Rectangle(61, 196, 62, 20));
    this.getContentPane().add(jPanel1, null);
   
    jPanel1.add(ajouter, null);
    jPanel1.add(text, null);
  
 
 
 
  }             
  publicstaticvoid main(String[] args){
      Untitled2 gui = new Untitled2();
      gui.setVisible(true);
    }
 
 
  publicvoid actionPerformed(ActionEvent e){
 
     if(e.getSource().equals(ajouter)){
  String A ;
      A= text.getText().toString();
  System.out.println(A);
 
 
     }
   }
 
 
 
    }
 

15 réponses

Messages postés
764
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
8 mars 2011
7
yo !

public








class

Untitled2


extends

JFrame


implements

ActionListener {

JPanel


jPanel1
=


new

JPanel();

JScrollPane


jS
=


new

JScrollPane();

JButton


ajouter
=


new

JButton();

JTextField


text
=


new

JTextField();

JTable


table
;



public

Untitled2() {setTitle(


" fenetre "
);



this

.setResizable(


false

);



this

.setSize(650, 650);



this

.setLocationRelativeTo(


null

);



this

.setDefaultCloseOperation(JFrame.


EXIT_ON_CLOSE

);



try

{jbInit();

}



catch

(Exception e) {e.printStackTrace();

}

}



private





void

jbInit()


throws

Exception {


jPanel1
.setLayout(


null

);



this

.getContentPane().setLayout(


null

);


jPanel1
.setBounds(


new

Rectangle(51, 12, 269, 262));Object[][] data = { {


""
,

""
,

""
,

""
,

""
,

""
,

""
,

""
},{


""
,

""
,

""
,

""
,

""
,

""
,

""
,

""
} };

String[] columns = {


"Date_etablissement"
,

"equipement"
,


"Description_equipement"
,

"Designation_article"
};


table
=


new

JTable(data, columns);


jS
.setBounds(


new

Rectangle(30, 17, 208, 134));


jS
.setViewportView(

table
);


jPanel1
.add(

jS
);


ajouter
.setBounds(


new

Rectangle(193, 197, 71, 23));


ajouter
.setText(

"ajouter"
);


ajouter
.addActionListener(


this

);


text
.setText(

""
);


text
.addActionListener(


this

);


text
.setBounds(


new

Rectangle(61, 196, 62, 20));



this

.getContentPane().add(

jPanel1
,


null

);


jPanel1
.add(

ajouter
,


null

);


jPanel1
.add(

text
,


null

);

}



public





static





void

main(String[] args) {Untitled2 gui =



new

Untitled2();gui.setVisible(



true

);}



public





void

actionPerformed(ActionEvent e) {



if

(e.getSource().equals(

ajouter
)) {String A;

A =


text
.getText().toString();


table
.setValueAt(A, 0, 0);CellEditor editor =


table
.getCellEditor(0,0);

}

}

}
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
Salut:

J'ai écrit une méthode plus générique:

JTable table;

public void delete() {
    ListSelectionModel selectionModel = table.getSelectionModel();
    if (selectionModel.getSelectionMode() == ListSelectionModel.SINGLE_SELECTION) {
       int index = table.getSelectedRow();
       if (index != -1) {
          table.getModel().removeRow(index);
       }
    }
    else {
       int[] indexArray = table.getSelectedRows();
       if (indexArray.length != 0) {
          for (int i = 0; indexArray.length; ++i) {
             table.getModel().removeRow(indexArray[i]);
          }
       }
    }
}
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
merci


je coince encore je cherche a si click sur le bouton la ligne selectionnée sera supprimer de jtable
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
Salut:

private JTable table;

// ...

public void delete() {
    int index = table.getSelectedRow();
    if (index != -1) {
       table.getModel().removeRow(index);
    }
}

Bye.
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
merci encore mais j'ai un message d'erreur
 if (e.getSource().equals(copy)) {


     int index = t.getSelectedRow();
      if (index != -1) {
         t.getModel().removeRow(index);
      }

"Untitled2.java": cannot resolve symbol: method removeRow (int)in interface javax.swing.table.TableModel at line 237, column 23
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
Salut:

Les méthodes removeRow() et removeRows() appartiennent à la classe DefaultTableModel.

private String[] columns = {...};
private Object[][] data = {...};
private DefaultTableModel model = new DefaultTableModel(data, columns);
private JTable table = new JTable(model);

// ...

private void delete() {
    int index = table.getSelectedRow();
    if (index != -1) {
       model.removeRow(index);
    }
}
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
Salut:

Personnellement, je te conseille d'utiliser la deuxième version de la méthode delete() parcequ'elle est plus générique et elle permet de supprimer plusieurs lignes séléctionnées.

Bye.
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
salut merci encore mais ça fonctionne pas
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


import javax.swing.table.DefaultTableModel; 


public class cadre extends JFrame implements ActionListener {


JPanel jPanel1 = new JPanel();


JScrollPane jS = new JScrollPane();


JButton copy = new JButton();


JTable table ;
private DefaultTableModel model ;


public cadre() {
 
 
  setTitle(" fenetre " );


this .setResizable( false );


this .setSize(650, 650);


this .setLocationRelativeTo( null );


this .setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE );




try {
jbInit();


}


catch (Exception e) {
e.printStackTrace();


}


}




private void jbInit() throws Exception {


jPanel1 .setLayout( null );


this .getContentPane().setLayout( null );




jPanel1 .setBounds( new Rectangle(51, 12, 269, 262));
Object[][] data = { { "" , "" , "" , "" , "" , "" , "" , "" },{"" , "" , "" , "" , "" , "" , "" , "" } };


String[] columns = { "Date_etablissement" , "equipement" ,"Description_equipement" , "Designation_article" };


table = new JTable(data, columns);




jS .setBounds( new Rectangle(30, 17, 208, 134));


jS .setViewportView( table );


jPanel1 .add( jS );




copy .setBounds( new Rectangle(193, 197, 71, 23));


copy .setText( "copy" );


copy .addActionListener( this );


this .getContentPane().add( jPanel1 , null );




jPanel1 .add( copy , null );


}




public static void main(String[] args) {
cadre gui = new cadre();
gui.setVisible(


true );
}


 


public void actionPerformed(ActionEvent e) {
 
     ListSelectionModel selectionModel = table.getSelectionModel();
     if (selectionModel.getSelectionMode() == ListSelectionModel.SINGLE_SELECTION) {
        int index = table.getSelectedRow();
        if (index != -1) {
        model.removeRow(index);
        }
     }
     else {
        int[] indexArray = table.getSelectedRows();
        if (indexArray.length != 0) {
           for (int i = 0;i< indexArray.length; ++i) {
             model.removeRow(indexArray[i]);
           }
        }
     }


 


}




}
java.lang.NullPointerException
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
j'ai réglé ce problème et merci encore , je continue avec jtable , je chercher à modifier une ligne si je tape sur le bouton modifier alors le continue de la ligne s'affiche sur JTextfield

 f (e.getSource().equals(modifier)) {


 System.out.println( model.getColumnName(index));
 
 
  }
model.getColumnName(index) retourne le nom de la colonne mais je chercher à afficher la valeur de la cellule par exemple  la cellule de la deuxième colonne de la premiere ligne
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
merci j'ai trouvé la solution

int ligne = t.getSelectedRow(); 
  
       String cellule1 = (String) t.getValueAt(ligne, 0);

puis afficher sur jtexyfield
  text.setText(cellule1);
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
Salut:

Tu peux utiliser les méthodes setValueAt() et getValueAt() pour modifier et consulter la contenu d'une cellule d'un objet JTable.

Note: Il vaut mieux créer pour chaque colonne un JLabel et un JTextField pour la modification.

private JTable table;

// ...

// La boucle principale
for (int i = 0; i < table.getColumnCount(); ++i) {
    // Utiliser les méthodes déjà citées
}

Bye.
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
je veux construire un jtable avec des cellules non modifiable comme le texte de jlabel ou jboutton
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
Salut:

Il faut créer une sous-classe de la classe DefaultTableModel est redéfinir la méthode isCellEditable().

public class CustomTableModel extends DefaultTableModel {
    public CustomTableModel() {}

    public CustomTableModel(Object[][] dataVector, String[] columnNames) {
       super(dataVector, columnNames);
    }

    @Override
    public boolean isCellEditable(int row, int cell) {return false;}
}

// ...

private Object[][] data = ...;
private String[] columnNames = ...;
private JTable table = new JTable(new CustomTableModel(data, columnNames));

Bye.
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
salut  regarde ce que j'ai fais mais ça fonctionne pas
    String[] columns = {"réference", "prix", "quantité","Designation_article"};
//table = new JTable(data, columns);
 model = new DefaultTableModel(columns,0);
 t = new JTable(model);
model.addRow(new String[] { "" , "" , "" , ""   });
model.addRow(new String[] { "" , "" , "" , ""  });
model.addRow(new String[] { "" , "" , "" , "" });
 
model.isCellEditable(1,0);// pour tester si cellule est modifiable

public boolean isCellEditable(int row, int col)
       { return true; }
salut,
jai une interface client et une interface ListeClient ou il ya un jtable pour la liste des clients je veux quant je click sur le une ligne de jtable puis sur le popumenu modifier d'interface ListClient je fais appel a linteface Client en affectant les valeurs de row da,s les champs de linteface Client par exemple le nom doit etre affecté systematiquement de la ligne sélectionné ds la table ?
svp quelq'un m'aider comment faire car je faire des recherche mé rien :(