Heritage?
laurent2403
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour, tout le monde
voici mon petit soucis :
j'ai une classe Portefeuille avec ses attributs et ses méthodes que j'ai mis dans un package appelle entité , en suite j'ai une classe Création_Porte_Feuille extends Jframe , que j'aimerais bien faire récupérer a cette classe les attributs et méthode de ma classe Porte feuille , mais je n'y arrive pas ,voici mon code pour les 2 classes ,je suis débutant,si vous pouviez me donner un petit coup de pouce ...
merci
package bourse;
import java.awt.EventQueue;
import java.awt.HeadlessException;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.JTextField;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.FileWriter;
import javax.swing.JRadioButton;
import javax.swing.JButton;
import javax.swing.ButtonGroup;
public class Creation_Porte_feuille extends JFrame implements ActionListener {
private Portefeuille p1 = new Portefeuille();
public Creation_Porte_feuille(Portefeuille p1, JPanel contentPane,
JLabel lblNomDeCe, JLabel lblNewLabel,
JLabel lblVoulezVousSimulezr, JRadioButton rdbtnNewRadioButton,
JRadioButton rdbtnNon, JButton btnCreerCePortefeuille)
throws HeadlessException {
super();
this.p1 = p1;
this.contentPane = contentPane;
this.lblNomDeCe = lblNomDeCe;
this.lblNewLabel = lblNewLabel;
this.lblVoulezVousSimulezr = lblVoulezVousSimulezr;
this.rdbtnNewRadioButton = rdbtnNewRadioButton;
this.rdbtnNon = rdbtnNon;
this.btnCreerCePortefeuille = btnCreerCePortefeuille;
}
private static final long serialVersionUID = 1L;
private static String nom_fichier = "src\\bourse\\portefeuille.txt";
public Portefeuille getP1() {
return p1;
}
public void setP1(Portefeuille p1) {
this.p1 = p1;
}
private JPanel contentPane;
private JLabel lblNomDeCe;
private static JTextField Jtxt_nom;
private JLabel lblNewLabel;
private static JTextField Jtxt_liquidites;
private JLabel lblVoulezVousSimulezr;
private JRadioButton rdbtnNewRadioButton;
private JRadioButton rdbtnNon;
private JButton btnCreerCePortefeuille;
private final ButtonGroup buttonGroup = new ButtonGroup();
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Creation_Porte_feuille frame = new Creation_Porte_feuille();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Creation_Porte_feuille() {
setFont(null);
setForeground(new Color(128, 0, 0));
setTitle("CREATION D'UN OU PLUSIEURS PORTEFEUILLES");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 515, 404);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
contentPane.add(getLblNomDeCe());
contentPane.add(getJtxt_nom());
contentPane.add(getLblNewLabel());
contentPane.add(getJtxt_liquidites());
contentPane.add(getLblVoulezVousSimulezr());
contentPane.add(getRdbtnNewRadioButton());
contentPane.add(getRdbtnNon());
contentPane.add(getBtnCreerCePortefeuille());
}
private JLabel getLblNomDeCe() {
if (lblNomDeCe == null) {
lblNomDeCe = new JLabel("Nom de ce porte feuille :");
lblNomDeCe.setForeground(new Color(0, 0, 153));
lblNomDeCe.setFont(new Font("Tahoma", Font.PLAIN, 16));
lblNomDeCe.setBounds(12, 71, 181, 34);
}
return lblNomDeCe;
}
private JTextField getJtxt_nom() {
if (Jtxt_nom == null) {
Jtxt_nom = new JTextField();
Jtxt_nom.setBounds(253, 78, 116, 22);
Jtxt_nom.setColumns(10);
}
return Jtxt_nom;
}
private JLabel getLblNewLabel() {
if (lblNewLabel == null) {
lblNewLabel = new JLabel("montant du porte feuille(en euros):");
lblNewLabel.setForeground(new Color(0, 102, 0));
lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 16));
lblNewLabel.setBounds(12, 118, 250, 34);
}
return lblNewLabel;
}
private JTextField getJtxt_liquidites() {
if (Jtxt_liquidites == null) {
Jtxt_liquidites = new JTextField();
Jtxt_liquidites.setBounds(274, 125, 98, 22);
Jtxt_liquidites.setColumns(10);
}
return Jtxt_liquidites;
}
private JLabel getLblVoulezVousSimulezr() {
if (lblVoulezVousSimulezr == null) {
lblVoulezVousSimulezr = new JLabel(
"voulez vous simuler les frais de transaction: ");
lblVoulezVousSimulezr.setForeground(new Color(255, 0, 0));
lblVoulezVousSimulezr.setFont(new Font("Tahoma", Font.PLAIN, 16));
lblVoulezVousSimulezr.setBounds(12, 225, 331, 16);
}
return lblVoulezVousSimulezr;
}
private JRadioButton getRdbtnNewRadioButton() {
if (rdbtnNewRadioButton == null) {
rdbtnNewRadioButton = new JRadioButton("OUI");
buttonGroup.add(rdbtnNewRadioButton);
rdbtnNewRadioButton.setForeground(new Color(0, 0, 255));
rdbtnNewRadioButton.setBounds(361, 222, 127, 25);
rdbtnNewRadioButton.addActionListener(this);
}
return rdbtnNewRadioButton;
}
private JRadioButton getRdbtnNon() {
if (rdbtnNon == null) {
rdbtnNon = new JRadioButton("NON");
rdbtnNon.setForeground(new Color(255, 0, 0));
rdbtnNon.setBounds(361, 252, 127, 25);
rdbtnNon.addActionListener(this);
}
return rdbtnNon;
}
private JButton getBtnCreerCePortefeuille() {
if (btnCreerCePortefeuille == null) {
btnCreerCePortefeuille = new JButton("CREER CE PORTEFEUILLE");
btnCreerCePortefeuille.setForeground(new Color(102, 0, 0));
btnCreerCePortefeuille.setFont(new Font("Tahoma", Font.PLAIN, 16));
btnCreerCePortefeuille.setBounds(140, 306, 229, 25);
btnCreerCePortefeuille.addActionListener(this);
}
return btnCreerCePortefeuille;
}
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == btnCreerCePortefeuille)
Portefeuille.sauvePortefeuille(nom_fichier);
}
//public static void sauve_portefeuille(String chemin) {
// création d'un stream de sortie
// try {
// BufferedWriter buffer = new BufferedWriter(fichier);
// buffer.append(Jtxt_nom.getText() + ";");
// buffer.append(Jtxt_liquidites.getText());
// buffer.newLine();
// buffer.close();
//} catch (Exception e) {
// TODO: handle exception
//}
}
//}
----------------------------------------------------------------------------------------------------------
package bourse;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import entite.Titre_Porte_feuille;
public class Portefeuille {
private static String nom = "";
private static Double liquidites = 0.00;
private static String simulation = "non";
private static Titre_Porte_feuille[] titresportefeuilles = new Titre_Porte_feuille[40];
public static void main(String[] args) {
Portefeuille p1 = new Portefeuille();
Portefeuille.nom = "monpremier";
Portefeuille.liquidites = 5000.00;
for (int idx = 0; idx < Portefeuille.titresportefeuilles.length; idx++) {
Portefeuille.titresportefeuilles[idx] = new Titre_Porte_feuille();
Portefeuille.titresportefeuilles[idx].setCodeIsin(Globals.cac40[idx]);
}
Portefeuille.sauvePortefeuille();
Portefeuille p2 = new Portefeuille();
p2.restaurePortefeuille();
}
public static void sauvePortefeuille() {
String cheminFichier = "src\\bourse\\portefeuille.txt";
try {
FileWriter fw = new FileWriter(cheminFichier, true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
pw.append(nom + ";");
pw.append(liquidites.toString() + ";");
pw.append(simulation + ";");
for (Titre_Porte_feuille titre : titresportefeuilles) {
titre.sauvegarde(pw);
}
bw.newLine();
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void restaurePortefeuille() {
String cheminFichier = "src\\bourse\\portefeuille.txt";
try {
String ligneFichier = "";
FileReader fr = new FileReader(cheminFichier);
BufferedReader br = new BufferedReader(fr);
String[] donnees_portefeuille;
ligneFichier = br.readLine();
while (ligneFichier != null) {
int pos=0;
donnees_portefeuille = ligneFichier.split(";");
Portefeuille.nom = donnees_portefeuille[pos++];
Portefeuille.liquidites = Double.parseDouble(donnees_portefeuille[pos++]);
Portefeuille.simulation = donnees_portefeuille[pos++];
for (int idx = 0; idx < this.titresportefeuilles.length; idx++) {
this.titresportefeuilles[idx] = new Titre_Porte_feuille();
this.titresportefeuilles[idx].setCodeIsin(donnees_portefeuille[pos++]);
this.titresportefeuilles[idx].setValeur(Double.valueOf(donnees_portefeuille[pos++]));
this.titresportefeuilles[idx].setQte( Integer.valueOf(donnees_portefeuille[pos++]));
}
System.out.println(ligneFichier);
ligneFichier = br.readLine();
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void sauvePortefeuille(String nom_fichier) {
// TODO Auto-generated method stub
}
}
voici mon petit soucis :
j'ai une classe Portefeuille avec ses attributs et ses méthodes que j'ai mis dans un package appelle entité , en suite j'ai une classe Création_Porte_Feuille extends Jframe , que j'aimerais bien faire récupérer a cette classe les attributs et méthode de ma classe Porte feuille , mais je n'y arrive pas ,voici mon code pour les 2 classes ,je suis débutant,si vous pouviez me donner un petit coup de pouce ...
merci
package bourse;
import java.awt.EventQueue;
import java.awt.HeadlessException;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.JTextField;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.FileWriter;
import javax.swing.JRadioButton;
import javax.swing.JButton;
import javax.swing.ButtonGroup;
public class Creation_Porte_feuille extends JFrame implements ActionListener {
private Portefeuille p1 = new Portefeuille();
public Creation_Porte_feuille(Portefeuille p1, JPanel contentPane,
JLabel lblNomDeCe, JLabel lblNewLabel,
JLabel lblVoulezVousSimulezr, JRadioButton rdbtnNewRadioButton,
JRadioButton rdbtnNon, JButton btnCreerCePortefeuille)
throws HeadlessException {
super();
this.p1 = p1;
this.contentPane = contentPane;
this.lblNomDeCe = lblNomDeCe;
this.lblNewLabel = lblNewLabel;
this.lblVoulezVousSimulezr = lblVoulezVousSimulezr;
this.rdbtnNewRadioButton = rdbtnNewRadioButton;
this.rdbtnNon = rdbtnNon;
this.btnCreerCePortefeuille = btnCreerCePortefeuille;
}
private static final long serialVersionUID = 1L;
private static String nom_fichier = "src\\bourse\\portefeuille.txt";
public Portefeuille getP1() {
return p1;
}
public void setP1(Portefeuille p1) {
this.p1 = p1;
}
private JPanel contentPane;
private JLabel lblNomDeCe;
private static JTextField Jtxt_nom;
private JLabel lblNewLabel;
private static JTextField Jtxt_liquidites;
private JLabel lblVoulezVousSimulezr;
private JRadioButton rdbtnNewRadioButton;
private JRadioButton rdbtnNon;
private JButton btnCreerCePortefeuille;
private final ButtonGroup buttonGroup = new ButtonGroup();
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Creation_Porte_feuille frame = new Creation_Porte_feuille();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Creation_Porte_feuille() {
setFont(null);
setForeground(new Color(128, 0, 0));
setTitle("CREATION D'UN OU PLUSIEURS PORTEFEUILLES");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 515, 404);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
contentPane.add(getLblNomDeCe());
contentPane.add(getJtxt_nom());
contentPane.add(getLblNewLabel());
contentPane.add(getJtxt_liquidites());
contentPane.add(getLblVoulezVousSimulezr());
contentPane.add(getRdbtnNewRadioButton());
contentPane.add(getRdbtnNon());
contentPane.add(getBtnCreerCePortefeuille());
}
private JLabel getLblNomDeCe() {
if (lblNomDeCe == null) {
lblNomDeCe = new JLabel("Nom de ce porte feuille :");
lblNomDeCe.setForeground(new Color(0, 0, 153));
lblNomDeCe.setFont(new Font("Tahoma", Font.PLAIN, 16));
lblNomDeCe.setBounds(12, 71, 181, 34);
}
return lblNomDeCe;
}
private JTextField getJtxt_nom() {
if (Jtxt_nom == null) {
Jtxt_nom = new JTextField();
Jtxt_nom.setBounds(253, 78, 116, 22);
Jtxt_nom.setColumns(10);
}
return Jtxt_nom;
}
private JLabel getLblNewLabel() {
if (lblNewLabel == null) {
lblNewLabel = new JLabel("montant du porte feuille(en euros):");
lblNewLabel.setForeground(new Color(0, 102, 0));
lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 16));
lblNewLabel.setBounds(12, 118, 250, 34);
}
return lblNewLabel;
}
private JTextField getJtxt_liquidites() {
if (Jtxt_liquidites == null) {
Jtxt_liquidites = new JTextField();
Jtxt_liquidites.setBounds(274, 125, 98, 22);
Jtxt_liquidites.setColumns(10);
}
return Jtxt_liquidites;
}
private JLabel getLblVoulezVousSimulezr() {
if (lblVoulezVousSimulezr == null) {
lblVoulezVousSimulezr = new JLabel(
"voulez vous simuler les frais de transaction: ");
lblVoulezVousSimulezr.setForeground(new Color(255, 0, 0));
lblVoulezVousSimulezr.setFont(new Font("Tahoma", Font.PLAIN, 16));
lblVoulezVousSimulezr.setBounds(12, 225, 331, 16);
}
return lblVoulezVousSimulezr;
}
private JRadioButton getRdbtnNewRadioButton() {
if (rdbtnNewRadioButton == null) {
rdbtnNewRadioButton = new JRadioButton("OUI");
buttonGroup.add(rdbtnNewRadioButton);
rdbtnNewRadioButton.setForeground(new Color(0, 0, 255));
rdbtnNewRadioButton.setBounds(361, 222, 127, 25);
rdbtnNewRadioButton.addActionListener(this);
}
return rdbtnNewRadioButton;
}
private JRadioButton getRdbtnNon() {
if (rdbtnNon == null) {
rdbtnNon = new JRadioButton("NON");
rdbtnNon.setForeground(new Color(255, 0, 0));
rdbtnNon.setBounds(361, 252, 127, 25);
rdbtnNon.addActionListener(this);
}
return rdbtnNon;
}
private JButton getBtnCreerCePortefeuille() {
if (btnCreerCePortefeuille == null) {
btnCreerCePortefeuille = new JButton("CREER CE PORTEFEUILLE");
btnCreerCePortefeuille.setForeground(new Color(102, 0, 0));
btnCreerCePortefeuille.setFont(new Font("Tahoma", Font.PLAIN, 16));
btnCreerCePortefeuille.setBounds(140, 306, 229, 25);
btnCreerCePortefeuille.addActionListener(this);
}
return btnCreerCePortefeuille;
}
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == btnCreerCePortefeuille)
Portefeuille.sauvePortefeuille(nom_fichier);
}
//public static void sauve_portefeuille(String chemin) {
// création d'un stream de sortie
// try {
// BufferedWriter buffer = new BufferedWriter(fichier);
// buffer.append(Jtxt_nom.getText() + ";");
// buffer.append(Jtxt_liquidites.getText());
// buffer.newLine();
// buffer.close();
//} catch (Exception e) {
// TODO: handle exception
//}
}
//}
----------------------------------------------------------------------------------------------------------
package bourse;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import entite.Titre_Porte_feuille;
public class Portefeuille {
private static String nom = "";
private static Double liquidites = 0.00;
private static String simulation = "non";
private static Titre_Porte_feuille[] titresportefeuilles = new Titre_Porte_feuille[40];
public static void main(String[] args) {
Portefeuille p1 = new Portefeuille();
Portefeuille.nom = "monpremier";
Portefeuille.liquidites = 5000.00;
for (int idx = 0; idx < Portefeuille.titresportefeuilles.length; idx++) {
Portefeuille.titresportefeuilles[idx] = new Titre_Porte_feuille();
Portefeuille.titresportefeuilles[idx].setCodeIsin(Globals.cac40[idx]);
}
Portefeuille.sauvePortefeuille();
Portefeuille p2 = new Portefeuille();
p2.restaurePortefeuille();
}
public static void sauvePortefeuille() {
String cheminFichier = "src\\bourse\\portefeuille.txt";
try {
FileWriter fw = new FileWriter(cheminFichier, true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
pw.append(nom + ";");
pw.append(liquidites.toString() + ";");
pw.append(simulation + ";");
for (Titre_Porte_feuille titre : titresportefeuilles) {
titre.sauvegarde(pw);
}
bw.newLine();
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void restaurePortefeuille() {
String cheminFichier = "src\\bourse\\portefeuille.txt";
try {
String ligneFichier = "";
FileReader fr = new FileReader(cheminFichier);
BufferedReader br = new BufferedReader(fr);
String[] donnees_portefeuille;
ligneFichier = br.readLine();
while (ligneFichier != null) {
int pos=0;
donnees_portefeuille = ligneFichier.split(";");
Portefeuille.nom = donnees_portefeuille[pos++];
Portefeuille.liquidites = Double.parseDouble(donnees_portefeuille[pos++]);
Portefeuille.simulation = donnees_portefeuille[pos++];
for (int idx = 0; idx < this.titresportefeuilles.length; idx++) {
this.titresportefeuilles[idx] = new Titre_Porte_feuille();
this.titresportefeuilles[idx].setCodeIsin(donnees_portefeuille[pos++]);
this.titresportefeuilles[idx].setValeur(Double.valueOf(donnees_portefeuille[pos++]));
this.titresportefeuilles[idx].setQte( Integer.valueOf(donnees_portefeuille[pos++]));
}
System.out.println(ligneFichier);
ligneFichier = br.readLine();
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void sauvePortefeuille(String nom_fichier) {
// TODO Auto-generated method stub
}
}
1 réponse
Si je comprends bien ce que tu voudrais faire, ce serait de faire hériter ta classe Creation_Porte_feuille en même temps de JFrame et de Portefeuille, or ce serait de l'héritage multiple ce qui est interdit en Java.
Ceci dit, quand je regarde ton code (vite fait parce que c'est long et pas indenté), il y a un certain nombre d'horreurs qui me font penser qu'en codant mieux tes classes, tu n'aurais pas besoin de cet héritage multiple.
Quelques horreurs :
Quelle mouche t'as piqué d'avoir voulu mettre tous les composants de la fenêtre en paramètre du constructeur !?
Bref, je ne continues pas, là je n'en suis qu'à la 3è instruction, et il y a déjà tout à revoir...
Il serait quand même bien de savoir à quoi ça te servirait d'hériter des deux classes, parce que la première concerne l'affichage, et la deuxième traitement, il est en général plutôt conseillé de séparer ces deux aspects, pas de les regrouper !La confiance n'exclut pas le contrôle
Ceci dit, quand je regarde ton code (vite fait parce que c'est long et pas indenté), il y a un certain nombre d'horreurs qui me font penser qu'en codant mieux tes classes, tu n'aurais pas besoin de cet héritage multiple.
Quelques horreurs :
extends JFrame implements ActionListenerJFrame est un conteneur, alors que les Listener s'appliquent à des composants, alors oui ça fonctionne, mais ce n'est pas rigoureux. Puisque ta seule action est d'appuyer sur ton bouton, c'est à lui que tu devrais ajouter un Listener, pas à toute la fenêtre.
public Creation_Porte_feuille(Portefeuille p1, JPanel contentPane, JLabel lblNomDeCe, JLabel lblNewLabel, JLabel lblVoulezVousSimulezr, JRadioButton rdbtnNewRadioButton, JRadioButton rdbtnNon, JButton btnCreerCePortefeuille)
Quelle mouche t'as piqué d'avoir voulu mettre tous les composants de la fenêtre en paramètre du constructeur !?
Bref, je ne continues pas, là je n'en suis qu'à la 3è instruction, et il y a déjà tout à revoir...
Il serait quand même bien de savoir à quoi ça te servirait d'hériter des deux classes, parce que la première concerne l'affichage, et la deuxième traitement, il est en général plutôt conseillé de séparer ces deux aspects, pas de les regrouper !La confiance n'exclut pas le contrôle