2012-06-30 15 views
6

पर क्लिक करके एक नई विंडो खोलें मेरे कंप्यूटर पर लगभग 13 घंटे तक बैठे हुए और मुझे लगता है कि मेरी आंखें खून बह रही हैं। मुझे थोड़ा गुई संपादक मिला जिसे मुझे गुइजेनी कहा जाता है। यह बटन और सभी अच्छी चीजों के साथ विंडो बनाने के लिए बिल्कुल सही काम करता है। समस्या यह है कि मैं अपने पहले मेनू में एक बटन क्लिक करना चाहता हूं और इसे अपना दूसरा मेनू खोलना चाहता हूं। मैं सिर्फ 4 सप्ताह पहले प्रोग्रामिंग शुरू कर रहा हूं इसलिए मैं एक पूर्ण नोब हूं। मैं एक अपने क्योंकि मुख्य तरीके से खिलवाड़ महसूस कर रही है, लेकिन मुझे पता नहीं और यहां बैठे बातें के लाखों लोगों की कोशिश कर के 13 घंटे मुझे पागल जाना बना रहा है है:) यहाँ मैं क्या मिल गया है अब तकजावा एक बटन

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

public class MyPanel extends JPanel { 
private JTextField How; 
private JLabel jcomp2; 
private JLabel jcomp3; 
private JButton jcomp4; 

public MyPanel() { 
    //construct components 
    How = new JTextField (1); 
    jcomp2 = new JLabel ("How long were you parked?"); 
    jcomp3 = new JLabel ("Minutes"); 
    jcomp4 = new JButton ("openNewWindow"); 

    //adjust size and set layout 
    setPreferredSize (new Dimension (315, 85)); 
    setLayout (null); 

    //add components 
    add (How); 
    add (jcomp2); 
    add (jcomp3); 
    add (jcomp4); 

    //set component bounds (only needed by Absolute Positioning) 
    How.setBounds (245, 50, 60, 25); 
    jcomp2.setBounds (35, 30, 185, 50); 
    jcomp3.setBounds (250, 30, 60, 20); 
    jcomp4.setBounds (0, 0, 315, 25); 

     jcomp4.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 

     } 
    }); 
} 


public static void main (String[] args) { 
    JFrame frame = new JFrame ("MyPanel"); 
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().add (new MyPanel()); 
    frame.pack(); 
    frame.setVisible (true); 
} 
} 

जब बटन दबाया जाता है, तो मैं इसे इस नई विंडो को खोलना चाहता हूं

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

public class MyPanel2 extends JPanel { 
private JButton jcomp1; 
private JButton jcomp2; 
private JButton jcomp3; 
private JTextField jcomp4; 

public MyPanel2() { 
    //construct components 
    jcomp1 = new JButton ("test1"); 
    jcomp2 = new JButton ("test2"); 
    jcomp3 = new JButton ("test3"); 
    jcomp4 = new JTextField (5); 

    //adjust size and set layout 
    setPreferredSize (new Dimension (395, 156)); 
    setLayout (null); 

    //add components 
    add (jcomp1); 
    add (jcomp2); 
    add (jcomp3); 
    add (jcomp4); 

    //set component bounds (only needed by Absolute Positioning) 
    jcomp1.setBounds (20, 45, 100, 25); 
    jcomp2.setBounds (135, 60, 100, 25); 
    jcomp3.setBounds (260, 35, 100, 25); 
    jcomp4.setBounds (105, 115, 100, 25); 
} 


public static void main (String[] args) { 
    JFrame frame = new JFrame ("MyPanel"); 
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().add (new MyPanel2()); 
    frame.pack(); 
    frame.setVisible (true); 
} 
} 

यदि कोई मदद कर सकता है तो मैं इसकी सराहना करता हूं !! मुझे आपके लिए बहुत सम्मान है क्योंकि आप इस पर समर्थक हैं, तो आप शायद 99.9% दुनिया से अधिक चालाक हैं। यह सामान मेरे दिमाग को दर्द देता है।

+14

स्टॉप से ​​लिया जाता है, एक ब्रेक लेने, एक अच्छी रात की नींद, और फिर स्विंग ट्यूटोरियल पढ़ रहे हैं: http : //docs.oracle.com/javase/tutorial/uiswing/। समझें कि एक जेपीनल को एक नई विंडो में दिखाए जाने के लिए जेडियलोग के जेएफआरएम में संलग्न किया जाना चाहिए, और आपके पास केवल एक मुख्य विधि होनी चाहिए। आपको दो की जरूरत नहीं है। –

उत्तर

4

यहाँ, myPanel वर्ग के लिए कोड का उपयोग इस एक:

import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 
import javax.swing.event.*; 

public class MyPanel extends JPanel { 
private JTextField How; 
private JLabel jcomp2; 
private JLabel jcomp3; 
private JButton jcomp4; 

public MyPanel() { 
    //construct components 
    How = new JTextField (1); 
    jcomp2 = new JLabel ("How long were you parked?"); 
    jcomp3 = new JLabel ("Minutes"); 
    jcomp4 = new JButton ("openNewWindow"); 

    jcomp4.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      JFrame frame = new JFrame ("MyPanel"); 
      frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
      frame.getContentPane().add (new MyPanel2()); 
      frame.pack(); 
      frame.setVisible (true); 

     } 
    }); 

    //adjust size and set layout 
    setPreferredSize (new Dimension (315, 85)); 
    setLayout (null); 

    //add components 
    add (How); 
    add (jcomp2); 
    add (jcomp3); 
    add (jcomp4); 

    //set component bounds (only needed by Absolute Positioning) 
    How.setBounds (245, 50, 60, 25); 
    jcomp2.setBounds (35, 30, 185, 50); 
    jcomp3.setBounds (250, 30, 60, 20); 
    jcomp4.setBounds (0, 0, 315, 25); 

     jcomp4.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 

     } 
    }); 
} 


public static void main (String[] args) { 
    JFrame frame = new JFrame ("MyPanel"); 
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().add (new MyPanel()); 
    frame.pack(); 
    frame.setVisible (true); 
} 
} 
+0

+1, एक और विकल्प के लिए :-) –

+4

स्विंग जीयूआई वस्तुओं का निर्माण किया जाना चाहिए और [event dispatch thread] पर _only_ का उपयोग किया जाना चाहिए (http://download.oracle.com/javase/tutorial/uiswing/concurrency/initial.html) । – trashgod

8

यहाँ कुछ आप कर सकते हैं, इस स्थिति है, जहां आप कई Forms or Windows आप क्या कर सकते एक JPanel उपयोग करने के लिए है के लिए है जो कर सकते हैं इस CardLayout को LayoutManager के रूप में सेट करें और फिर आप इसेएस जोड़ सकते हैं और उन्हें प्रदान की गई विधियों के साथ एक्सेस कर सकते हैं।

का उपयोग न करें Absolute Positioning का उपयोग करते समय यह वास्तव में मूल कंटेनर में घटकों को डालने का सही तरीका नहीं है। इसके बजाय setLocation(...) और setSize(...) विधियों का उपयोग करें। जितना संभव हो सके पूर्ण पोजिशनिंग का उपयोग न करने पर विचार करें।

यद्यपि यह एक लेआउट प्रबंधक के बिना ऐसा करना संभव है, यदि आप एक लेआउट प्रबंधक बिल्कुल यदि संभव हो उपयोग करना चाहिए: जावा डॉक्स से लिया से पहले कहा लाइन के पक्ष में कुछ लाइनें इस प्रकार हैं। एक लेआउट मैनेजर को कंटेनर के बदलते आकार और विभिन्न स्थानों पर अलग-अलग फ़ॉन्ट आकारों के लिए, देखने-और-महसूस-निर्भर घटक उपस्थितियों में समायोजित करना आसान बनाता है। लेआउट प्रबंधकों को अन्य कंटेनरों द्वारा आसानी से पुन: उपयोग किया जा सकता है, साथ ही अन्य प्रोग्राम भी।

चूंकि आपके प्रोग्राम का आउटपुट वास्तव में किसी भी अर्थ में सुखद अनुभव नहीं है। कम से कम लेआउट प्रबंधक, यह काम आपके लिए बहुत आसान बना सकता है, क्योंकि आपको प्रत्येक घटक के लिए स्थिति और आकार निर्दिष्ट करने की आवश्यकता नहीं है। Layout Mangers Tutorials के माध्यम से चलने का प्रयास करें, और जितनी जल्दी हो सके उन्हें आदी हो। वे वास्तविक जीवन सेवर :-)

यहाँ एक संशोधित कोड यादृच्छिक चीजों की कोशिश कर अपने SOURCE CODE

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

public class CardLayoutExample 
{ 
    private JPanel contentPane; 
    private MyPanel panel1; 
    private MyPanel2 panel2; 

    private void displayGUI() 
    { 
     JFrame frame = new JFrame("Card Layout Example"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel contentPane = new JPanel(); 
     contentPane.setBorder(
      BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
     contentPane.setLayout(new CardLayout()); 
     panel1 = new MyPanel(contentPane); 
     panel2 = new MyPanel2(); 
     contentPane.add(panel1, "Panel 1"); 
     contentPane.add(panel2, "Panel 2"); 
     frame.setContentPane(contentPane); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String... args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new CardLayoutExample().displayGUI(); 
      } 
     }); 
    } 
} 

class MyPanel extends JPanel { 

    private JTextField How; 
    private JLabel jcomp2; 
    private JLabel jcomp3; 
    private JButton jcomp4; 
    private JPanel contentPane; 

    public MyPanel(JPanel panel) { 

     contentPane = panel; 
     //construct components 
     How = new JTextField (1); 
     jcomp2 = new JLabel ("How long were you parked?"); 
     jcomp3 = new JLabel ("Minutes"); 
     jcomp4 = new JButton ("openNewWindow"); 

     //adjust size and set layout 
     setPreferredSize (new Dimension (315, 85)); 
     setLayout (null); 

     //set component bounds (only needed by Absolute Positioning) 
     How.setBounds (245, 50, 60, 25); 
     jcomp2.setBounds (35, 30, 185, 50); 
     jcomp3.setBounds (250, 30, 60, 20); 
     jcomp4.setLocation(0, 0); 
     jcomp4.setSize(315, 25); 
     jcomp4.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       CardLayout cardLayout = (CardLayout) contentPane.getLayout(); 
       cardLayout.next(contentPane); 
      } 
     }); 

     //add components 
     add (How); 
     add (jcomp2); 
     add (jcomp3); 
     add (jcomp4);    
    } 
} 

class MyPanel2 extends JPanel { 
    private JButton jcomp1; 
    private JButton jcomp2; 
    private JButton jcomp3; 
    private JTextField jcomp4; 

    public MyPanel2() { 
     //construct components 
     jcomp1 = new JButton ("test1"); 
     jcomp2 = new JButton ("test2"); 
     jcomp3 = new JButton ("test3"); 
     jcomp4 = new JTextField (5); 

     //adjust size and set layout 
     setPreferredSize (new Dimension (395, 156)); 
     setLayout (null); 

     //set component bounds (only needed by Absolute Positioning) 
     jcomp1.setBounds (20, 45, 100, 25); 
     jcomp2.setBounds (135, 60, 100, 25); 
     jcomp3.setBounds (260, 35, 100, 25); 
     jcomp4.setBounds (105, 115, 100, 25); 

     //add components 
     add (jcomp1); 
     add (jcomp2); 
     add (jcomp3); 
     add (jcomp4);  
    } 
} 
+2

उपयोगी उदाहरण है, लेकिन आपको OP _away_ को 'null' लेआउट का उपयोग करने से मार्गदर्शन करना चाहिए। :-) – trashgod

+1

इंगित करने के लिए फिर से किया गया और धन्यवाद :-) –

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