Un problème dans l'interface
Résolu
mounir89
Messages postés
24
Statut
Membre
-
tjanh123 Messages postés 9 Statut Membre -
tjanh123 Messages postés 9 Statut Membre -
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 .
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:
- Un problème dans l'interface
- Interface netflix - Accueil - Streaming
- Common interface 5v only - Forum TNT / Satellite / Réception
- Interface gmail - Guide
- Akamai netsession interface ✓ - Forum Réseaux sociaux
- Interface snapchat - Accueil - Réseaux sociaux
7 réponses
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.
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.
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.
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
Ensuite comme il faut passer ces deux paramètres au constructeur je te propose de modifier un peu le main :
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 );; }