初学者到swing

我想创建一个简单的Swing应用程序。 然而,我对Swing的经历非常非常非常少。 我想创建一个一个窗口应用程序,每隔5分钟刷新一次,我会做一个屏幕抓取的内容。 我正在使用Clojure编写代码。 我认为Swing是采用这种方式的方法,但如果还有其他更好的选择,我也希望能够更多地了解这些。

使用Swing我需要用什么代码? (我应该使用哪些课程等)

谢谢,Alex

好吧,对于每五分钟一点, java.util.TimerTask应该有所帮助。 对于一般的Swing信息, 这个指向Java教程的链接应该有所帮助。

要有一个窗口,特别是JFrame可能是你最好的选择。

要显示单行或多行文本,您应该分别查看JLabel或JTextArea 。

要显示图像, ImageIcon应该做到这一点。

对于其他需求,Java Tutorial应该是一个很大的帮助。

正如trashgod所建议的那样,javax.swing.Timer在java.util.TimerTask上的GUI方面有一些优势。 这篇关于在Swing应用程序中使用计时器的文章应该可以帮助您决定使用哪个。

你是对的。 Swing是要走的路,但如果你正在学习Clojure和Swing,那么连接所有部分可能会有点困难。 有几个简短的例子展示了如何在Clojure中创建简单的Swing GUI。 这是另一个将简单的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,000ms更改为300,000ms,以便每5分钟触发一次操作。 要执行除更新标签以外的操作,您可以更改timer-actionfunction的内容。

认为这是线程安全的,但没有确定。 在更新Swing组件时,还有关于线程安全的注意事项和教程。 你可能也想检查一下。

我希望这足以提供足够的信息,以便提供一些线索,以便在何处寻找更多信息。

编辑 :我想在这里指出一个更有趣的事情。 请注意,’timer-action’函数正在更改其中一个参数的值。 ‘counter’参数是’timer-fn’中定义的primefaces,但动作监听器能够改变它。 这是你通常不能用Java做的事情。 也许比我聪明的人可以评论这是否构成“封闭”。 在我以前使用像Pascal这样的语言的经验中,我会说传递的参数是“引用调用”而不是Java严格的“按值调用”参数传递。 这有什么不同吗?

编辑2 :在用另一个问题检查我的事实之后,这实际上是Clojure中关闭的一个例子。

在Swing上下文中, javax.swing.Timer有一些优点; 这里有一个例子。 根据您想要显示的内容, JEditorPane可能是合适的。

除了@Zach L提到的资源(特别是关于计时器)之外,我会好好看看Seesaw ,特别是因为你在Clojure中写这篇文章。

特别是,我注意到seesaw.timer用于触发刷新事件。 使用JTextPane(只读)或JEditorPane(可编辑)可以很好地显示格式丰富的结果(如HTML)。

试试Swing的这个链接 。 正如Zach所说,你需要使用JFrame,TimerTask应该用于你的要求。

您还可以尝试其他Swing框架。

Clojure的软件事务存储器允许您设置变量监视; 每当变量发生变化时(任何事情)都会执行你的回调。 这非常适合GUI编程。 只要有任何东西触及变量,您的GUI就可以自动更新。

这是一个简短但非平凡的例子,说明了如何做到这一点,并解释了正在发生的事情: http : //www.paullegato.com/blog/swing-clojure-gui-black-scholes/