2012-11-26 18 views
8

के अनुसार चेंज पैनल दो बटनों में दो बटन जोड़े गए हैं, यदि पहले बटन पर क्लिक किया गया है तो इसे दूसरे बटन के साथ अगले पैनल में ले जाने की आवश्यकता है। लेकिन जब मैं पहले बटन पर क्लिक करता हूं तो बटन को प्रतिस्थापित नहीं किया गया था।जावा जीयूआई, एक्शन लिस्टनर

/*Java GUI*/ 

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


public class TestFrame extends JFrame{ 

    private JPanel panel1, panel2; 
    private JButton but,but2; 

    public TestFrame() 
    { 
     createPanel(); 
     addPanel(); 
    } 

    private void createPanel() 
    { 
     panel1 = new JPanel(); 
     but = new JButton("TestButton"); 
     but.addActionListener(new addButtonListener()); 

     panel2 = new JPanel(); 
     but2 = new JButton("TestButton2"); 

    } 

    private void addPanel() 
    { 
     panel1.add(but); 
     panel2.add(but2); 

     add(panel1); 

    } 

    class addButtonListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent ae) 
     { 
      getContentPane().removeAll(); 
      add(panel2); 

      repaint(); 
     } 
    } 


    public static void main(String args[]) 
    { 
     JFrame frame = new TestFrame(); 
     frame.setTitle("Test Software"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(500,500); 

     frame.setVisible(true); 
    } 



} 

उत्तर

4

सामग्री से सभी को हटाने के बाद, सामग्रीपैन में पैनल जोड़ने का प्रयास करें। दूसरी बात पुनर्भुगतान कर रही है। यदि आप पैनल सामग्री अपडेट नहीं करेंगे, तो इसे आकार बदलने के बाद चित्रित किया जाएगा। यहां आप उदाहरण समाधान हैं:



    import java.awt.event.ActionEvent; 

    import java.awt.event.ActionListener; 

    import javax.swing.*; 

    public class Frame extends JFrame{ 
     private JPanel panel1, panel2; 
     private JButton but,but2; 
     public Frame() 
     { 
      createPanel(); 
      addPanel(); 
     } 
     private void createPanel() 
     { 
      panel1 = new JPanel(); 
      but = new JButton("TestButton"); 
      but.addActionListener(new addButtonListener()); 
      but.setBounds(50, 90, 190, 30);//There are example values but remember about setting size 
      panel2 = new JPanel(); 
      but2 = new JButton("TestButton2"); 
      but2.setBounds(50, 50, 90, 30);//There are example values but remember about setting size 
     } 
     private void addPanel() 
     { 
      panel1.add(but); 
      panel2.add(but2); 
      add(panel1); 
     } 

     class addButtonListener implements ActionListener 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       getContentPane().removeAll(); 
       getContentPane().add(panel2);//Adding to content pane, not to Frame 
       repaint(); 
       printAll(getGraphics());//Extort print all content 
      } 
     } 

     public static void main(String args[]) 
     { 
      Frame frame = new Frame(); 
      frame.setTitle("Test Software"); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.setSize(500,500); 
      frame.setVisible(true); 
     } 

    } 

ओरेकल डॉक्स सामग्री में जोड़ने या सीधे फ्रेम में अंतर बीटवेन बताते हैं।
http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html

4

आपको सत्यापन करने और फिर पुन: पेश करने की आवश्यकता है।

validate(); 
repaint(); 
+0

+1 मैं बस लिख रहा था कि जब मैंने आपका जवाब देखा। @Dan सही है कि आप बस पश्चाताप करने से पहले (या अमान्य?) को मान्य करना भूल जाते हैं। वैसे: क्या यह मान्य होने के बाद "repaint" करने के लिए उपयोगी है? – HpTerm

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^