Heritage?

Fermé
laurent2403 - 12 nov. 2012 à 08:24
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 12 nov. 2012 à 09:52
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

}
}

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 12/11/2012 à 09:54
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 :

extends JFrame implements ActionListener
JFrame 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
0