2012-01-28 181 views
1

读值我想读从Java中textfied值,但我不能读它 这里是我的代码从文本字段

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

public class TextField extends JDialog { 
    TextField() { 
    JFrame frm = new JFrame("SAMPLE PROGRAM"); 
    frm.setBounds(150,150,420,400); 
    frm.setLayout(null); 
    Container content = frm.getContentPane(); 
    content.setBackground(Color.cyan); 
    JTextField text = new JTextField(); 
    text.setBounds(70,25,100,30); 
    JButton button1, button2; 
    button1 = new JButton("PROGRAMMER"); 
    button2 = new JButton("USER"); 
    button1.setBounds(270,25,120,50); 
    button2.setBounds(270,90,120,50); 
    button1.addActionListener(new ButtonHandler()); 
    button2.addActionListener(new ButtonHandler()); 
    frm.add(button1); 
    frm.add(button2); 
    frm.add(text); 
    frm.setVisible(true); 
    frm.setResizable(false); 
    } 

    public static void main(String[] args) { 
    new TextField(); 
    } 
    class ButtonHandler implements ActionListener { 
    public void actionPerformed(ActionEvent e) {  
     String str = new String();  
     str = e.getActionCommand();  
     System.out.println(" " + str); 
    } 
    } 
} 

我尝试以下方法

1.In类文本字段我用button2.addactionlistener.It根据本方法得到的误差

无法指非最终可变文本在不同的方法中定义的内部类内部

button1.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent ae) { 
    if(text.getText().equals("joe")) 

2.In类ButtonHandler

它说,文本无法解析

我应该用什么方法来读取文本框,并在类应该在阅读

+0

您能否让您的课程更清晰些,并输入所有必要的代码?第一类没有办法。 – Russell 2012-01-28 10:48:27

+0

为什么所有'>'字符都在代码行之前?今后请多做点努力,那个地段就像狗的早餐一样。 – 2012-01-28 11:07:10

+1

没办法解读基本的java教程/教科书并学习它的内容:-) http://docs.oracle.com/javase/tutorial/index.html – kleopatra 2012-01-28 11:10:21

回答

2

1)如果重命名(用与名称的TextField AWT API可能发生的冲突)和删除的JDialog,因为它从来没有使用过

public class TextField extends JDialog { TextField(){ 

public class MyTextField { public MyTextField(){ 

2),并更改主方法

public static void main(String[] args) { 
    new TextField(); 
} 

public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      private final JTabbedPane jtp = new JTabbedPane(); 

      @Override 
      public void run() { 
       MyTextField textField = new MyTextField(); 
      } 
     }); 
    } 

3)删除所有字符>

4)添加DefaultCloseOparation为JFrame的,否则你的程序将留在内存中,直到您的计算机重新启动或关闭

5)删除所有un_ Swing methods和使用a LayoutManager

+0

好主意与DefaultCloseOperations – Russell 2012-01-28 10:52:59

+0

我做了一个编辑。如果我猜对了你的意思是错误的,请将其还原。 ;) – 2012-01-28 11:10:22

1

字符串str = text.getText();

这个,如果你用

String str = text.getText(); 

更换

str = e.getActionCommand(); 

应该工作。如果不工作,你可能需要创建JTextField的为静态的JTextField或添加final修饰符。 PS:下一次,只放入必要的代码,而不是JFrame或JButtons,它只是使阅读代码更容易。

+0

说什么,让它成为一个静态字段?我希望这不是一个严肃的建议。它将解决编译问题,但这就是它将解决的所有问题。作为回报,你会遇到一堆问题和糟糕的设计 – Robin 2012-01-28 16:53:26

+0

这确实是因为软件设计不好,但是通过代码来判断,我会说编码器的水平并没有达到大规模的水平程序等,使用静态会使它更容易。不仅如此,当我编程时(请告诉我这是否坏)我倾向于不使用继承,而是使重要变量变为静态,并在类中创建许多方法。 – Russell 2012-01-28 17:20:52

+0

如果你创建了这个类的两个实例,他们会共享相同的静态字段吗?静态实例属于类,而不属于类的实例。所以,一个JTextField,你的用户界面的一部分,永远不应该是一个静态实例 – Robin 2012-01-28 17:30:20