Faculté des Sciences de Luminy |
Programmation Orientée Objets, langage Java
|
Henri Garreta
|
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.util.StringTokenizer; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; public class SystemeVisible extends JFrame implements ActionListener { private SystemeLineaire systeme; private JTextField champDimension; private JTextField champEpsilon; private JButton boutonAccepter; private JButton boutonTriangulariser; private JButton boutonResoudre; private JTextArea vueMatrice; private boolean vueModifiee; public SystemeVisible() { super("Système linéaire"); champDimension = new JTextField(4); champDimension.addActionListener(this); champEpsilon = new JTextField(4); champEpsilon.addActionListener(this); boutonAccepter = new JButton("Accepter"); boutonAccepter.addActionListener(this); boutonAccepter.setEnabled(false); boutonTriangulariser = new JButton("Triangulariser"); boutonTriangulariser.addActionListener(this); boutonTriangulariser.setEnabled(false); boutonResoudre = new JButton("Resoudre"); boutonResoudre.addActionListener(this); boutonResoudre.setEnabled(false); JPanel panneau = new JPanel(); panneau.setBackground(Color.lightGray); panneau.add(new JLabel("dim", JLabel.RIGHT)); panneau.add(champDimension); panneau.add(new JLabel("epsilon", JLabel.RIGHT)); panneau.add(champEpsilon); panneau.add(boutonAccepter); panneau.add(boutonTriangulariser); panneau.add(boutonResoudre); add(panneau, BorderLayout.NORTH); vueMatrice = new JTextArea(); vueMatrice.setFont(new Font("Monospaced", Font.PLAIN, 12)); vueMatrice.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent evt) { vueModifiee = true; misaJourBoutons(); } }); add(vueMatrice, BorderLayout.CENTER); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); setSize(500, 400); setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getSource() == champDimension) { try { int n = Integer.parseInt(champDimension.getText()); systeme = new SystemeLineaire(n); } catch (Exception exc) { } if (systeme != null) { champDimension.setText("" + systeme.n()); champEpsilon.setText("" + systeme.epsilon()); } } else if (e.getSource() == champEpsilon) { try { double eps = Double.parseDouble(champEpsilon.getText()); systeme.defEpsilon(eps); } catch (Exception exc) { } if (systeme != null) champEpsilon.setText("" + systeme.epsilon()); } else if (e.getSource() == boutonAccepter) { StringTokenizer tokens = new StringTokenizer(vueMatrice.getText()); int n = (int) Math .round((Math.sqrt(1 + 4 * tokens.countTokens()) - 1) / 2); systeme = new SystemeLineaire(n); champDimension.setText("" + systeme.n()); champEpsilon.setText("" + systeme.epsilon()); try { for (int i = 0; i < n; i++) for (int j = 0; j <= n; j++) { String tok = tokens.nextToken(); tok = tok.replace(',', '.'); // Double.parseDouble accepte "1.5" non "1,5" systeme.setCoef(i, j, Double.parseDouble(tok)); } } catch (Exception exc) { } vueModifiee = false; } else if (e.getSource() == boutonTriangulariser) systeme.triangularisation(); else /* e.getSource() == boutonResoudre */ systeme.resolution(); if (systeme != null) afficherSysteme(); misaJourBoutons(); } private void afficherSysteme() { ByteArrayOutputStream fluxOctets = new ByteArrayOutputStream(); systeme.impression(new PrintStream(fluxOctets)); vueMatrice.setText(fluxOctets.toString()); } void misaJourBoutons() { if (vueModifiee) { boutonAccepter.setEnabled(true); boutonTriangulariser.setEnabled(false); boutonResoudre.setEnabled(false); } else if (systeme == null || systeme.etat() == SystemeLineaire.SINGULIER || systeme.etat() == SystemeLineaire.RESOLU) { boutonAccepter.setEnabled(false); boutonTriangulariser.setEnabled(false); boutonResoudre.setEnabled(false); } else { boutonAccepter.setEnabled(false); boutonTriangulariser .setEnabled(systeme.etat() == SystemeLineaire.INITIAL); boutonResoudre.setEnabled(true); } } public static void main(String[] args) { new SystemeVisible(); } }