首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swing初学者

Swing初学者
EN

Stack Overflow用户
提问于 2011-01-21 12:56:15
回答 6查看 570关注 0票数 8

我想创建一个简单的Swing应用程序。然而,我对Swing的使用经验非常非常少。我想创建一个一个窗口的应用程序,它每5分钟刷新一次我做的屏幕抓取的内容。我正在使用Clojure编写代码。我认为Swing是最好的选择,但如果有其他更好的选择,我也很乐意听到更多关于这些选择的信息。

我需要什么代码才能用Swing做到这一点呢?(我应该使用什么类,等等)

谢谢,亚历克斯

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-01-21 13:02:12

那么,对于每五分钟一次的情况,java.util.TimerTask应该会有所帮助。对于一般的Swing信息,this link to the Java Tutorials应该会有所帮助。

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

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

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

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

正如trashgod所建议的,当涉及到GUI时,javax.swing.Timer比java.util.TimerTask有一些优势。这篇关于using timers in Swing applications的文章应该会帮助你决定使用哪一种。

票数 8
EN

Stack Overflow用户

发布于 2011-01-26 09:17:41

你是对的。Swing是可行的,但是如果您正在学习Clojure和Swing,那么将所有部分连接起来可能有点困难。有几个简短的例子展示了如何在Clojure中创建简单的Swing GUI。下面是另一个结合了简单图形用户界面和Timer对象的简短示例。

代码语言:javascript
复制
(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:在用另一个问题检查了我的事实之后,这实际上是中的一个闭包示例。

票数 4
EN

Stack Overflow用户

发布于 2011-01-21 13:19:35

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4755524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档