2017-04-12 39 views
0

首先我是java的初學者。我正在製作一個帶小按鈕和標籤的窗口(默認位置爲0),當我點擊按鈕時,標籤將變爲1,當我點擊另一個時,按鈕將會是2.但是,我有一個錯誤在調用該方法。我在這裏的代碼中有一個小的錯誤(swing-java-JFrame)

我的代碼:

包原型;

import java.awt.BorderLayout; 

import java.awt.event.ActionEvent; 

import java.awt.event.ActionListener; 

import javax.swing.*; 


public class Prototype { 

public static int count; 

public static JLabel l; 

public void Proto() 
{  
JFrame f = new JFrame(); 

     JButton b = new JButton("click"); 

     JLabel lo = new JLabel("0"); 

     JPanel p = new JPanel(); 

     f.setBounds(120,120,500,500); 

     b.addActionListener(new MyAction()); 

     p.add(lo); 

     p.add(b); 

     f.getContentPane().add(p,BorderLayout.CENTER); 


     f.show();} 

public class MyAction implements ActionListener { 



    @Override 

    public void actionPerformed(ActionEvent e) { 

     count++; 

     l.setText(Integer.toString(count));} 





    public static void main(String[] args) { 
     //I want to call the proto method but it give me an eror 

     new proto(); 

    }}} 
+0

'new Prototype()。Proto()'應該調用正確的方法和類 – SomeJavaGuy

+0

一些語義優先:類名以大寫字母開頭。你的課是'Prototype'。那很好。現在方法名稱以小寫開頭。這裏你的方法是'Proto',它應該是proto。當調用它時,你需要首先構造'Prototype'(用'new'關鍵字)。然後在構造的對象上使用'.proto()'。 – KarelG

+0

你似乎忘記了在你的問題中包含實際的錯誤。請[編輯]問題並補充說明。 – RealSkeptic

回答

0
public class Prototype extends JFrame{ 

    private static int count; 

    private JLabel l; 

    public Prototype() { 
     super(); 

     JButton b = new JButton("click"); 

     l = new JLabel("0"); 

     JPanel p = new JPanel(); 

     b.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       count++; 

       l.setText(Integer.toString(count)); 

      } 

     }); 

     p.add(l); 

     p.add(b); 

     this.getContentPane().add(p, BorderLayout.CENTER); 
     this.pack(); 
     this.setVisible(true); 
    } 

    public static void main(String...args){ 
     Prototype p=new Prototype(); 
    } 

} 

我改變了的方法來構造,以具有創建Prototype類型的對象的可能性,並直接創建與它的框架。此外,我還擴展了課程JFrame,不需要創建額外的JFrame。下一步是刪除ActionListener類並創建一個新的ActionListener,同時將它添加到按鈕。在我看來,如果你有幾個功能不同的按鈕,這是非常有用的,所以你可以通過查看按鈕的代碼直接看到按鈕的功能。最後一步是在主要方法

+0

感謝兄弟給我看窗口,但我有點擊問題...但你解決回答我的問題:) –

+0

最新點擊的問題是什麼?一個更好的編碼風格將是隻有我發佈的主要方法的初學者類。通過這種方式,你可以分離圖形用戶界面和處理 – XtremeBaumer

+0

是啊,兄弟我理解你我解決了'ch'的'l'變量名稱'lo',但是當你談論編碼的風格時,我只是想了解類是如何這是我在java中的第一步如果我有其他問題,我可以給你我的Gmail嗎? –

-1

中創建一個類型爲Prototype的新Object。如果我們使用的是SwingWorker而不是手動設置文本JLabel。因爲這不是更新GUI的正確方法。這應該使用SwingWorker完成。請閱讀publishprocess方法。

+0

好吧,我的兄弟,我將閱讀有關它,我嘗試瞭解GUI的源代碼,這就是爲什麼我寫它manully,但你是對的我這次將使用SwingWorker,謝謝:) –

+0

沒問題。在ActionListener中觸發你的SwingWorker :) – Francisunoxx

+0

我看不到'SwingWorker'是如何解決這個問題的,因爲'ActionListener'會在按鈕的EDT上下文中被觸發 - 在任何情況下,它都會贏得' t解決這個問題是因爲'l'既沒有被初始化也沒有添加到UI中,所以OP將遭受'NullPointerException' – MadProgrammer

相關問題