2017-04-12 38 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

相关问题