Problème rafraichissement

Résolu
williamNorthStudent Messages postés 4 Date d'inscription jeudi 19 janvier 2006 Statut Membre Dernière intervention 27 avril 2006 - 19 janv. 2006 à 17:08
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 - 24 janv. 2006 à 18:46
Bonjour,



J'ai commencé le développement d'une application en graphique permettant de rafraichir un JPanel a partir d'un clik de souris.

Je réussis à rafraichir le JPanel mais j'ai besoin de modifier
légèrement la taille de la JFrame afin que le nouveay JPanel s'affiche
sinon il est vide.

Cette application sera au finale une console d'administration
permettant d'executer des Scripts Shell donc il est fastidieux de
redimensionner la fenêtre à chaque changment de JPanel.

Voila mon code j'espère que vous pourrez me venir en aide.





//début du code



import java.awt.*;

import java.awt.event.*;



import javax.swing.*;





public class Console extends JPanel implements ActionListener{



private JPanel fenetre;

private JPanel p;

private JMenuItem emprunt;

private JMenuItem reserv;

private JMenuItem facile;

private JMenu menu;





public Console(){



setLayout(new BorderLayout());

setBackground(Color.white);



p=new JPanel();

p.setSize(700,500);

p.setLayout(new BorderLayout());





JMenuBar m=new JMenuBar();//bar de menu



menu=new JMenu("menu");//genre File | Edit



emprunt=new JMenuItem("Emprunter un livre");

emprunt.addActionListener(this);

reserv=new JMenuItem("Réserver un livre");

reserv.addActionListener(this);

facile=new JMenuItem("fastoche");

facile.addActionListener(this);





m.add(menu);

menu.add(emprunt);

menu.addSeparator();

menu.add(reserv);

menu.addSeparator();

menu.add(facile);



p.add(m,BorderLayout.PAGE_START);



//fenêtre est le JPanel qui est raffraichi

fenetre =new JPanel(new BorderLayout());

fenetre.setSize(700,500);

JLabel mess=new JLabel("Message d'accueil",JLabel.CENTER);



fenetre.add(mess,BorderLayout.CENTER);



p.add(fenetre,BorderLayout.CENTER);



add(p);



}

public void paintComponent(Graphics g){

super.paintComponent(g);

}

public class SubFen extends JPanel {/* classe permettant le new SubFen()**/



public SubFen(){

setLayout(new BorderLayout());

JLabel mess=new JLabel("Panneau CLIK",JLabel.CENTER);

add(mess,BorderLayout.CENTER);

}





}

public void actionPerformed(ActionEvent e) {

String cmd=e.getActionCommand();

if(cmd.equals("Emprunter un livre")){

fenetre.removeAll();

fenetre.add(new SubFen(),BorderLayout.CENTER);

System.out.println("test "+cmd);

fenetre.repaint();

p.repaint();



}

if(cmd.equals("Réserver un livre")){

System.out.println("test "+cmd);

}

if(cmd.equals("fastoche")){

System.out.println("test "+cmd);

}

}





public static void main(String[] args) {

JFrame f=new JFrame("Console d'administration");

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.setContentPane(new Console());

f.pack();

f.setVisible(true);

f.setSize(700,500);

}





}

//fin du code





Merci.


WILLIAM

3 réponses

sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
19 janv. 2006 à 17:24
moi je te conseil de reprendre ta source et etendre p^lutot la classe JFrame

ensuite tu ferai ton JMenuBar et tu l'ajouterai avec setJMenuBar(mamenubar)

tu declarerai et initialiserai tes composant et les JPanel

tu ferai monpanel.add(moncomposant);

et ajouterai le panel a la frame avec : add(monpanel,BorderLayout.POINTCARDINALENMAJUSCULE);
et si il le faut tu peu ajouter une barre de defilement a tes composant au moment ou tu les integre dans le JPanel :

monpanel.add(new JScrollPane(moncomposant));

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
3
williamNorthStudent Messages postés 4 Date d'inscription jeudi 19 janvier 2006 Statut Membre Dernière intervention 27 avril 2006
23 janv. 2006 à 20:25
Merci pour tes conseils.

J'avais le même résultat avec JFrame, il manquait juste l'application de validate() dans ActionPerformed.

Là j'ai un autre problème les composants ne s'affichent pas tout de suite je dois modifier la taille de la frame.

Par contre je n'ai pas trop saisie l'histoire de ScrollBar...



//début du code



import java.awt.*;

import java.awt.event.*;



import javax.swing.*;





public class mainW extends JFrame implements ActionListener{



//private JFrame main

private JPanel fenetre;

public JPanel start;

private JMenu menu;

private JMenuItem reserv;

private JMenuItem emprunt;

private JMenuItem facile;

private Container pane;





public mainW(){

super("console d'administration");

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

show();

setVisible(true);

pack();



/*

Toolkit kit = Toolkit.getDefaultToolkit();

Insets insets = kit.getScreenInsets(getGraphicsConfiguration());

Dimension screen = kit.getScreenSize();


setSize((int)(screen.getWidth()-insets.left-insets.right),
(int)(screen.getHeight()-insets.top-insets.bottom));

setLocation((int)(insets.left), (int)(insets.top));

*/

JScrollPane scroll = new JScrollPane(pane);





//setSize(1000,500);

//pane.setPreferredSize(1000,500);



FlowLayout flo =new FlowLayout();

pane = getContentPane();

pane.setLayout(flo);

Scrollbar scr=new Scrollbar();





JMenuBar bar=new JMenuBar();

menu = new JMenu("menu");

reserv = new JMenuItem("reserver");

emprunt = new JMenuItem("emprunter");

facile = new JMenuItem("facile");

reserv.addActionListener(this);

facile.addActionListener(this);

emprunt.addActionListener(this);



menu.add(reserv);

menu.add(emprunt);

menu.add(facile);



JMenu users=new JMenu("utilisateurs");

JMenuItem addu= new JMenuItem("ajouter un utilisateur");

JMenuItem addus= new JMenuItem("ajouter des utilisateurs");

JMenuItem qu= new JMenuItem("quotas");

addu.addActionListener(this);

addus.addActionListener(this);

qu.addActionListener(this);



users.add(addu);

users.add(addus);

users.add(qu);



JMenu net=new JMenu("réseau");

JMenuItem dh= new JMenuItem("dhcp");

JMenuItem mac= new JMenuItem("gestion adresse physique");



dh.addActionListener(this);

mac.addActionListener(this);



net.add(dh);

net.add(mac);





bar.add(menu);

bar.add(users);

bar.add(net);



setJMenuBar(bar);

// pane.add(menu;



start = new JPanel();

start.setSize(1000,500);

JLabel mess=new JLabel("CONSOLE D'ADMINISTRATION",JLabel.CENTER);

start.add(mess);



fenetre = new JPanel();

fenetre.setLayout(new BorderLayout());

fenetre.add(start,JLabel.CENTER);



pane.add(fenetre);



}



public void paintComponent(Graphics g){

super.paintComponents(g);

}



public class subfun extends JPanel{

public subfun(){

setLayout(new BorderLayout());

JLabel next = new JLabel("Panneau CLIK",JLabel.CENTER);

add(next,BorderLayout.CENTER);



}



}

public class saisi extends JPanel{

public saisi(){

setLayout(new BorderLayout());

JTextField next = new JTextField(40);

add(next,BorderLayout.CENTER);



}



}









public void actionPerformed(ActionEvent e) {

String cmd=e.getActionCommand();

if(cmd.equals("reserver")){

fenetre.removeAll();

fenetre.add(new subfun());

pane.remove(fenetre);

pane.add(fenetre);

pane.repaint();

pane.validate();

System.out.println("test "+ cmd);

}else if(cmd.equals("quotas")){

fenetre.removeAll();

fenetre.add(new saisi());

pane.remove(fenetre);

pane.add(fenetre);

pane.repaint();

pane.validate();

System.out.println("test "+ cmd);

}

}



public static void main(String[] args) {

new mainW();





}



}



//voila

merci

WILLIAM
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
24 janv. 2006 à 18:46
non juste un jour si tu doit utiliser un JScrollpane pour l'aouter a un composant , au lieu de declarer une nouvelle variable du peut directement faire a l'ajout du composant dans ton container monpanel.add(new JScrollPane(moncomposant));

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
Rejoignez-nous