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

AWT/Swing Java Discussion :

JScrollPane et JLabel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut JScrollPane et JPanel
    Bonjour,

    Voilà je souhaiterais ajouter un JLabel sur mon JPanel à chaque fois que je click sur un bouton et lorsque que tous les JLabels prennent la place du JPanel, qu'un scroll apparaissent afin que j'ai accès à tous les JLabel. J'ai donc le code suivant:

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    public class CompareRealEstates extends JInternalFrame {
     
    	private static final long serialVersionUID = 1L;
    	private JPanel jContentPane = null;
    	private JScrollPane jScrollPane = null;
    	private JButton jButton = null;
    	private int x = 13, y = 14;
    	private JLabel jLabel;
     
    	public CompareRealEstates() {
    		super();
    		initialize();
    	}
     
    	private void initialize() {
    		this.setSize(new Dimension(792, 560));
    		this.setIconifiable(true);
    		this.setMaximizable(true);
    		this.setResizable(true);
    		this.setClosable(true);
    		this.setTitle("Compare real estates");
    		this.setContentPane(getJContentPane());
    		try{ 
    			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    		}catch(Exception e){ e.printStackTrace(); } 
    		SwingUtilities.updateComponentTreeUI(this);
    		this.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.black, 1));
    		this.setVisible(true);
    	}
     
    	private JPanel getJContentPane() {
    		if (jContentPane == null) {
    			jContentPane = new JPanel();
    			jContentPane.setLayout(null);
    			jContentPane.add(getJScrollPane(), null);
    			jContentPane.add(getJButton(), null);
    		}
    		return jContentPane;
    	}
     
    	private JScrollPane getJScrollPane() {
    		if (jScrollPane == null) {
    			jScrollPane = new JScrollPane();
    			jScrollPane.setBounds(new Rectangle(9, 10, 680, 459));
    			jScrollPane.setBorder(null);
    			jScrollPane.setSize(new Dimension(680, 506));
    			jScrollPane.setColumnHeaderView(getJButton());
    			jScrollPane.setAutoscrolls(true);
    		}
    		return jScrollPane; 
    	}
     
    	private JButton getJButton() {
    		if (jButton == null) {
    			jButton = new JButton();
    			jButton.setBounds(new Rectangle(709, 23, 72, 23));
    			jButton.setText("Create");
    			jButton.addActionListener(new java.awt.event.ActionListener() {
    				public void actionPerformed(java.awt.event.ActionEvent e) {
    					String temp = "testsmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm" +
    							"mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm" +
    							"mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm";
    					jLabel = new JLabel();
    					jLabel.setBounds(new Rectangle(x, y, 678, 88));
    					jLabel.setText("<html>ligne 1<br>" + temp + "<br>" + temp + "</html>");
    					jLabel.setVisible(true);
    					//jContentPane.add(jLabel);
    					//jScrollPane.add(jLabel);
    					jScrollPane.setViewportView(jLabel);
    					jContentPane.updateUI();
    					y += 90;
    				}
    			});
    		}
    		return jButton;
    	}
    Le problème est que le JLabel ne s'affiche qu'en plein milieu du JScrollPane quelque soit le nombre de fois où je click sur le bouton.
    Alors j'ai du zappé un truc ou ne pas comprendre le principe du JScrollPane mais là je bloque donc si vous avez une idée sur le problème n'hésitez pas

    Merci et bonne fin d'aprem.
    Dernière modification par Invité ; 03/08/2007 à 18h13. Motif: Titre mieux adapté

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    *j'aime pas la solution mais bon, pas moi qui choisi*

    un JScrollPane ne contient qu'un element.
    donc tu mets un JPanel dans le JScrollPane et tu ajoutes les JLabel dans le JPanel. (avec un revalidate une fois fait).
    le scrollpane suivra la taille du panel qui est dedans et affichera une scrollbar si besoin.

    perso : j'aurais fait une jtable, tout ce qui est entassement de composants (1 à N) c'est très moche je trouve.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Alors j'ai changé un peu mon code mais là je n'ai plus la barre de défilement qui apparait quand j'en ai besoin mais par contre il y a bien plusieurs JLabel mais je ne vois pas où est mon erreur
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    public class CompareRealEstates extends JInternalFrame {
     
    	private static final long serialVersionUID = 1L;
    	private JPanel jContentPane = null;
    	private JScrollPane jScrollPane = null;
    	private JButton jButton = null;
    	private int x = 0, y = 0;
    	private JLabel jLabel;
    	private JPanel jPanel = null;
    	public CompareRealEstates() {
    		super();
    		initialize();
    	}
     
    	private void initialize() {
    		this.setSize(new Dimension(792, 560));
    		this.setContentPane(getJContentPane());
    		this.setIconifiable(true);
    		this.setMaximizable(true);
    		this.setResizable(true);
    		this.setClosable(true);
    		this.setTitle("Compare real estates");
    		try{ 
    			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    		}catch(Exception e){ e.printStackTrace(); } 
    		SwingUtilities.updateComponentTreeUI(this);
    		this.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.black, 1));
    		this.setVisible(true);
    	}
     
    	private JPanel getJContentPane() {
    		if (jContentPane == null) {
    			jContentPane = new JPanel();
    			jContentPane.setLayout(null);
    			jContentPane.add(getJScrollPane(), null);
    			jContentPane.add(getJButton(), null);
    		}
    		return jContentPane;
    	}
     
    	private JScrollPane getJScrollPane() {
    		if (jScrollPane == null) {
    			jScrollPane = new JScrollPane();
    			jScrollPane.setBorder(null);
    			jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
    			jScrollPane.setBounds(new Rectangle(5, 8, 686, 510));
    			jScrollPane.setColumnHeaderView(getJButton());
    			jScrollPane.setViewportView(getJPanel());
    			jScrollPane.setAutoscrolls(true);
    		}
    		return jScrollPane; 
    	}
     
    	private JButton getJButton() {
    		if (jButton == null) {
    			jButton = new JButton();
    			jButton.setText("Create");
    			jButton.setBounds(new Rectangle(705, 14, 65, 23));
    			jButton.addActionListener(new java.awt.event.ActionListener() {
    				public void actionPerformed(java.awt.event.ActionEvent e) {
    					String temp = "testsmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm" +
    							"mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm" +
    							"mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm";
    					jLabel = new JLabel();
    					jLabel.setBounds(new Rectangle(x, y, 678, 88));
    					jLabel.setText("<html>ligne 1<br>" + temp + "<br>" + temp + "</html>");
    					jLabel.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.LIGHT_GRAY, 1));
    					jLabel.setVisible(true);
    					jPanel.add(jLabel);
    					jPanel.updateUI();
    					jScrollPane.revalidate();
    					y += 90;
    				}
    			});
    		}
    		return jButton;
    	}
     
    	private JPanel getJPanel() {
    		if (jPanel == null) {
    			jPanel = new JPanel();
    			jPanel.setLayout(null);
    		}
    		return jPanel;
    	}

  4. #4
    Invité
    Invité(e)
    Par défaut
    J'ai beau cherché je ne vois pas d'où vient mon erreur.

    Quelqu'un a un avis là dessus ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bon alors je suis toujours bloqué mais là je vous met un peu de code, vous pourrez sûrement mieux m'aider.
    Voici comment j'ai défini mon JScrollPane et mon JPanel:
    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
    16
    17
    18
    private JScrollPane getJScrollPane() {
    	if (jScrollPane == null) {
    		jScrollPane = new JScrollPane();
    		jScrollPane.setBorder(null);
    		jScrollPane.setBounds(new Rectangle(4, 8, 706, 515));
    		jScrollPane.setViewportView(getJPanel());
    		jScrollPane.setAutoscrolls(true);
    	}
    	return jScrollPane; 
    }
     
    private JPanel getJPanel() {
    	if (jPanel == null) {
    		jPanel = new JPanel();
    		jPanel.setLayout(null);
    	}
    	return jPanel;
    }
    Une fois que j'ai ajouté tous mes JLabels à mon JPanel je fait comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    jPanel.updateUI();
    jScrollPane.add(jPanel);
    jScrollPane.setViewportView(jPanel);
    jScrollPane.revalidate();
    Problème: il n'y a pas la barre de scroll horizontal et donc impossible de descendre.

    Qu'est ce que j'ai mal fait ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je suis désolé de revenir vers vous encore une fois mais j'ai beau regarder sur d'autres topics je ne vois pas où j'aurais pu faire une erreur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. JscrollPane, Jlabel et GridBagLayout
    Par mrboliboli dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 11/03/2015, 15h46
  2. Centrer un JLabel dans un JScrollPane
    Par Iron Bull dans le forum Composants
    Réponses: 4
    Dernier message: 03/03/2009, 15h45
  3. gridLayout, JLabel et JScrollPane
    Par zulot dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 03/12/2007, 14h48
  4. [Look and feel] Texte des JLabels en gras
    Par aliasjcdenton dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 26/01/2006, 11h49
  5. [JScrollPane] élargir la taille
    Par nyny_p dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 03/05/2003, 10h54

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