VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1438|回复: 5

JTextField显示问题

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2021-4-22 17:00:01 | 显示全部楼层 |阅读模式
请帮我看看下面代码 当初次运行时text中的数可变 而点确定后text中的数却不变
不会是作用域的问题吧? 如果是那应怎样改才能在点确定后text 中的数也是变化的呢?  谢谢!
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Text extends JFrame implements ActionListener
{           JButton tb=new JButton("开始");
        int a=0;
            JTextField text=new JTextField("",10);
        JTextField text1=new JTextField("5",10);
        Text()
        {
        super("text测试");
        setSize(100,150);
        setLocation(200,300);
        getContentPane().setLayout(new FlowLayout());
        getContentPane().add(text);
        getContentPane().add(tb);
        getContentPane().add(text1);
        tb.addActionListener(this);
        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        begin();
        }
        public void begin()
        {
                int i=0;
                        a=Integer.parseInt(text1.getText().trim());
                while(a>0)
                {       
                        a--;i=50;
                        while(i>0)
                     {
                        i--;
                        System.out.print("  "+i);
                        text.setText(""+i);
                        try{
                            Thread.sleep(50);
                               }catch(Exception e)
                        {  }               
                    }
                }
        }
        public void actionPerformed(ActionEvent ee)
        {
                if(ee.getSource()==tb)
                {begin();}
               
       }
  public static void main(String srgs[])
  {   new Text();
  }
}
回复

使用道具 举报

0

主题

23

帖子

17.00

积分

新手上路

Rank: 1

积分
17.00
发表于 2021-4-23 10:45:01 | 显示全部楼层
第二次是线程阻塞问题.你阻止了主线程,所以无法显示,为了使你这个有不大的改动,我用的这种方法修改:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Text  extends JFrame implements ActionListener,Runnable {  //加了一个线程接口.
  JButton tb = new JButton("开始");
  int a = 0;
  JTextField text = new JTextField("", 10);
  JTextField text1 = new JTextField("5", 10);
  //Thread th=new Thread(this);
  Text() {
    super("text测试");
    setSize(100, 150);
    setLocation(200, 300);
    getContentPane().setLayout(new FlowLayout());
    getContentPane().add(text);
    getContentPane().add(tb);
    getContentPane().add(text1);
    tb.addActionListener(this);
    pack();
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    text.setEnabled(false);
    run();   //------------------>相当于执行一次你的begin方法.
  }

  public void run() {    //------->begin改为run,是为了重载.
    int i = 0;
    a = Integer.parseInt(text1.getText().trim());
    while (a > 0) {
      a--;
      i = 50;
      while (i > 0) {
        i--;
        System.out.print("  " + i);
        text.setText(""+i);
        try {
          Thread.sleep(50);
        }
        catch (Exception e) {}
      }
    }
  }

  public void actionPerformed(ActionEvent ee) {

     new Thread(this).start();//--->主要就是这儿了,新建一个线程,这样才不会影响主线程


  }

  public static void main(String srgs[]) {
    new Text();
  }
}
回复

使用道具 举报

0

主题

23

帖子

17.00

积分

新手上路

Rank: 1

积分
17.00
发表于 2021-4-23 11:00:01 | 显示全部楼层
线程的错误 要注意一点,像你那个按钮按下去都不跳起来了,说明它是主线程.
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2021-4-23 12:30:01 | 显示全部楼层
谢谢,我后来也是这么改的.一直不明白什么意思?
回复

使用道具 举报

0

主题

1

帖子

0.00

积分

新手上路

Rank: 1

积分
0.00
发表于 2021-7-25 08:55:39 | 显示全部楼层
sindbad 2021-4-23 11:00
The error should be aware that you don't jump like your button, indicating that it is the main threa ...

ok thanks
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2021-8-4 11:16:15 | 显示全部楼层
谢谢谢谢,我后来也是这么改的.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表