社区
Java SE
帖子详情
swing JScrollPane实现即时滚动,不等主线程返回实例
xiaoduan95
2014-11-13 10:34:54
JScrollPane是否可以实现即时滚动, 不等主线程返回。 就像JTextArea可以使用paintImmediately方法实现即时添加一样
上图说明需求。
如图所示,点击启动按钮时会在监控屏打印信息,但由于点击启动以后有死循环存在,这个死循环是必须要的。所以为了实现即时添加信息,使用了JTextArea.paintImmediately方法,但是滚动条不会即时滚动,由于有死循环,所以也等不到主线程返回。那么请问怎样可以不等主线程返回就能达到滚动效果呢?
目前代码如下:
求大神支招。
...全文
200
4
打赏
收藏
swing JScrollPane实现即时滚动,不等主线程返回实例
JScrollPane是否可以实现即时滚动, 不等主线程返回。 就像JTextArea可以使用paintImmediately方法实现即时添加一样 上图说明需求。 如图所示,点击启动按钮时会在监控屏打印信息,但由于点击启动以后有死循环存在,这个死循环是必须要的。所以为了实现即时添加信息,使用了JTextArea.paintImmediately方法,但是滚动条不会即时滚动,由于有死循环,所以也等不到主线程返回。那么请问怎样可以不等主线程返回就能达到滚动效果呢? 目前代码如下: 求大神支招。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
humanity
2014-11-13
打赏
举报
回复
哦,另外,Swing 一般重画有 repaint 方法,但可能需要你明确地先调用 invalidate(), reinvalidate() 之类的方法,我忘记了是要怎么调用,但具体的原理是: 1、当 Swing 准备重画界面时,如果它觉得好像没有什么东西变了,它就什么也不做,比如你根据一个变量值来画图,而这个变量值与界面的任何状态(比如值,尺寸)之类的没有任何关系,那么 Swing 没有得到任何 Property Changed Event 事件发送来的通知,它就认为你什么也没有改,因此跳过重画图的操作。 2、要让 Swing 觉得你真的改了点什么,你得 invalidate (也可能是 reinvalidate,具体我不了解细节),然后再来 repaint。 你当前死循环没有看到界面滚动可能是你没有调用 repaint 或其它类似用途的方法,paitImmediately 不知道啥用途。
humanity
2014-11-13
打赏
举报
回复
我也不明白怎么是这样的, 正常的流程是你改了组件的状态值,Swing 会在 Event Dispatcher Thread 中派发事件 (事件派发线程),换句话说只你的线程不在 Event Dispatcher Thread 中就应该不会阻挡 Swing 画图。 所以你更新 JTextArea 的 action listener 不能运行在 Swing 的 Event Dispatcher Thread 中。 SwingUtilities.isEventDispatcherThread() 能告诉你当前线程是否是 Swing 的事件派发线程。
xiaoduan95
2014-11-13
打赏
举报
回复
引用 1 楼 xiaomm627 的回复:
这个用多线程不行吗。点击启动,开启一个线程控制滚动条。 还是我没看明白?
本来我这个就是个多线程的程序。
xiaomm627
2014-11-13
打赏
举报
回复
这个用多线程不行吗。点击启动,开启一个线程控制滚动条。 还是我没看明白?
java
JScrollPane
滚动
条不好使问题,以及
JScrollPane
中放入JLayeredPane问题
项目需要,写一个显示网络拓扑结构的插件(见我之前的博客),根据客户需要,要在拓扑展示面板添加
滚动
条,研究了一好一会…… 我是将JLayeredPane放入
JScrollPane
中,开始怎么都不能显示
滚动
条,
JScrollPane
的size设小了是显示出来了,但是即使JLayeredPane中的内容超过了
JScrollPane
滚动
条也不起作用,后来网上找到一个办法: 关键几句: ...
java 刷新component_
Swing
应用开发实战系列之四:组件内容实时刷新问题
窗口组件动态刷新问题,在dotnet中根本不算什么问题,用几句代码很轻松就能搞定,但是在
Swing
中,
实现
动态刷新组件内容却是一件颇为吃力的事情。譬如针对我们经常用到的刷新JLable、JTextField等组件内容,这些组件本身也提供有诸如updateUI()、validate()以及paintImmediately()等等与界面刷新和组件重绘相关的方法, 但是在常规情况下都不起作用。我们先看个...
接上篇,客户端
实现
,图形界面编程,利用socket和UCP/TCP编写,客户端和服务器端程序可以进行多次对话
为了支持
滚动
功能,将`JTextArea`放置在`
JScrollPane
`中,这样可以在聊天记录超出显示区域时进行
滚动
查看。从服务器的`Socket`中获取输入流`BufferedReader`和输出流`PrintWriter`,以进行消息传递。在发送按钮的事件监听器中,获取输入框中的消息,使用输出流将消息发送到服务器,并在聊天区域显示发送的消息。在`main`方法中,创建`ClientGUI`
实例
并启动客户端,连接到本地的服务器端口。使用指定的服务器地址和端口号,创建一个连接到服务器的`Socket`。
图形界面编程,利用socket和UCP/TCP编写,客户端和服务器端程序可以进行多次对话
本项目采用基于Java的`
Swing
`库进行图形界面开发,并使用`ServerSocket`和`Socket`进行网络通信。主窗口使用`JFrame`进行创建。为了支持
滚动
功能,将`JTextArea`放置在`
JScrollPane
`中,这样可以在聊天记录超出显示区域时进行
滚动
查看。从客户端的`Socket`中获取输入流`BufferedReader`和输出流`PrintWriter`,以进行消息传递。在发送按钮的事件监听器中,获取输入框中的消息,使用输出流将消息发送到客户端,并在聊天区域显示发送的消息。
Java高级教程3_图形用户界面GUI
张老师的Java高级教程中图形用户界面GUI对应的笔记 网络编辑器还要重新排版,提供原始文件下载,先看个概貌 Java高级3_图形用户界面GUI AWT的基础知识 GUI:Graphical User Interface图形用户界面。JDK中提供了AWT和
Swing
两个包用于GUI程序设
Java SE
62,620
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章