2014-02-05 136 views
0

所以我只是檢查,當我點擊我的按鈕它不會顯示我的JPanel,任何想法爲什麼?爲什麼我的JPanel不會顯示?

謝謝。

我想要第三堂課展示,真的很感謝幫助 - 謝謝分配。

頭等艙 - JFrame類。

import javax.swing.JFrame; 

public class Frame { 
    public static void main(String[] args) { 
     JFrame frame = new JFrame("JFrame Demo"); 
     Panel panel1 = new Panel(); 

     frame.add(panel1); 


     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(400, 500); 
     frame.setVisible(true); 

    } 
} 

第二級 - 第1小組

import javax.swing.JPanel; 
import java.awt.CardLayout; 
import javax.swing.JButton; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class Panel extends JPanel{ 
    public Panel() { 
     setLayout(null); 
     final Panel2 panel2 = new Panel2(); 


     JButton btnNewButton = new JButton("New button"); 
     btnNewButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 

       setVisible(false); 
       panel2.setVisible(true); 


      } 
     }); 
     btnNewButton.setBounds(62, 197, 224, 122); 
     add(btnNewButton); 
    } 
} 

第三類 - 第2小組(我想這顯示)

import javax.swing.JPanel; 
import javax.swing.JLabel; 
import java.awt.CardLayout; 
import javax.swing.JTextField; 


public class Panel2 extends JPanel { 
    private JTextField textField; 
    public Panel2() { 

     setLayout(null); 
     setVisible(true); 
     textField = new JTextField(); 
     textField.setBounds(84, 84, 290, 77); 
     add(textField); 
     textField.setColumns(10); 

    } 
} 

回答

2

你從不添加panel2任何東西。 A JPanel不像JFrame,其中setVisible使它神奇地出現。您需要將其添加到容器。只需將它添加到您的Panel即可。

  • 還避免使用null佈局。學會使用Layout Managers

  • 另請參閱Initial Threads。你要像這樣運行

    public static void main(String[] args) { 
        SwingUtilities.invokeLater(new Runnable(){ 
         public void run() { 
          new Frame(); 
         } 
        }); 
    } 
    
  • 這看起來像,你可能一直在試圖做沿着一個什麼樣的CardLayout實現了線的東西的情況下,從事件指派線程你的揮杆應用。基本使用請參見example。另請參閱How to Use Card Layout

+0

您好,非常感謝您的回覆。你介意讓我看看代碼嗎,這樣我就能明白你在說什麼了?謝謝你,先生。 –

+0

首先告訴我你到底想要達到什麼目標。你沒有真正解釋清楚,你的代碼對我來說只是一個意義。 –

+0

基本上當按下/點擊Panel.java中的按鈕時;我希望它將屏幕更改爲Panel2。 –

0

在第二個類中,在構造函數的第二行之後,你試過了嗎?

add(panel2); 

看看是否能正常工作。

+0

構造函數到底在哪裏?謝謝 –

+0

@JonathanSaich您可能需要花時間閱讀[Java Trails](http://docs.oracle.com/javase/tutorial/) – MadProgrammer

+0

嗨,我在最終的Panel2 panel2 = new Panel2()後添加了新的代碼。並沒有工作:( –

-1

將Panel.java修改爲如下所示。請告訴我這是否符合您的需求:

import javax.swing.JPanel; 
import javax.swing.JButton; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class Panel extends JPanel{ 

    Panel2 panel2 = null; 
    JButton btnNewButton = null; 

    public Panel() { 
     setLayout(null); 
     panel2 = new Panel2(); 

     panel2.setBounds(5,5,300,500); 
     add(panel2); 
     showPanel2(false); 

      btnNewButton = new JButton("New button"); 
      btnNewButton.setBounds(62, 197, 224, 122); 
      add(btnNewButton); 
      showButton(true); 

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

       showButton(false); 
       showPanel2(true); 


      } 
     }); 

    } 

    public void showPanel2(boolean bshow) 
    { 
     panel2.setVisible(bshow); 
    } 

    public void showButton(boolean bshow) 
    { 
      btnNewButton.setVisible(bshow); 
    } 

} 
+0

Java GUI可能必須在多個平臺上工作,在不同的屏幕分辨率和使用不同的PLAFs,因此它們不利於精確放置組件,要組織一個健壯的GUI,而是使用佈局管理器或[它們的組合](http://stackoverflow.com/a/5630271/418556),以及[白色空間]的佈局填充和邊框(http://stackoverflow.com/q/17874717/418556)。 –