我必须开发一个 Java swing 应用程序来进行心理实验。
该实验由一个白色屏幕组成,其中出现一个小表情符号,“站在那里”3 秒钟然后消失。然后屏幕又全白了,这个人必须点击他认为表情符号所在的空间。之后,另一个表情符号出现在不同的空间中,整个过程重复多次。将有一个数据库用于保存原始坐标和该人单击的坐标。
我的问题是这将如何在一个窗口中发生?我已经尝试了多个 JForms,它的工作量太大了,每次迭代都会打开不同的窗口。
从...开始
从类似JPanel
. 这是您完成所有工作的地方。您可以创建 a 的实例JFrame
并将此组件添加到其中。
当用户准备好时,您将开始一个循环。这将从数据库中加载详细信息,启动javax.swing.Timer
并请求重新绘制组件(以便它可以显示图像)
当定时器触发时,它应该重置显示(空白)。
当用户点击组件时(会被鼠标监听器检测到),您可以记录鼠标点并开始新的循环。
这是该怎么做。您需要创建一个扩展JPanel
和覆盖的类paintComponent
以在适当的位置绘制图像。构造函数还应该添加一个鼠标监听器,它可以检测到相应区域的鼠标点击,更新数据,并调用repaint()
. 至于在指定时间后隐藏表情符号,请使用 swing Timer
。
现在,我不打算举一个例子,因为我们不会在堆栈溢出时为你做作业。
我的建议:
使您的窗口成为 JPanel 并覆盖paint方法
public class MyPanel extends JPanel {
public void paint(Graphics g) {
// do your painting here
}
}
首先确保从 Jpanel 中擦除所有内容(来自 paint 方法) 接下来在 paint 方法中显示表情图像(搜索 java swing paint image...)但前提是表情数据存在(坐标)。
接下来制作一个将切换表情坐标的功能
toggleEmoticon(){
if(emoticon.x != -1 && emoticon.y != -1){
emoticon.x=-1;
emoticon.y=-1;
}
else{
emoticon.x = random() //between 0 and panel width
emoticon.y = random() //between 0 and panel height
}
制作一个计时器,在 x 秒后调用此函数...
然后你必须检查鼠标点击坐标是否接近或在显示的笑脸的范围内......(请注意,显示的笑脸将从选定的坐标+宽度和高度显示)
我认为你可以解决剩下的问题。找到我告诉你的东西的例子并尝试自己做某事,永远不要期望一个有效的例子,否则你将不知道如何做任何事情......