2012-04-21 113 views
0

我需要在java中创建一个gui,它会从用户接收一个字符串,然后用户将点击提交按钮。点击提交按钮,用户将对字符串进行一些处理,然后在屏幕上输出(gui )。如何在java中创建一个gui?

我写了下面的代码,直到现在,但是当我运行这段代码时,它没有给出任何输出。

public class userinterface extends javax.swing.JFrame { 


public userinterface() { 
    initComponents(); 
} 

private javax.swing.JButton jButton1; 
private javax.swing.JLabel jLabel2; 
private javax.swing.JPanel jPanel1; 
private javax.swing.JPanel jPanel2; 
private javax.swing.JPanel jPanel3; 
private javax.swing.JPanel jPanel5; 
private javax.swing.JTextField jTextField1; 
// End of variables declaration     

public void show(){ 
    String str=jTextField1.getText(); 

      jButton1.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) 
      { 
      //Execute when button is pressed 
      System.out.println("You clicked the button,str"); 
      } 
     }); 
} 

public static void main(String args[]) { 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new userinterface().setVisible(true); 
      userinterface obj=new userinterface(); 
      obj.show(); 

     } 
    }); 
} 

} 

请告诉我我在哪里做错了?如何在GUI屏幕上显示输出?

谢谢。

+2

这个类是否会编译?你似乎调用这个方法:'initComponents()'没有方法的类。您是否浏览了[Oracle Swing教程](http://docs.oracle.com/javase/tutorial/uiswing/components/index.html)? [基础Java教程](http://docs.oracle.com/javase/tutorial/java/index.html)? – 2012-04-21 17:15:53

+0

是的,类编译(实际上我已经删除了一些自动生成的代码)。这个问题必须在这两个函数中。 – 2012-04-21 17:18:44

回答

4

你的问题是你没有意识到它覆盖了基本方法show(),并且这可以防止显示JFrame。这种方法的名称更改为不同的东西:

public void myShow() { 
    // String str = jTextField1.getText(); // not useful 

    jButton1.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     // Execute when button is pressed 
     System.out.println("You clicked the button,str"); 
    } 
    }); 
} 

public static void main(String args[]) { 
    java.awt.EventQueue.invokeLater(new Runnable() { 
    public void run() { 
     // new userinterface().setVisible(true); 
     userinterface obj = new userinterface(); 
     // obj.show(); 
     obj.myShow(); 
     obj.setVisible(true); 
    } 
    }); 
} 

这是另一个原因,我们都应该努力不延长班,除非绝对必要的,因为这样做会偶尔导致调试错误非常困难。

我能够通过在整个代码中放置println来调试,并且看到show()被调用,即使它没有明确地被我调用。

+1

任何像样的IDE都会在边栏中向您显示一个图标,表示您超过了超级用户的某些内容,这应该会响起一个响铃。但我同意你的观点,即不必扩展Swing组件类,除非你有很好的理由 – Robin 2012-04-21 18:43:02