нет текста в текстовом поле - PullRequest
0 голосов
/ 23 августа 2010

пожалуйста, помогите мне с этим кодом текст не появляется в текстовом поле, хотя это происходит через приглашение cmd, но не в текстовом поле

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

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



public class listener11
{
    private JFrame f;
    private JButton b;
    private JTextField tf;
    public static String str;


    public  listener11()
    {
        f=new JFrame("Listener1");
        b=new JButton("Press");
        b.setActionCommand("Button b1 pressed");
        tf=new JTextField(30);
    }

    public void launchframe()
    {
         f.setLayout(null);
         b.addActionListener(new Buttonlistener());
         b.setBounds(200,200,100,100);
         tf.setBounds(100,100,200,50);
         tf.setText(str);
         f.add(b);
         f.add(tf);
         f.setSize(400,400);

         f.setVisible(true);
    }

    public static void main(String[]arg)
    {
         listener11 l1=new listener11();
         l1.launchframe();
    }
}

class Buttonlistener implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        listener11.str="Action took place \n button's command is"+e.getActionCommand();
    }
}

Ответы [ 2 ]

2 голосов
/ 23 августа 2010

Когда вызывается метод actionPerformed, вы просто меняете значение переменной str.Это не приводит к автоматическому обновлению текстового поля - только потому, что вы вызвали

tf.setText(str);

, не означает, что оно будет автоматически просматривать переменную str все время.Если вы хотите снова установить текст, снова наберите tf.setText.(В качестве альтернативы вы можете заняться всем бизнесом, связанным с моделями / представлениями / контроллерами, и именно так должен работать Swing, но это значительно сложнее. На данный момент вам, вероятно, лучше всего придерживаться простого подхода.)

1 голос
/ 23 августа 2010

Похоже, вы устанавливаете только текст в null (так как str равен null в методе launchframe ()).Вам нужно вызвать setText с допустимой строкой, даже если вы назначите эту строку позже, текстовое поле все еще будет иметь значение null.

...