Swing interface java urgent svp

Fermé
melaine - 2 avril 2002 à 15:08
hub Messages postés 50 Date d'inscription jeudi 6 septembre 2001 Statut Membre Dernière intervention 2 avril 2002 - 2 avril 2002 à 16:00
Le petit prog suivant permet de tracer un graphique dans un interface graphique puis de zoomer dessus. Lors du zoom la figure devient trop grande pour la fenetre graphique, des scrollbars devraient apparaitre pour pouvoir voir le reste de la figure MAIS ce n'est pas le cas. A celui qui peut m'aider pour faire apparaitre les scrollbars pour visionner l'ensemble du graphique, merci.

PS : le prog est ci dessous :

import javax.swing.*;
import javax.swing.JPanel;
import java.awt.geom.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.awt.print.*;

/* La classe Agglo est un objet qui possède les propriétés de JPanel */
public class Agglo extends JPanel {

double zoom=1.0; // Niveau de zoom


public static void main(String[] argv) {

JFrame cadre = new JFrame(); // On crée un cadre


//cadre.getContentPane().setLayout(new BorderLayout());
cadre.setBounds(100,100,400,400); // Que l'on place à ces positions
cadre.setBackground( Color.white );


//création du panel contenant le graphique
JPanel pane = new JPanel();

pane.setLayout(new BorderLayout());


// Crée une instance de Agglo - composante graphique
Agglo frac = new Agglo();
// Les lignes suivantes assurent que chaque événement est tracé dès
// qu'il est ajoute au graphique
/* frac.setDoubleBuffered(false);
RepaintManager rm = RepaintManager.currentManager(frac);
rm.setDoubleBufferingEnabled(false);
*/
// On ajoute le menu à la fenêtre.
final FenMenu menu = new FenMenu(frac);
cadre.setJMenuBar(menu.barreMenus);


// et le graphique.
pane.add(frac);//,BorderLayout.CENTER);
JScrollPane scrollPane = new JScrollPane(pane);
cadre.getContentPane().add(scrollPane);
cadre.setVisible(true);
System.out.println("pane : "+pane.getSize());

}


/* Cette méthode est appelée automatiquement par Java -- elle lance la
* simulation */
public void paintComponent( Graphics g ) {
Graphics2D g2 = (Graphics2D) g;
trace(g2);

}

/* Cette méthode lance la simulation, elle génère un objet graphique */
public void trace( Graphics2D g2) {

// On identifie d'abord la taille de la fenêtre.
Dimension grandeur = getSize();
double lv_xmax = grandeur.width;
double lv_ymax = grandeur.height;

System.out.println("dimension : "+grandeur);

// On écrit par dessus ce qui se trouvait dans la fenêtre auparavant.
g2.setColor(Color.white);
Rectangle2D rec = new Rectangle2D.Double(0.0,0.0,lv_xmax,lv_ymax);
g2.fill(rec);


// La couleur des objets graphiques est définie comme noire.
g2.setColor(Color.black);


//génération de l'objet graphique : tracage du rectangle
//graphique(g2, (double) xmilieu, (double) ymilieu);
graphique(g2,(int)lv_xmax,(int)lv_ymax);
}


//public void graphique( Graphics2D g2, double x, double y){
public void graphique( Graphics2D g2,int x, int y){


//coefficent de zoom
double echelleZoom = Math.max(zoom,1.0);
int echelle=(int)echelleZoom;
// System.out.println("math.max :"+echelleZoom);

g2.drawLine(echelle/10,echelle/20,(int)echelleZoom,(int)echelleZoom);

Ellipse2D el = new Ellipse2D.Double(echelleZoom/30,
echelleZoom/30,echelleZoom, echelleZoom);
g2.fill (el);




}

}

/*
* La classe FenMenu définit un menu que l'on va placer dans la fenêtre.
* Comme vous pouvez le constater, il facile de définir un tel objet.
*/

class FenMenu implements ActionListener {

private Agglo frac; // Référence à l'objet Agglo

public JMenuBar barreMenus; // Barre du menu
// Titre des items dans le menu
private JMenuItem quitter;

// Constructeur
public FenMenu( Agglo frac ) {
this.frac = frac; // On importe la référence à l'objet graphique frac

barreMenus = new JMenuBar(); // Crée une barre de menu
JMenu choix = new JMenu("QUITTER"); // Définit un premier choix
choix.setMnemonic('Q'); // Permet l'utilisation de la touche alt-k
// pour appeler le menu (peut ne pas marcher)
barreMenus.add(choix); // Ajoute choix au menu


quitter = new JMenuItem("Quitter"); // Nouvel item
quitter.addActionListener(this);// Attache un écouter
quitter.setMnemonic('Q');// Et un autre raccourci
choix.add(quitter);// Ajoute au titre choix


JButton boutonZin = new JButton("Z in");
boutonZin.addActionListener(this);
barreMenus.add(boutonZin);


JButton boutonZout = new JButton("Z out");
boutonZout.addActionListener(this);
barreMenus.add(boutonZout);

}

/* Ecouteur pour toutes les options du menu */
public void actionPerformed( ActionEvent e) {

Object source = e.getSource(); // Extrait l'élément du menu sélectionné
String command = e.getActionCommand();

//donne les dimensions de la fenetre ou est logé le graphique
Dimension dimensionFenetre=frac.getSize();
double x=dimensionFenetre.width;
double y=dimensionFenetre.height;


if (command =="Z in")
{
frac.zoom *= 2.0;
frac.paintImmediately(0,0,(int)x,(int)y);
}

if (command =="Z out")
{
frac.zoom /= 2.0;
frac.paintImmediately(0,0,(int)x,(int)y);
}

if( source == quitter ) System.exit(1); // Quitte le programme
}
}
A voir également:

3 réponses

Aucune idée mais prkoi as-tu mis System.exit(1) et non pas System.exit(0) ?

OmEn [i2n]

www.i-2n.net
0
hub Messages postés 50 Date d'inscription jeudi 6 septembre 2001 Statut Membre Dernière intervention 2 avril 2002 7
2 avril 2002 à 15:24
Je crois que tu devrais ajouter un objet de type container à la Frame et le nommer

Container tainer = frame.getContentPane();
tainer.setScrollBar(scrollBar);
tainer.add(pane);
Les composants d'une frame doivent toujours être ajoutés dans le container


hub
"Pas plus bas qu'au fond"
0
Ok je te remercie pour ta solution, mais je voudrais savoir ou je les place dans mon prog (ajout de tes lignes de commandes tout simplement ou ajout + suppression de certaines de mes lignes)
Merci d'avance.
0
hub Messages postés 50 Date d'inscription jeudi 6 septembre 2001 Statut Membre Dernière intervention 2 avril 2002 7
2 avril 2002 à 16:00
ok, je vais faire mon possible

hub
"Pas plus bas qu'au fond"
0