2016-11-03 85 views
0

所以,我正在爲我的Java類開發一個項目。目標是創建一個基本的GUI程序,將Hello World顯示爲一個字符串,並提供四個用於操縱字符串的按鈕。事情是這樣的:example我應該如何在JLabel下添加一個JButton的GridLayout?

我還沒有得到該程序的操作的部分呢,因爲我似乎無法讓我的窗格式正確,無論我怎麼努力。

我能夠得到我的四個按鈕來顯示,但我已經拋出的一切讓JLabel在按鈕上方顯示Hello World完全失敗了。

這看起來很簡單,所以恐怕有一些明顯的我失蹤了。我在網上搜索了一個星期,發現了很多關於如何在理論上做到這一點的信息,所以從我的理解來看,這一定是我的語法問題。

到目前爲止,我還沒有找到一個執行任何與我需要做的事情相符的實現。這讓我瘋狂,我要麼以任何方式超過我的期限。我只需要有一個答案!非常感謝任何能指引我朝着正確方向的人!

這是我目前的代碼。我覺得我正在接近這一點,但它在運行時會向控制檯返回一個異常。再次,所有的幫助,非常感謝!

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

public class HelloWorld 
{ 
    private JButton uppercaseButton; 
    private JButton lowercaseButton; 
    private JButton phraseButton; 
    private JButton resetButton; 

    private JPanel grid; 

    public JPanel ButtonGrid() 
    { 

     JPanel grid = new JPanel(); 

     grid.setLayout(new GridLayout(2, 2)); 
     uppercaseButton = new JButton("Uppercase"); 
     lowercaseButton = new JButton("Lowercase"); 
     phraseButton = new JButton("New Phrase"); 
     resetButton = new JButton("Reset");  

     grid.add(uppercaseButton); 
     grid.add(lowercaseButton); 
     grid.add(phraseButton); 
     grid.add(resetButton); 

     return grid; 
    } 

    private static void createAndShowGUI() 
    { 
     JFrame frame = new JFrame("THIS IS MY TITLE"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JLabel lbl = new JLabel("HELLO WORLD"); 
     lbl.setPreferredSize(new Dimension(175, 100)); 
     frame.getContentPane().add(lbl, BorderLayout.PAGE_START); 

     ButtonGrid b = new ButtonGrid(); 
     b.setVisible(true); 
     b.setSize(300, 200); 
     frame.getContentPane().add(b, BorderLayout.CENTER); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args){ 

     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 

    } 

} 
+0

如何使用具有1列和2行的GridLayout,然後添加JLabel。之後添加另一個JPanel,並將其佈局管理器設置爲2x2的另一個GridLayout。現在你只需要將4個按鈕添加到JPanel – redxef

回答

2
ButtonGrid b = new ButtonGrid(); 

ButtonGrid不是類,它是一個返回JPanel的實例HelloWorld類的方法。

所以,你需要創建HelloWorld類的實例,所以你可以調用方法:

HelloWord hw = new HelloWorld() 
JPanel b = hw.ButtonGrid(); 

而且,由於「buttonGrid」是這樣,你需要的不應該與一個大寫字母開頭的方法重命名的方法,然後使用:

//ButtonGrid b = new ButtonGrid(); 
HelloWord hw = new HelloWorld() 
JPanel b = hw.buttonGrid(); 
0

感謝這兩個建議,指着我在正確的方向!

結果工作基本上是redxef首先提出的。 Camickr然後幫助我進一步,因爲我想我的方法都錯了。通過將這兩個JPanel組合到第一個方法中並將其重命名爲HelloWorld,我能夠清除我所遇到的其他一些問題。

我很高興地報告說,這個項目結束後,大約一個小時就完成了。再次,非常感謝!

+0

很高興的建議幫助。不要忘了單擊複選標記以「接受」答案,以便人們知道問題已解決。 – camickr