2017-01-26 1 views
-1

J'essaie d'ajouter un bouton qui, une fois pressé, effacera le contenu du JPanel et ramènera le panneau à sa configuration d'origine. Comment ferais-je cela? J'ai essayé de revalider, removeall etc mais aucun n'a travaillé pour moi jusqu'ici. Des suggestions sur comment je peux le faire? Je vais joindre le code ci-dessous, l'aide serait grandement appréciée.Comment obtenir mon programme d'écoute d'action pour supprimer le contenu du JPanel actuel?

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 

public class WindowBlind extends JFrame 
         implements ChangeListener, ActionListener { 

    private JSlider slider;   
    private int sliderValue = 0; 
    private JPanel panel;    
    private JButton open; 
    private JButton close; 
    private JButton exit; 
    private boolean clear; 

    public static void main(String[] args) { 

     WindowBlind applic = new WindowBlind(); 
     applic.setLocation(100,100); 
     applic.setVisible(true); 

    } // main 

    public WindowBlind() { 

     setDefaultCloseOperation(EXIT_ON_CLOSE); 

     setTitle("WindowBlind"); 
     setSize(300,300); 

     Container window = getContentPane(); 
     window.setLayout(new FlowLayout()); 

     panel = new JPanel() { 

        public void paintComponent(Graphics g) { 
         super.paintComponent(g); 
         paintScreen(g);   

        } // paintComponent 
       }; 
     panel.setPreferredSize(new Dimension(200, 200)); 
     panel.setBackground(Color.white); 
     window.add(panel); 

     slider = new JSlider(JSlider.VERTICAL,0,100,0); 
     slider.setInverted(true);    // 0 will be at top, not bottom, of vertical slider 
     window.add(slider); 
     slider.addChangeListener(this);   // Register for slider events 

     JButton open = new JButton("Open Slider"); 
     window.add(open); 
     open.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent e) { 

       } 
      }); 

     JButton close = new JButton("Close Slider"); 
     window.add(close); 
     close.addActionListener(this); 


     JButton exit = new JButton("Exit Slider"); 
     window.add(exit); 
     exit.addActionListener(this); 


    } // WindowBlind constructor 

    public void paintScreen(Graphics g) { 

     g.setColor(Color.cyan); 
     g.fillRect(70, 40, 60, 100);   // The blue sky 
     g.setColor(Color.lightGray); 
     g.fillRect(70, 40, 60, sliderValue); // The blind, partially closed 
     g.setColor(Color.black); 
     g.drawRect(70, 40, 60, 100);   // The window frame 

    } // paintScreen 

    // When the slider is adjusted, this method is called automatically 
    public void stateChanged(ChangeEvent e) { 

      sliderValue = slider.getValue(); // Fetch the slider's current setting 
      repaint();      // Force a screen refresh (paintComponent is called indirectly) 

    } // stateChanged 

    @Override 
    public void actionPerformed(ActionEvent e) { 



    } 


} 
+1

Définir l'expression « configuration d'origine » – MadProgrammer

+0

Avez-vous essayé de changer 'sliderValue' à' 0', puis appel 'repaint'? – MadProgrammer

+0

Son image originale .... – DrComputerScience

Répondre

2

Je prends une supposition énorme et en supposant que vous souhaitez réinitialiser le curseur à sa « par défaut "Etat, qui suggère que vous avez besoin de changer le sliderValue, quelque chose comme ...

close.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     sliderValue = 0; 
     slider.repaint(); 
    } 
}); 

serait une meilleure solution pour générer une classe autonome qui encapsulé al l cette fonctionnalité, par exemple ...

public class SliderPane extends JPanel { 

    private double sliderValue; 

    public double getSliderValue() { 
     return sliderValue; 
    } 

    public void setSliderValue(double sliderValue) { 
     this.sliderValue = Math.max(Math.min(1.0, sliderValue), 0); 
     repaint(); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(100, 200); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     int width = getWidth(); 
     int height = getHeight(); 
     g.setColor(Color.cyan);   
     g.fillRect(0, 0, width, height);   // The blue sky 
     g.setColor(Color.lightGray); 
     g.fillRect(0, 0, width, (int)(sliderValue * height)); // The blind, partially closed 
     g.setColor(Color.black); 
     g.drawRect(0, 0, width, height);   // The window frame 
    } 

} 

Ensuite, vous pouvez contrôler la valeur du curseur par la méthode setSliderValue.

Cela vous permet également de spécifier la valeur du curseur en pourcentage, ce qui signifie que la taille du composant n'a pas d'importance que la zone remplie est un pourcentage de la hauteur

+0

Oh quelle surprise, encore une autre downvote non sollicitée, vu qu'aucune nouvelle réponse n'a été fournie et aucune nouvelle downvotes ou votes serrés n'a été faite contre la question et aucune des autres réponses n'a été downvoted, je peux seulement supposer que vous avez un aversion pour moi, à moins que vous ne puissiez vous aider à trouver pourquoi mes réponses pourraient être objectales, rien ne va changer – MadProgrammer

0

C'est parce que vous appelez toujours paintScreen de méthode paintComponent du panneau. Je suggère ce midification:

panel = new JPanel() { 
       boolean drawMe = true; 

       public void paintComponent(Graphics g) { 
        super.paintComponent(g); 
        if(drawMe) 
          paintScreen(g);   

       } // paintComponent 
      }; 

Chaque fois que vous voulez effacer le panneau, faites ceci:

panel.drawMe=false; 
panel.invalidate(); 
+0

Pourriez-vous placer le panneau clair à l'intérieur de l'action effectuée dans la sortie JButton ?? – DrComputerScience