简体   繁体   English

如何在SWING的JTextField中显示更新的文本

[英]How to Make the Updated text Visible in JTextField in SWING

I have a JTextField which needs to be updated from a derived class. 我有一个JTextField ,需要从派生类进行更新。 So, Used 因此,二手

CLASS TABPANE : TABPANE类:

  package forstack;

  import java.awt.Cursor;
  import java.awt.EventQueue;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.beans.PropertyChangeEvent;
  import java.beans.PropertyChangeListener;

  import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.JPanel;
  import javax.swing.JTextField;
  import javax.swing.SwingWorker;
  import javax.swing.border.EmptyBorder;



        public class TabPane extends JFrame implements ActionListener,                                                                                           propertyChangeListener{

/**
 * 
 */
private static final long serialVersionUID = 1L;
private JPanel contentPane;
protected JTextField textField;

private Task task;

class Task extends SwingWorker<Void, Void> {
    /*
     * Main task. Executed in background thread.
     */
    @Override
    public Void doInBackground() {

        Modbus obj = new Modbus();
        obj.updatetextfield();
        return null;
    }

    /*
     * Executed in event dispatching thread
     */
    @Override
    public void done() {

        setCursor(null); //turn off the wait cursor
        //gcsObj.setVisible(false);


    }


}


/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                TabPane frame = new TabPane();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public TabPane() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JPanel panel = new JPanel();
    panel.setBounds(10, 11, 414, 240);
    contentPane.add(panel);
    panel.setLayout(null);

    JButton btnNewButton = new JButton("New button");
    btnNewButton.addActionListener(this);
    btnNewButton.setBounds(160, 142, 89, 23);
    panel.add(btnNewButton);

    textField = new JTextField();
    textField.setText("Mainclass");
    textField.setBounds(119, 61, 175, 20);
    panel.add(textField);
    textField.setColumns(10);
}

@Override
public void propertyChange(PropertyChangeEvent event) {
    // TODO Auto-generated method stub

}


@Override
public void actionPerformed(ActionEvent arg0) {

        // TODO Auto-generated method stub
        setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
        //Instances of javax.swing.SwingWorker are not reusuable, so
        //we create new instances as needed.
        task = new Task();
        task.addPropertyChangeListener(this);
        task.execute();

}

} }

CLASS MODBUS : MODBUS类:

     package forstack;

     public class Modbus extends TabPane{
/**
 * 
 */
private static final long serialVersionUID = 1L;

public void updatetextfield() {
    // TODO Auto-generated method stub
        textField.setText("hello im here");
        textField.revalidate();
        textField.repaint();

        System.out.println(textField.getText());
   }

 }

OUTPUT FRAME: 输出帧: 在此处输入图片说明

I got the output in the console as "hello im here" but it's not visible in the GUI.. 我在控制台中将输出显示为“ hello im here”,但在GUI中不可见。

Anyone help me with this issue .. 任何人都可以帮助我解决这个问题..

Check that you don't have 2 different JTextField instances. 检查您是否没有2个不同的JTextField实例。
Try renaming the JTextFields variables to have different names. 尝试重命名JTextFields变量以使用不同的名称。
Looks like you're updating the one that's not showing on GUI. 看起来您正在更新未在GUI上显示的内容。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM