2012-06-30 9 views
6

私のコンピュータで約13時間座っていましたが、私の目は出血していると思います。 GuiGenieという小さなGUIエディタが見つかりました。 これは、ボタンとすべての良いものでウィンドウを作成するのに最適です。 問題は、私の最初のメニューのボタンをクリックして、私が作った他のメニューを開くことです。 私はちょうど4週間前にプログラミングを始めているので、私は完全なnoobです。 私はそのが原因の主な方法でめちゃくちゃに感じましたが、私は考え、ここに座って、物事の何百万人を試すの13時間は、私は夢中になっていない持っている:ここで は私が得たものである)、これまでJavaボタンをクリックして新しいウィンドウを開きます

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

停止から取られた変更されたコードです:-)実際の生活セーバーあり、休憩を取る、良い夜眠る、その後、Swingのチュートリアル読みます。http ://docs.oracle.com/javase/tutorial/uiswing/ JPanelをJDialogのJFrameに囲んで新しいウィンドウに表示する必要があること、そしてアプリケーション内にmainメソッドを1つしか持たないことを理解してください。 2つは必要ありません。 –

答えて

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

Swing GUIオブジェクトは、[イベントディスパッチスレッド](http://download.oracle.com/javase/tutorial/uiswing/concurrency/initial.html)で_only_を構築し、操作する必要があります。 。 – trashgod

8

はあなたが何ができるかForms or Windows複数持っているこのような状況のためにあなたが行うことができるもの、であることができJPanelを使用することですこのCardLayoutLayoutManagerと設定してから、2つのJPanelを追加し、同じ方法でアクセスしてください。

Absolute Positioningを使用する場合は、setBounds()を使用しないでください。これは、コンポーネントを親コンテナに配置するのが正しい方法ではありません。代わりにsetLocation(...)setSize(...)メソッドを使用してください。できるだけ絶対位置を使用しないことを検討してください。次のようにJavaのドキュメントから撮影前に言っラインの賛成で特定の行は、次のとおりです。

それはレイアウトマネージャなしで行うことが可能であるが、すべての可能性であれば、あなたは レイアウトマネージャを使用する必要があります。レイアウトマネージャは、 のルックアンドフィールに依存するコンポーネントの外観、異なるフォントサイズ、コンテナのサイズの変更、および異なるロケールへの調整を容易にします。 レイアウトマネージャは他のコンテナや の他のプログラムでも簡単に再利用できます。

あなたのプログラムの出力は実際にはどんな意味でも穏やかな経験ではないので、すべてのコンポーネントの位置とサイズを指定する必要がないため、多くの場合、LayoutManagerを使用すると、作業をもっと簡単に行うことができます。 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

もう一度指摘していただきありがとうございます:-) –

関連する問題