我想创建一个简单的Swing应用程序。然而,我对Swing的使用经验非常非常少。我想创建一个一个窗口的应用程序,它每5分钟刷新一次我做的屏幕抓取的内容。我正在使用Clojure编写代码。我认为Swing是最好的选择,但如果有其他更好的选择,我也很乐意听到更多关于这些选择的信息。
我需要什么代码才能用Swing做到这一点呢?(我应该使用什么类,等等)
谢谢,亚历克斯
发布于 2011-01-21 13:02:12
那么,对于每五分钟一次的情况,java.util.TimerTask应该会有所帮助。对于一般的Swing信息,this link to the Java Tutorials应该会有所帮助。
特别是要有一个窗口,JFrame可能是您最好的选择。
要显示单行或多行文本,应该分别查看JLabel或JTextArea。
要显示图像,ImageIcon应该做到这一点。
对于其他需求,Java教程应该是一个很大的帮助。
正如trashgod所建议的,当涉及到GUI时,javax.swing.Timer比java.util.TimerTask有一些优势。这篇关于using timers in Swing applications的文章应该会帮助你决定使用哪一种。
发布于 2011-01-26 09:17:41
你是对的。Swing是可行的,但是如果您正在学习Clojure和Swing,那么将所有部分连接起来可能有点困难。有几个简短的例子展示了如何在Clojure中创建简单的Swing GUI。下面是另一个结合了简单图形用户界面和Timer对象的简短示例。
(ns net.dneclark.JFrameAndTimerDemo
(:import (javax.swing JLabel JButton JPanel JFrame Timer))
(:gen-class))
(defn timer-action [label counter]
(proxy [java.awt.event.ActionListener] []
(actionPerformed
[e]
(.setText label (str "Counter: " (swap! counter inc))))))
(defn timer-fn []
(let [counter (atom 0)
label (JLabel. "Counter: 0")
timer (Timer. 1000 (timer-action label counter))
panel (doto (JPanel.)
(.add label))]
(.start timer)
(doto (JFrame. "Timer App")
(.setContentPane panel)
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
(.setLocation 300 300)
(.setSize 200 200)
(.setVisible true))))
(defn -main []
(timer-fn))运行时,这将创建一个带有标签的小窗口,该窗口每秒更新一次。根据您的描述,您可以将计时器的频率从1,000毫秒更改为300,000毫秒,以每5分钟触发一次操作。要执行除更新标签之外的其他操作,需要更改timer-action函数的内容。
我认为这是线程安全的,但还没有确定。在更新Swing组件时,也有关于线程安全的警告和教程。你可能也会想要检查这些。
我希望这篇文章足够丰富,可以给你一些线索,告诉你在哪里可以找到更多的信息。
编辑:我想在这里再指出一件有趣的事情。请注意,'timer-action‘函数正在更改其一个参数的值。“counter”参数是在“timer-fn”中定义的一个原子,但操作侦听器可以更改它。这是在Java中通常不能做的事情。也许比我更聪明的人可以评论一下这是否构成了“结束”。在我以前使用Pascal等语言的经验中,我认为参数传递是“按引用调用”的,而不是Java严格的“按值调用”参数传递。这是不是有什么不同?
Clojure EDIT 2clojure:在用另一个问题检查了我的事实之后,这实际上是中的一个闭包示例。
发布于 2011-01-21 13:19:35
在Swing上下文中,javax.swing.Timer有一些优势;有一个示例here。根据您要显示的内容,JEditorPane可能是合适的。
https://stackoverflow.com/questions/4755524
复制相似问题