IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

Positionnement JPanel et problème de sélection


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 43
    Par défaut Positionnement JPanel et problème de sélection
    bonjour,

    suis debutante en java et j'ai deux problemes:

    1)le premier est que j'ai creer une jframe avec un borderLayout : mais a chaque fois que je cree un jpanel et que je veux l'ajouter pas de probleme tant que c'est le premier placé, mais des que j'en cree un autre et que je veux ajouter a une autre zone de mon borderLayout (en precisant bien la zone où je veux le placer ) ll va quand meme se mettre au centre(enfin c est ce que je crois) et du coup je ne vois plus le premier. J'ai lontemps lu la doc pour voir comment le faire ca ne marchep pas.

    2)mon deuxieme probleme est que dans un de mes panels je dois stocker une image sur laquelle je dois faire une selection rectangle avec le curseur, j'arrive bien a selection mais une fois que je lache ma souris le rectangle disparait.
    je n'ai aucune de comment faire.

    voici mon code , suis en retard sur mon projet merci d'avance pour votre aide
    // c'est la classe de ma Frame:

    package GeographicMap;

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Panel;

    import javax.swing.BorderFactory;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.border.Border;

    public class MappemondeFrame extends JFrame{

    public MappemondeFrame(){
    setTitle("Mappemonde");
    setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

    java.awt.Container c = getContentPane();

    c.add(makeLabel(" "),BorderLayout.NORTH);
    c.add(makeLabel(" "),BorderLayout.SOUTH);
    c.add(makeLabel(" "),BorderLayout.EAST);
    c.add(makeLabel(" "),BorderLayout.WEST);
    c.add(makeLabel(" "),BorderLayout.CENTER);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private JLabel makeLabel(String text)
    {
    JLabel label = new JLabel(text,JLabel.CENTER);
    Border borderLine = BorderFactory.createLineBorder(Color.BLACK);
    label.setBorder(borderLine);
    return label;
    }

    static final int DEFAULT_WIDTH =600;
    static final int DEFAULT_HEIGHT =600;



    public static void main(String[] args){

    JFrame f = new MappemondeFrame();
    /*JPanel p= new JPanel();
    / p.setLayout(new BorderLayout());
    / p.add( new JPanelImageBg("C:/Documents and Settings/massamba/workspace/mappemonde.jpg"), BorderLayout.CENTER);
    f.add(p);*/
    JPanel j= new JPanel();
    j.setLayout(new BorderLayout());
    j.add( new JPanelBoutons(), BorderLayout.NORTH);
    f.add(j);
    Component c = new JPanelImageBg("C:/Documents and Settings/massamba/workspace/mappemonde.jpg");
    f.add(c);
    JPanel d = new DrawingFrame();
    d.setLayout(new BorderLayout());
    d.add( new DrawingFrame(), BorderLayout.SOUTH);
    f.add(d);
    f.setVisible(true);

    }
    }


    // voici celle de mon curseur qui selection a l'aide d'un petit rectangle

    package GeographicMap;


    import java.awt.*;

    import java.awt.event.*;

    import javax.swing.*;

    import java.util.*;

    public class DrawingFrame extends JPanel implements ActionListener {

    Point p1 = null;

    Point p2 = null;

    boolean zoom_to_rect = false;

    public DrawingFrame()

    {

    setLayout(new BorderLayout());

    JPanel btnPanel = new JPanel();
    btnPanel.setBackground(Color.GREEN);
    add("South", btnPanel);


    addMouseListener(new MouseAdapter()

    {

    public void mousePressed(MouseEvent e)

    {

    setCursor( new Cursor(Cursor.CROSSHAIR_CURSOR));

    p1 = new Point(e.getPoint());

    p2 = new Point(e.getPoint());

    }

    public void mouseReleased(MouseEvent e)

    {

    setCursor( Cursor.getDefaultCursor() );

    p1 = new Point(e.getPoint());

    p2 = new Point(e.getPoint());

    repaint();

    }

    });

    addMouseMotionListener(new MouseMotionAdapter()

    {

    public void mouseDragged(MouseEvent e)

    {

    Rectangle r = new Rectangle( p1.x, p1.y, p2.x-p1.x+1, p2.y-p1.y+1 );

    p2 = new Point(e.getPoint());

    Rectangle r1 = new Rectangle( p1.x, p1.y, p2.x-p1.x+1, p2.y-p1.y+1 );


    r = r.union( r1 );

    repaint( r.x, r.y, r.width, r.height );

    zoom_to_rect = true;

    }

    });

    }

    public void paintComponent(Graphics g)

    {

    if(zoom_to_rect)

    {

    Rectangle r = g.getClipBounds();

    if( r!=null )

    {

    Color save_c = g.getColor();

    g.setColor( this.getBackground() );

    g.fillRect( r.x, r.y, r.width, r.height );

    g.setColor( save_c );

    g.drawLine( p1.x, p1.y, p2.x, p1.y );

    g.drawLine( p2.x, p1.y, p2.x, p2.y );

    g.drawLine( p2.x, p2.y, p1.x, p2.y );

    g.drawLine( p1.x, p2.y, p1.x, p1.y );

    }

    }

    else

    {

    }

    }

    public void actionPerformed(ActionEvent a)

    {

    }

    public static void main (String[] args)

    {

    JFrame f = new JFrame();
    f.setContentPane(new DrawingFrame());

    f.setBounds(10,10,500,400);

    f.setVisible(true);

    }

    }

  2. #2
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,
    ton premier problème vient du fait que tu ne peux ajouter qu'un seul par partie dans un BorderLayout. Si tu veux ajouter plusieurs éléments par exemple dans NORTH il faut soit changer de layout, soit ajouter un JPanel (et son propre layout) dans NORTH.

  3. #3
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 43
    Par défaut
    justement j'ai toujours fait attention a les ajouter une par zone donc je comprends pourquoi ils vont tous au centre les un sur les autres

  4. #4
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Dans ton code, tu ne les ajoutes pas par zone, de plus tu ne définis jamais le Layout du contentPane de la JFrame ensuite.
    Quand tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    f.add(j);
    f.add(c);
    f.add(d);
    tous tes composants s'ajoutent au contentPane de la JFrame en FlowLayout.

    Le mieux serait sans doute quelque chose de ce type, exemple pour les boutons (NORTH), JPanelImageBg (CENTER) et DrawingFrame (SOUTH) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    JPanel j= new JPanel(new BorderLayout());
    f.setContentPane(j);
     
    j.add( new JPanelBoutons(), BorderLayout.NORTH);
     
    Component c = new JPanelImageBg("C:/Documents and Settings/massamba/workspace/mappemonde.jpg");
    j.add(c, BorderLayout.CENTER);
     
    JPanel d = new DrawingFrame();
    d.setLayout(new BorderLayout());
    d.add( new DrawingFrame(), BorderLayout.SOUTH);
    j.add(d);
     
    f.setVisible(true);
    dans ce code tu redéfnis le contentPane de la JFrame en tant que JPanel avec un BorderLayout, au moins tu sais ce que tu auras. Ensuite, t'ajoutes chaque composant à ce JPanel.

  5. #5
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 43
    Par défaut
    merci beaucou^p, j'ai fini par resoudre mon premier probleme, mais l'idee est la meme que la tienne:

    je definis un global panel avec un borderLayout
    j'ajoute chaque element dans un panel
    j'ajoute ensuite un à un mes panels dans mon gobal panel en specifiant un la zone.

    voici le code:
    JFrame f = new MappemondeFrame();
    JPanel global = new JPanel();
    global.setLayout( new BorderLayout());
    JPanel p= new JPanel();
    p.setLayout(new BorderLayout());
    p.add( new JPanelImageBg("C:/Documents and Settings/massamba/workspace/mappemonde.jpg"));
    JPanel d = new JPanel();
    d.setLayout(new BorderLayout());
    d.add( new DrawingFrame());
    JPanel j= new JPanel();
    j.setLayout(new BorderLayout());
    j.add( new JPanelBoutons());
    global.add(p,BorderLayout.CENTER);
    global.add(d,BorderLayout.SOUTH);
    global.add(j,BorderLayout.NORTH);
    f.add(global);
    f.setVisible(true);

    est ce possible d'avoir de l'aide sur le second probleme? merci

    Citation Envoyé par Djakisback Voir le message
    Dans ton code, tu ne les ajoutes pas par zone, de plus tu ne définis jamais le Layout du contentPane de la JFrame ensuite.
    Quand tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    f.add(j);
    f.add(c);
    f.add(d);
    tous tes composants s'ajoutent au contentPane de la JFrame en FlowLayout.

    Le mieux serait sans doute quelque chose de ce type, exemple pour les boutons (NORTH), JPanelImageBg (CENTER) et DrawingFrame (SOUTH) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    JPanel j= new JPanel(new BorderLayout());
    f.setContentPane(j);
     
    j.add( new JPanelBoutons(), BorderLayout.NORTH);
     
    Component c = new JPanelImageBg("C:/Documents and Settings/massamba/workspace/mappemonde.jpg");
    j.add(c, BorderLayout.CENTER);
     
    JPanel d = new DrawingFrame();
    d.setLayout(new BorderLayout());
    d.add( new DrawingFrame(), BorderLayout.SOUTH);
    j.add(d);
     
    f.setVisible(true);
    dans ce code tu redéfnis le contentPane de la JFrame en tant que JPanel avec un BorderLayout, au moins tu sais ce que tu auras. Ensuite, t'ajoutes chaque composant à ce JPanel.

Discussions similaires

  1. Un problème de sélection
    Par cocaetjusdorange dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 10/04/2006, 17h02
  2. [XPath] Problème de sélection de noeuds
    Par Heriquet dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/02/2006, 10h22
  3. [VBA] Problème de sélection de feuille
    Par ptitsoleil87 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/12/2005, 10h44
  4. Problème de sélection sous IE
    Par titisite dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 27/12/2004, 14h05
  5. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo