Un problème dans l'interface

Résolu
mounir89 Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   -  
tjanh123 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Voici le programme que j'ai fait en Java sous Eclipse:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.text.NumberFormat;
import java.util.Random;
import java.util.Scanner;

import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;




public class d extends JFrame {

private JFormattedTextField jtf = new JFormattedTextField(NumberFormat.getIntegerInstance());

private JLabel label = new JLabel("Entrer N");

private JFormattedTextField jtf1 = new JFormattedTextField(NumberFormat.getIntegerInstance());
private JLabel label1 = new JLabel("Entrer P");;


private JButton b = new JButton ("Démarrer");

public d(){
super();
setSize( 500, 500 );
setTitle( "Dessin d'un graph" );
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout( new BorderLayout() );
JScrollPane sclp = new JScrollPane();
sclp.setPreferredSize( new Dimension( 100, 500 ) );
JTable table = new JTable();


//sclp.setPreferredSize( new Dimension( 100, 500 ) );

DefaultTableModel tmn = new DefaultTableModel();
table.setModel( tmn );
tmn.addColumn( "Noeud" ); tmn.addColumn( "Degré" );






int n = Integer.parseInt(jtf.getValue().toString()); // ici l'erreur





int[][] M= new int[n][n];
int[] tab= new int[n];
int[][] T = new int [n][2];

float x;


float p =Float.parseFloat(jtf1.getValue().toString()); // ici l'erreur

Random r = new Random();
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
x = (int) r.nextInt(9);

if(x>=p)
M[i][j] = 1;

else M[i][j] = 0;

}
}

//affichage de la matrice
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){

System.out.print(M[i][j]+" " );
}
System.out.println();
}
//la somme de chaque ligne
for(int ii=0;ii<n;ii++){
int s=0;
for(int jj=0;jj<n;jj++){
s=s+M[ii][jj];

}
tab[ii]=s;
}

System.out.println(" ::::::Affichage les noeuds :::::::");
for(int i=0; i<n; i++){


System.out.print("\n"+tab[i]+" " );
}

int count =0,e=0;
boolean bool;
for( int i=0;i<n;i++){
int h=0;
bool=true;
while(h<n){

if( (tab[i]==tab[h])&&(i>h)){
h=n;
bool=false;

}

else if ( tab[i]==tab[h]){
count++;
}
h++;
}
if(bool==true){
T[i][0]=tab[i];
T[i][1]=count ;


count=0;
}

// ***************************************************************************************************** //

}
System.out.print("\n Affichage de chaque noeud et son degré " );
for( int i=0;i<n;i++){
if(T[i][1]!=0){
System.out.print("\n"+T[i][0] +"|" +T[i][1]+" " );
}

}

// le trie
int xx,yy;

for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(T[i][0]<T[j][0] )
{
xx=T[i][0];
T[i][0]=T[j][0];
T[j][0]=xx;

yy=T[i][1];
T[i][1]=T[j][1];
T[j][1]=yy;

}
}
}
System.out.print("\n Affichage de T trié " );
for( int i=0;i<n;i++){
if(T[i][1]!=0){
System.out.print("\n"+T[i][0] +"|" +T[i][1]+" " );
}

}
for(int i=0;i<n;i++){
if(T[i][1]!=0){
Object[] vals = { T[ i ][0] , T[ i ][ 1 ] };
tmn.addRow( vals );
}
}
int X=0, Y = 0;
// create a dataset...
XYSeries series = new XYSeries("TP DE DEGRE");
for(int i=0;i<n;i++){
if(T[i][0]!=0) {
X=T[i][0];
Y=T[i][1];
series.add(X, Y);
}
}


XYDataset xyDataset = new XYSeriesCollection(series);

// create a line chart...
JFreeChart chart = ChartFactory.createXYAreaChart(
"", // Title
"Noeud", // X-Axis label
"Degré", // Y-Axis label
xyDataset, // Dataset
PlotOrientation.VERTICAL,
true,
true,
false);
ChartFrame frame1=new ChartFrame("Affichage du graphe",chart);
frame1.setVisible(true);
frame1.setSize(300,300);

sclp.getViewport().add( table );
JPanel pnl = new JPanel();
getContentPane().add(pnl, BorderLayout.NORTH);
pnl.setBackground(Color.white);
pnl.setLayout(new BorderLayout());

JPanel pnl1 = new JPanel();
pnl1.setLayout(new BorderLayout());
pnl1.add(label, BorderLayout.WEST);
pnl1.add(jtf, BorderLayout.EAST);
jtf.setPreferredSize(new Dimension(150, 30));
jtf.setForeground(Color.BLUE);
Font police = new Font("Arial", Font.BOLD, 14);
jtf.setFont(police);
pnl.add(pnl1, BorderLayout.WEST);
pnl1.setBackground(Color.white);


JPanel pnl2 = new JPanel();
pnl2.setLayout(new BorderLayout());
pnl2.add(label1, BorderLayout.WEST);
pnl2.add(jtf1, BorderLayout.EAST);
jtf1.setPreferredSize(new Dimension(150, 30));
jtf1.setForeground(Color.BLUE);
pnl2.setBackground(Color.white);

jtf1.setFont(police);
pnl.add(pnl2, BorderLayout.EAST);


JPanel pnl21 = new JPanel();
getContentPane().add(pnl21, BorderLayout.CENTER);
pnl21.setBackground(Color.LIGHT_GRAY);
pnl21.add( sclp );





}



public static void main(String[] args) {
// TODO Auto-generated method stub
new d().setVisible( true );;
}

}

J'ai fait une interface sur laquelle j'ai mis deux champs textfield ( entre n et l'autre entre p) , et et après je veux récupérer la valeur de n et p pour les utiliser dans la suite de programme .
Voici l'erreur : Exception in thread "main" java.lang.NullPointerException.

Je suis dans l'attente d'une réponse . et Merci d'avance .
A voir également:

7 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
jtf.getValue() vaut null, ce qui est normal vu que tu lis cette valeur avant même que la fenêtre ne s'affiche, donc personne n'a pu remplir le champ.
0
mounir89 Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour la réponse ,

j'ai fait setvisible(true) apres tmn.addColumn( "Noeud" ); tmn.addColumn( "Degré" );
mais le problème reste . je suis perdu , est-ce que tu peux m'aider svp .

merci d'avance.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Oui, mais si tu fais la même chose juste après ça ne change rien car l'utilisateur n'a toujours pas le temps de modifier les valeurs avant que tu ne les lises.

En général les étapes sont les suivantes :
- On affiche la fenêtre avec les champs vides
- On ne fait rien pour que l'utilisateur puisse remplir les champs
- À l'aide d'un bouton (ou d'un autre mécanisme) l'utilisateur valide sa saisie
- Et ce n'est qu'à ce moment là qu'on lit les champs
0
mounir89 Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
Merci infiniment , j'ai régler le problème
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Une façon simple (mais pas forcément idéale) de modifier ton code c'est de faire comme ceci :

Rajouter les valeurs "n" et "p" au constructeur de "d"
Et de remplacer les deux lignes qui te posaient problème par une édition des champs.

public d(int n, float p)
{
    // ...
    
    //int n = Integer.parseInt(jtf.getValue().toString());
    jtf.setValue(n);
    
    //float p = Float.parseFloat(jtf1.getValue().toString());
    jtf1.setValue(p);
    
    // ...
}

Ensuite comme il faut passer ces deux paramètres au constructeur je te propose de modifier un peu le main :

private static String get(String message)
{
	return (String) JOptionPane.showInputDialog(null, message, "", JOptionPane.PLAIN_MESSAGE, null, null, "");
}

public static void main(String[] args) 
{
	int n = Integer.parseInt(get("Entrez n"));
	float f = Float.parseFloat(get("Entrez p"));
	new d(n,f).setVisible( true );;
}
0
mounir89 Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
Merci mon ami , je te souhaite bonne fin journée .
0
tjanh123 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
bonjour,
Si vous voulez récupérer une valeur de JTextField,
J'ai une méthode :



float p =Float.parseFloat(jtf1.getValue().toString()); // ici l'erreur
---> float p = Float.parseFloat(jtf1.getText());
-1