我想创建一个简单的Swing应用程序。然而,我对Swing的经历非常非常非常少。我想创建一个窗口应用程序,每隔5分钟刷新一次,我会用屏幕抓取内容。我正在使用Clojure编写代码。我认为Swing是采用这种方式的方法,但如果还有其他更好的选择,我也希望能够更多地了解这些内容。
使用Swing,我需要使用哪些代码? (我应该使用哪些课程等)
谢谢, 亚历
答案 0 :(得分:8)
好吧,对于每五分钟一点,java.util.TimerTask应该有所帮助。对于一般的Swing信息,this link to the Java Tutorials应该有所帮助。
要拥有一个窗口,具体而言,JFrame可能是您最好的选择。
要显示单行或多行文字,您应分别查看JLabel或JTextArea。
要显示图像,ImageIcon应该这样做。
对于其他需求,Java教程应该是一个很大的帮助。
正如trashgod建议的那样,javax.swing.Timer在java.util.TimerTask上的GUI方面有一些优势。这篇关于using timers in Swing applications的文章可以帮助您决定使用哪个。
答案 1 :(得分:4)
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,000ms更改为300,000ms,以便每5分钟触发一次操作。要执行除更新标签以外的操作,您可以更改timer-action
功能的内容。
我认为这是线程安全的,但没有检查确定。在更新Swing组件时,还有关于线程安全的注意事项和教程。你可能也想检查一下。
我希望这些信息足以提供一些线索,以便在何处寻找更多信息。
编辑:我想在这里指出一个更有趣的事情。请注意,'timer-action'函数正在更改其中一个参数的值。 'counter'参数是'timer-fn'中定义的原子,但动作监听器能够改变它。这是你通常不能用Java做的事情。也许比我更聪明的人可以评论这是否构成“封闭”。在我之前使用像Pascal这样的语言的经验中,我会说传递的参数是“call-by-reference”而不是Java严格的“call-by-value”参数传递。这有什么不同吗?
编辑2 :在用另一个问题检查我的事实之后,实际上这是Clojure中闭包的一个例子。
答案 2 :(得分:2)
在Swing环境中,javax.swing.Timer
有一些优势;有一个例子here。根据您要显示的内容,JEditorPane
可能是合适的。
答案 3 :(得分:2)
除了@Zach L提到的资源(特别是关于计时器)之外,我会好好看看Seesaw,特别是因为你在Clojure中写这篇文章。
特别是,我注意到seesaw.timer
用于触发刷新事件。使用JTextPane(只读)或JEditorPane(可编辑)可以很好地显示格式丰富的结果(如HTML)。
答案 4 :(得分:0)
试试这个link进行Swing。正如Zach所说,你需要使用JFrame,TimerTask应该用于你的要求。
您还可以尝试使用Swing的其他替代框架。
答案 5 :(得分:0)
Clojure的软件事务存储器允许您设置变量监视;每当变量发生变化时(任何事情)都会执行回调。这非常适合GUI编程。只要有任何东西触及变量,您的GUI就可以自动更新。
以下是关于如何执行此操作的简短但非平凡的示例,并说明了正在发生的事情:http://www.paullegato.com/blog/swing-clojure-gui-black-scholes/