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 :

Effacer le dernier contenu d'un JPanel


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 3
    Par défaut Effacer le dernier contenu d'un JPanel
    Bien le bonjour, je post ce message car j'ai un peu traîné sur des forums sans trouver de réponse concrète à mon problème !
    C'est mon premier post sur un forum je vais essayer d'êtres assez clair ^^.

    J'aurais besoin d'effacer le dernier texte qui auras été écris dans mon Jpanel grâce à un bouton effacer.

    Je vais vous présentez mon travail actuel.

    Dans mon Ihm ci dessous l'utilisateur rentre son texte dans le jTextfield en haut à droite puis l'emplacement et la taille de celui-ci (le choix de la police ne fonctionne pas pour le moment).
    J'aimerais effacer le dernier texte afficher ou carrément tout les textes qui ont été rentré si il le faut grâce au bouton Effacer.

    Nom : img_forum.png
Affichages : 566
Taille : 4,3 Ko

    Et voici le code du bouton confirmer :

    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 void jButton_confirm_placementActionPerformed(java.awt.event.ActionEvent evt) {                                                          
            Graphics g=jPanel_test.getGraphics();
     
            //Récupération de la taille et de l'emplacement 
            String texte = jTextArea1.getText();
            String pos_x = jTextField_x.getText();
            int x = Integer.valueOf(pos_x);
            String pos_y = jTextField_y.getText();
            int y = Integer.valueOf(pos_y);
            String font_taille = jTextField_font_taille.getText();
            int font_taille_f = Integer.valueOf(font_taille);
     
            //Écriture du texte à partir des parramêtres ci dessus
            g.setFont(new Font("Arial", Font.PLAIN, font_taille_f));
            g.drawString(texte, x, y);
     
     
        }
    J'avais penser à une solution que je n'ai pas réussi à mettre en place donc pas pu vérifier.
    C'était d’utiliser un tableau pour placer le texte à l’intérieur puis ensuite d'effacer le contenu du tableau.
    Voilà à ce que j'avais penser mais cela doit être faux en plus d'être incomplet ^^.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private int[]texte = new int[10];
    private int compteur=0;
     
    // Quand on appuie sur le bouton confirmer place le texte dans la première ligne du tableau puis incrémente
    texte[compteur] = ??????;
                compteur++;
                repaint();
     
    //Efface le contenu du tableau quand on appuie sur le bouton effacer
    compteur = 0;
            repaint();
    Voila !
    J'espère que c'est assez compréhensible et que vous trouverez une solution !
    Merci d'avance à vous !

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu peux revoir complètement ton code:

    1) tu n'es pas censé appeler getGraphics() toi même, pour dessiner sur un composant, on surcharge sa méthode paintComponent() et on y effectue les opération de dessin
    2) tu n'a rien ajouté à ton JPanel dans ton code, tu a juste allumé des pixels à l'écran. Bouge une fenêtre au dessus de ta fenêtre et tu verra que ton texte disparait.

    Pour faire ceque tu veux faire, soit tu stocke dans ton objet des textes + coordonnées et tu les affiches durant paintComponent() avec un code similaire à celui que tu as déjà
    Soit tu ajoute directement des JLabel dans ton Panel

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 3
    Par défaut
    Merci pour ta réponse.

    J'ai fait mon code à partir de morceau de tp que j'ai réaliser en cour et que j'ai regroupé donc je doutait bien que l'erreur venait de moi et non du code ^^

    Par contre je suis novice en programmation et je n'ai très bien compris le principe de la surcharge.

    J'ai fait mon ihm sous netbeans et je voulais savoir si ce que tu me disais ne pas appelé moi même getgraphics() reviens à travailler dans le customize code du Jpanel.

    Je te remercie de prendre du temps pour me répondre.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Par surcharge, on parle de redéfinir la méthode paintComponent() en créant une nouvelle classe qui étend JPanel, et dans cette redéfinition, on parcourt un tableau ou une liste, ou peu importe, pour afficher les String.

    Exemple :

    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    public class DemoDrawText extends JPanel {
     
    	private final List<Text> texts = new ArrayList<>();
     
    	public DemoDrawText() {
    		setPreferredSize(new Dimension(500,500));
    		setBackground(Color.WHITE);
    		setForeground(Color.BLACK);
    	}
     
    	public void addText(String text, Font font, int x, int y) {
    		addText(new Text(text, font, x, y));
    	}
     
    	public void addText(Text text) {
    		texts.add(text);
    		repaint();
    	}
     
    	public void reset() {
    		texts.clear();
    		repaint();
    	}
     
    	@Override
    	protected void paintComponent(Graphics g) {
    		super.paintComponent(g);
    		texts.forEach(text-> text.draw(g));
    	}
     
    	public static class Text {
    		public final String text;
    		public final Font font;
    		public final int x;
    		public final int y;
     
    		public Text(String text, Font font, int x, int y) {
    			this.text=Objects.requireNonNull(text);
    			this.font=Objects.requireNonNull(font);
    			this.x=x;
    			this.y=y;
    		}
     
    		private void draw(Graphics g) {
    			g.setFont(font);
    			g.drawString(text, x, y);
    		}
     
    	}
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		DemoDrawText text = new DemoDrawText();
    		frame.add(text, BorderLayout.CENTER);
     
    		JPanel controlPanel = new JPanel(new GridBagLayout());
    		GridBagConstraints gbc = new GridBagConstraints(0, 0, 1, 1, 1, 0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(2,2,2,2), 0, 0);
     
    		gbc.gridwidth=4;
    		JTextField textfield = new JTextField();
    		controlPanel.add(textfield,gbc);
     
    		Box xyPanel = new Box(BoxLayout.LINE_AXIS);
     
    		gbc.gridx=0;
    		gbc.gridy=1;
    		controlPanel.add(xyPanel, gbc);
     
    		xyPanel.add(new JLabel("x :"));
    		xyPanel.add(Box.createHorizontalStrut(4));
    		JFormattedTextField xfield = new JFormattedTextField(NumberFormat.getIntegerInstance());
    		xfield.setValue(0);
    		xyPanel.add(xfield);
    		xyPanel.add(Box.createHorizontalStrut(4));
    		xyPanel.add(new JLabel("y :"));
    		xyPanel.add(Box.createHorizontalStrut(4));
    		JFormattedTextField yfield = new JFormattedTextField(NumberFormat.getIntegerInstance());
    		yfield.setValue(10);
    		xyPanel.add(yfield);
     
    		GraphicsEnvironment grenv = GraphicsEnvironment.getLocalGraphicsEnvironment();
    		JComboBox<String> fontCombo = new JComboBox<>(Arrays.stream(grenv.getAllFonts())
    				                                            .map(Font::getName)
    				                                            .toArray(String[]::new));
     
    		fontCombo.setSelectedItem("Arial");
     
    		gbc.gridx=0;
    		gbc.gridy=5;
    		gbc.gridwidth=1;
    		controlPanel.add(fontCombo, gbc); 
     
    		gbc.gridx=2; 
    		JFormattedTextField sizefield = new JFormattedTextField(NumberFormat.getIntegerInstance());
    		sizefield.setColumns(5);
    		controlPanel.add(sizefield, gbc);
    		sizefield.setValue(12);
     
    		gbc.gridx=0;
    		gbc.gridy=6;
    		JButton buttonConfirm = new JButton("Confirmer");
    		controlPanel.add(buttonConfirm, gbc);
    		buttonConfirm.addActionListener(e-> text.addText(textfield.getText(), createFont((String)fontCombo.getSelectedItem(), (Number)sizefield.getValue()), ((Number)xfield.getValue()).intValue(), ((Number)yfield.getValue()).intValue()));
    		gbc.gridx=2;
    		JButton buttonDelete = new JButton("Effacer");
    		controlPanel.add(buttonDelete, gbc);
    		buttonDelete.addActionListener(e-> text.reset());
     
    		gbc.gridx=0;
    		gbc.gridy=4;
    		gbc.gridwidth=1;
    		gbc.weightx=0;
    		gbc.anchor=GridBagConstraints.WEST;
    		gbc.fill=GridBagConstraints.NONE;
    		controlPanel.add(new JLabel("Police"), gbc);
    		gbc.gridx=2;
    		controlPanel.add(new JLabel("Taille"), gbc);
     
    		frame.add(controlPanel, BorderLayout.EAST);
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private static Font createFont(String name, Number size) {
    		return new Font(name, Font.PLAIN, size.intValue());
    	} 
     
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 3
    Par défaut
    Merci beaucoup pour ton aide je vais allez décortiquer tout ça, et si jamais j'ai besoin je sais ou la trouver !

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

Discussions similaires

  1. Effacer le contenu d'un JPanel?
    Par diditin dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 16/07/2009, 12h11
  2. Ecrire dans un fichier sans effacer son ancien contenu.
    Par Mysti¢ dans le forum Général Python
    Réponses: 4
    Dernier message: 03/11/2006, 14h18
  3. [c# 1.1] écrire en effacant la derniere ligne
    Par longuard dans le forum Windows Forms
    Réponses: 1
    Dernier message: 06/10/2006, 16h49
  4. Réponses: 11
    Dernier message: 08/08/2006, 23h11
  5. Réponses: 3
    Dernier message: 24/05/2006, 10h26

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