Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 初学挥杆_Java_Swing_Clojure - Fatal编程技术网

Java 初学挥杆

Java 初学挥杆,java,swing,clojure,Java,Swing,Clojure,我想创建一个简单的Swing应用程序。然而,我在挥杆方面的经验非常、非常、非常少。我想创建一个单窗口应用程序,每5分钟刷新一次我所做的屏幕抓取内容。我用Clojure来写代码。我认为Swing是解决这个问题的方法,但如果还有其他更好的选择,我也希望听到更多关于这些的信息 使用Swing执行此操作需要什么代码?(我应该使用什么课程等) 谢谢, 亚历克斯好吧,每五分钟一次,应该会有帮助。对于一般的Swing信息,应该提供帮助 具体来说,拥有一扇窗户可能是你最好的选择 要显示单行或多行文本,应分别查看

我想创建一个简单的Swing应用程序。然而,我在挥杆方面的经验非常、非常、非常少。我想创建一个单窗口应用程序,每5分钟刷新一次我所做的屏幕抓取内容。我用Clojure来写代码。我认为Swing是解决这个问题的方法,但如果还有其他更好的选择,我也希望听到更多关于这些的信息

使用Swing执行此操作需要什么代码?(我应该使用什么课程等)

谢谢,
亚历克斯

好吧,每五分钟一次,应该会有帮助。对于一般的Swing信息,应该提供帮助

具体来说,拥有一扇窗户可能是你最好的选择

要显示单行或多行文本,应分别查看或

要显示图像,应该这样做

对于其他需要,Java教程应该是一个很大的帮助

正如所建议的,javax.swing.Timer在GUI方面比java.util.TimerTask有一些优势。这篇关于的文章应该可以帮助您决定使用哪种方法。

在Swing环境中,有一些优点;有一个例子。根据您想要显示的内容,可能是合适的。

在Swing中尝试此选项。正如Zach所说,您需要使用JFrame,TimerTask应该用于您的需求


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

您说得对。Swing是一个不错的选择,但是如果你正在学习Clojure和Swing,那么连接所有的部分可能会有点困难。有几个简短的例子展示了如何在Clojure中创建简单的Swing GUI。下面是另一个简短的示例,它将一个简单的GUI与一个
计时器
对象相结合

(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))
运行时,这将创建一个小窗口,其中的标签每秒更新一次。根据您的描述,您可以将计时器的频率从1000毫秒更改为300000毫秒,以每5分钟触发一次操作。要执行更新标签以外的操作,您需要更改
计时器操作
函数的内容

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

我希望这是足够的信息,给你一些线索,在哪里寻找进一步的信息

编辑:我想在此指出一件更有趣的事情。请注意,“timer action”函数正在更改其中一个参数的值。“counter”参数是在“timer fn”中定义的一个原子,但动作侦听器可以更改它。这是Java中通常无法做到的。也许比我聪明的人可以评论这是否构成了“终结”。在我以前使用Pascal等语言的经验中,我会说参数传递是“按引用调用”,而不是Java严格的“按值调用”参数传递。这有什么不同吗


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

Clojure的软件事务性内存允许您对变量设置监视;只要变量发生更改(任何更改),就会执行回调。这非常适合GUI编程。只要有任何东西碰到变量,GUI就会自动更新


下面是一个简短但非琐碎的示例,说明了如何做到这一点:

在@Zach L提到的资源之上(特别是关于计时器),我将仔细研究一下,特别是因为您是在Clojure中写这篇文章的


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

Doh!我怎么能忘记swing Timer:-pGood start,但您完全错过了seesaw(),这看起来会使Clojure中的应用程序开发大大减少痛苦。