Rechercher : dans
Par :

Probleme d'appel à paint en Java

Dernière réponse le 8 aoû 2008 à 09:11:26 lou, le 1 mai 2008 à 12:31:06 
 Signaler ce message aux modérateurs

Bonjour,
je cherche à créer une fenêtre en java, qui contient deux champs de texte, un bouton et une image(un tetravex en fait), de telle sorte que quand j'appuie sur le bouton, l'image change ( dessine un tetravex avec le nombre de case et de couleur que j'aurais entrés dans les champs de texte). J'ai écris le programme suivant:

import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;

import javax.swing.*;
import javax.swing.text.*;


public class FrameTetravex extends JFrame implements ActionListener{

protected static final String textFieldcolor = "number of color";
protected static final String textFieldsize = "size";
protected static final String buttonString = "launch";
protected static final int tailleCase = JCanvasGenerique.tailleCase;
public static int nombreCase =3;
public static int nombreCouleur = 1;


protected JLabel actionLabel;
protected JButton button;
protected JTextField color;
protected JTextField size;
protected JLabel Labelcolor;
protected JLabel Labelsize;
protected JCanvasGenerique tetravex;


@SuppressWarnings("deprecation")
public FrameTetravex() {
super("TetravexDemo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout grid = new GridLayout(1,2);
JPanel conteneur = new JPanel();
conteneur.setLayout(grid);


//button launch
ImageIcon leftButtonIcon = new ImageIcon();
button = new JButton(buttonString, leftButtonIcon);
button.setVerticalTextPosition(AbstractButton.CENTER);
button.setHorizontalTextPosition(AbstractButton.LEADING);
button.setMnemonic(KeyEvent.VK_D);
button.setActionCommand("launch");
button.addActionListener(this);
button.setToolTipText("Click this button to launch tetravex.");

//add(button);
conteneur.setOpaque(true);

//Create regular text fields.
color = new JTextField(3);
color.setActionCommand(textFieldcolor);
//color.addActionListener(this);

size = new JTextField(3);
size.setActionCommand(textFieldsize);
//size.addActionListener(this);


//Create labels for the fields.
Labelcolor = new JLabel(textFieldcolor + ": ");
Labelcolor.setLabelFor(color);
Labelsize = new JLabel(textFieldsize + ": ");
Labelsize.setLabelFor(size);

//Create a label to put messages during an action event.
actionLabel = new JLabel("complete the fields and press launch.");
actionLabel.setBorder(BorderFactory.createEmptyBorder(10,0,0,0));

//Lay out the text controls and the labels.
JPanel textControlsPane = new JPanel();
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();

textControlsPane.setLayout(gridbag);

JLabel[] labels = {Labelcolor, Labelsize };
JTextField[] textFields = {color, size};
addLabelTextRows(labels, textFields, gridbag, textControlsPane);
textControlsPane.add(button);
c.gridwidth = GridBagConstraints.REMAINDER; //last
c.anchor = GridBagConstraints.WEST;
c.weightx = 1.0;
textControlsPane.add(actionLabel, c);
textControlsPane.setBorder(
BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("Parameters"),
BorderFactory.createEmptyBorder(5,5,5,5)));



//creer un tetravex vide, taille par defaut.

tetravex = new JCanvasVide();
tetravex.setBackground(Color.WHITE);
tetravex.setVisible(true);
//tetravex.setAlignmentY(Component.CENTER_ALIGNMENT);
//tetravex.setAlignmentX(Component.CENTER_ALIGNMENT);

JPanel tetravexContainer = new JPanel();
tetravexContainer.setLayout(new GridLayout(1,1));
tetravexContainer.setBorder(
BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("Tetravex"),
BorderFactory.createEmptyBorder(5,5,5,5)));
tetravexContainer.setOpaque(false);
tetravexContainer.add(tetravex);


JPanel rightPane = new JPanel(new BorderLayout());
rightPane.add(tetravexContainer,
BorderLayout.CENTER);
//rightPane.setAlignmentY(Component.CENTER_ALIGNMENT);


//Put everything together.


JPanel leftPane = new JPanel(new BorderLayout());
leftPane.add(textControlsPane,
BorderLayout.PAGE_END);
//leftPane.setAlignmentY(Component.CENTER_ALIGNMENT);
conteneur.add(rightPane);
conteneur.add(leftPane);
//tetravex.reshape(20, 20, 30, 30);
//Display the window.
add(conteneur);
pack();
//set size manualy: how to do this diferently?
setSize(500, 230);
setVisible(true);




}

private void addLabelTextRows(JLabel[] labels,
JTextField[] textFields,
GridBagLayout gridbag,
Container container) {
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.EAST;
int numLabels = labels.length;

for (int i = 0; i < numLabels; i++) {
c.gridwidth = GridBagConstraints.RELATIVE; //next-to-last
c.fill = GridBagConstraints.NONE; //reset to default
c.weightx = 0.0; //reset to default
container.add(labels[i], c);

c.gridwidth = GridBagConstraints.REMAINDER; //end row
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;
container.add(textFields[i], c);
}
}

public void actionPerformed(ActionEvent e) {
if ("launch".equals(e.getActionCommand())) {
button.setEnabled(false);
//System.out.println(color.getText());
//System.out.println(size.getText());
try{
String couleur = color.getText();
System.out.println("color contient:" +couleur);
String taille = size.getText();
System.out.println("size contient:" +taille);
try{
nombreCase = Integer.parseInt(taille.trim());
System.out.print("nombreCase contient:");
System.out.println(nombreCase);
nombreCouleur = Integer.parseInt(couleur.trim());
System.out.print("nombreCouleur contient:");
System.out.println(nombreCouleur);
try{
dessinetetravex(nombreCase,nombreCouleur);
button.setEnabled(true);
}
catch(Exception exception1){
System.out.println("erreur dans action performed: dessiner tetravex");
}
}

catch(Exception exception2){
System.out.println("erreur dans action performed: conversion entier");
}
}
catch(Exception exception){
System.out.println("erreur dans action performed: label");
}
//finally{
//System.out.println("erreur dans action performed");
//}

}
else {
button.setEnabled(true);
}

}

public void dessinetetravex(int nombreCase, int nombreCouleur){
//affecter nombreCase et nombreCouleur avant new?
System.out.println("on dessine tetravex");
tetravex= new JCanvas();
tetravex.setVisible(true);
System.out.println("le tetravex est cree");
tetravex.setPreferredSize(new Dimension(tailleCase*nombreCase,tailleCase*nombreCase));
//forcer la peinture du tetravex
//tetravex.repaint();
//tetravex.paint(this.getGraphics());

tetravex.setVisible(true);
tetravex.revalidate();
tetravex.repaint();
//comment faire pour redesssiner?

this.pack();
this.setSize(500, 230); // en fonction de nombreCase
this.setVisible(true);

}




/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event dispatch thread.
* @throws InvocationTargetException
* @throws InterruptedException
*/


public static void main(String[] args) throws InterruptedException, InvocationTargetException {
//Schedule a job for the event dispatching thread:
//creating and showing this application's GUI.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try{
FrameTetravex frame = new FrameTetravex();
frame.setVisible(true);
System.out.println("appel au run");
}
catch(Exception e){System.out.println("erreur dans le run");}
}
});
}


}

JCanvasGenerique étend JPanel et possède deux sous classe, JCanvas et JCanvasVide, chacune redéfinisant leur paint propre.
Quand j'appuie sur le bouton l'actionPerformed est bien appelé ainsi que le dessinetetravex mais pas le paint de JCanvas, l'image n'est pas modifier dans ma fenêtre.


Savez-vous comment faire pour que le paint soit appelé et l'image modifiée?

Configuration: Mac OS X
Safari 523.10

Meilleures réponses pour « probleme d'appel à paint en Java » dans :
[Firefox] plugin Java Jre de Sun VoirA) Les différentes variantes Java chez Sun B) Installation sous Mandriva Limited Edition 2005 ETAPE 1 ETAPE 2: Création du lien symbolique C) Installation sous debian lenny D) Installation sous ubuntu hardy heron A) Les différentes...
Installer Java sous Ubuntu VoirPar défaut, Firefox n'est pas fourni avec Java. Voici comment procéder pour l'installer: Ouvrez un terminal (Menu Applications > Accessoires > Terminal) et tapez: sudo aptitude install sun-java6-jre sun-java6-plugin ou sudo aptitude install ...
[Logiciel libre] Installation firefox 2.0+java+flash VoirInstallation firefox 2.0+java+flash en ligne de commande A. INTRODUCTION B. INSTALLATION FIREFOX 1. Création d'environnement 2. Téléchargement et vérification de la signature 3. Installation de Firefox 4. Démarrage de l'application C....
Télécharger Paint.NET VoirPaint.NET est un outil de dessin et de retouche photo prévu pour fonctionner sous les systèmes Windows XP, Vista, ou Server 2003. Il supporte les calques, l'annulation illimitée, les effets spéciaux et une grande variété d'outils puissants.
Télécharger Java Runtime Environment VoirJava Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des personnes dans le monde entier, de calculer les intérêts de votre prêt immobilier ou de visualiser des images en 3D. Ces...
Télécharger Paint Shop Pro Photo VoirCorel n'est plus à présenter dans le monde du traitement d'images. Cette fois ci l'éditeur nous fait découvrir sa nouvelle création Paint Shop Pro Photo X2. Paint Shop Pro Photo X2 est outil puissant de traitement d'images. Il possède les toutes...
Java: Les méthodes VoirLa notion de fonction et de méthode On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instruction par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs...
Java - Les packages VoirIntroduction aux packages La programmation Java consiste à créer des classes. Or, étant donné qu'un programme est généralement développé par une équipe de programmeurs, c'est-à-dire plusieurs personnes, le fait de concaténer (mettre bout à bout)...
Java: les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage Java sont typées, c'est-à-dire que les données contenues dans...

1

djmad, le 8 aoû 2008 à 00:49:19

Dans ton paint je JCanvas, il faut utiliser drawImage(.... ,ImageObserver);
ImageObserver c'est le JPanel qui est au dessus...
Normalement, ton image devrait se rafraichir !

Répondre à djmad

2

 lou, le 8 aoû 2008 à 09:11:26

Merci mais j'ai déjà résolu de problème en enlevant la structure en héritage de Jcanvas qui n'était pas adapté en fait!
merci.

Répondre à lou