2017-01-26 6 views
-1

私は、ボタンを押すと、JPanelの内容を消去し、パネルを元の設定に戻すボタンを追加しようとしています。これをどうやってやるの?私はrevalidate、removeallなどを試みましたが、どれも今まで私のために働いていませんでした。どのように私はこれを行うことができます上の任意の提案?私は以下のコードを添付します、ヘルプは大いに感謝されるでしょう。現在のJPanelからコンテンツを削除するためにアクションリスナーを取得するにはどうすればよいですか?

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

高さの割合は、「元のセットアップ」 – MadProgrammer

+0

の定義された領域が満たされたとして、部品の大きさは関係ないことを意味し、割合としてスライダーの値を指定することができますが変更しようとしたことがあり'sliderValue'を' 0'にしてから 'repaint'を呼び出しますか? – MadProgrammer

+0

元画像.... – DrComputerScience

答えて

2

を「あなたはsliderValue、何かのように変更する必要があることを示唆している状態では、...

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

よりよい解決策は、Alをカプセル化された自己完結型のクラスを生成することであろうLこの機能は、たとえば...

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 
    } 

} 

次に、あなたはsetSliderValue方法でスライダー値を制御することができます。

また、これはあなたが

+0

ああ、驚き、まだ別の迷惑なdownvoteは、新しい答えが提供されていないとして、新しいdownvotesやクローズ票は、質問に対して行われていないと他の答えのどれもdownvotedされていない、私はあなたがあなたが私の答えが客観的であると感じるかもしれない理由について何らかの援助を提供できない限り、私は嫌いです。 – MadProgrammer

0

あなたは常にパネルのpaintComponentメソッドからpaintScreenを呼び出すためです。あなたがパネルをクリアしたいときはいつでも、

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

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

       } // paintComponent 
      }; 

この操作を行います:私はこのmidificationを示唆している、私は巨大な推測を取り、あなたはそれの「デフォルトにスライダーをリセットしたいと仮定してい

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

JButton出口で実行されるアクションの内側にクリアパネルを配置できますか? – DrComputerScience

関連する問題