2013-05-30 36 views
0

我想設計一個使用Java的計算器外殼(非功能計算器),但由於某種原因,我無法讓程序顯示我的按鈕。我在這裏做錯了什麼?這裏不能讓面板顯示在JFrame

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

public class Calculator extends JFrame { 

    public Calculator() { 
     JPanel P1 = new JPanel(); 
     P1.setLayout(new GridLayout(4, 4)); 
     //Panel Buttons 
     for (int i = 1; i <= 9; i++) { 
      P1.add(new JButton("" + i)); 
     } 
     P1.add(new JButton("" + 0)); 
     P1.add(new JButton(".")); 
     P1.add(new JButton("*")); 
     P1.add(new JButton("/")); 
     P1.add(new JButton("+")); 
     P1.add(new JButton("-")); 
     P1.add(new JButton("=")); 
     P1.setBackground(Color.cyan); 
     P1.setForeground(new Color(100, 1, 1)); 
     //Content panel 
     JPanel P2 = new JPanel(); 
     P2.setLayout(new BorderLayout()); 
     P2.add(new JTextField("Hello world"), BorderLayout.NORTH); 
     P2.add(P1, BorderLayout.CENTER); 
    } 


    public static void main(String[] args) { 
     Calculator frame = new Calculator(); 
     frame.setTitle("Simple Calculator"); 
     frame.setSize(250, 250); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

} 

OK是我現在有...

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

public class Calculator extends JFrame 
{ 
JPanel p1 = new JPanel(); 
JPanel p2 = new JPanel(); 
Calculator() 
{ 
    super("Wk 3 Calculator"); setBounds(100,100,300,100); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    Container con = this.getContentPane(); 
    con.add(p1); 
    con.add(p2); 
    p1.setLayout(new GridLayout(4, 4)); 
    //Panel Buttons 
for (int i =1; i <=9; i++){ 
    p1.add(new JButton ("" + i)); 
} 
    p1.add(new JButton (""+0)); 
    p1.add(new JButton ("."));  
    p1.add(new JButton ("*")); 
    p1.add(new JButton ("/")); 
    p1.add(new JButton ("+")); 
    p1.add(new JButton ("-")); 
    p1.add(new JButton ("=")); 
    //Content panel 
    p2.setLayout(new BorderLayout()); 
    p2.add (new JTextField("Hello world"),BorderLayout.NORTH); 
    p2.add(p1, BorderLayout.CENTER); 
    //Frame specs 
    Calculator frame = new Calculator(); 
    frame.setSize(250,250); 
    frame.setTitle("Simple Calculator"); 
    frame.add(p1, BorderLayout.NORTH); 
    frame.add(p2, BorderLayout.SOUTH); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.pack(); 
    frame.setVisible(true); 
} 
    public static void main(String[] args){new Calculator();}   
} 

它仍然沒有工作:(

+3

嘗試堅持Java約定,並用小寫字母開始變量名! –

+0

@ user2435080查看我編輯的帖子。 –

回答

0

好:

1)。在EDT(Event Dispatch Thread)上調用與Swing相關的代碼,而不是在主線程上。有關更多詳細信息,請參見here。 2)。您不會將P1P2面板添加到JFrame,因此當您顯示該幀時,它不包含任何內容。嘗試撥打add (P1)add (P2)。 3)。在致電frame.setVisible (true)之前,您應該致電frame.pack()

編輯

我改寫了你的代碼(你還有天長進入使功能應用,但它是一個開始):

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

public class Calculator 
{ 
    private JFrame frame; 

    public Calculator() 
    { 
     frame = new JFrame ("Simple Calculator"); 

     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.setLayout (new BorderLayout()); 

     JPanel panel = new JPanel(new GridLayout(4, 4)); 
     JPanel p2 = new JPanel(new BorderLayout()); 

     for (int i = 1; i <= 9; i++) 
     { 
      panel.add (new JButton ("" + i)); 
     } 

     panel.add(new JButton (""+0)); 
     panel.add(new JButton ("."));  
     panel.add(new JButton ("*")); 
     panel.add(new JButton ("/")); 
     panel.add(new JButton ("+")); 
     panel.add(new JButton ("-")); 
     panel.add(new JButton ("=")); 

     frame.add(panel, BorderLayout.CENTER); 
     frame.add (new JTextField("Hello world"), BorderLayout.SOUTH); 

     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
    public static void main(String[] args) 
    { 
     SwingUtilities.invokeLater (new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       new Calculator(); 
      } 
     }); 
    } 
} 
1

裏面添加JFrame

this.add(P2); 
this.pack(); 
您的P
+0

感謝您的支持。這是我現在擁有的... – user2435080

1

您並未將面板添加到框架。將add(p1, BorderLayout.NORTH)add(p2, BorderLayout.SOUTH)放在構造函數的末尾。

public Calculator() 
{ 
    //rest of the construtor 
    add(p1, BorderLayout.NORTH); 
    add(p2, BorderLayout.SOUTH); 
} 

並重新命名它們以便它們以小寫字母開頭。大寫字母用於類名。

0

this.add(P2); this.pack(); this.repain();

+0

'repaint'是不需要的 – MadProgrammer