来自窗口交互的Java JOptionPane可视工件
我正在尝试使用JSpinner和JOptionPane为一个小项目创建一个简单的菜单。我创建了所需的输出,但当我与窗口交互,甚至将鼠标悬停在框中的按钮上时,它会一次又一次地创建视觉效果(参见下图): 我做了一些研究,并认为这可能是由于JOptionPane不是线程安全的,但无法得到任何工作 总的来说,我的具体问题是如何防止Java在我的JOptionPane窗口上重新绘制这些可视工件 作为参考,请参阅我用于显示此菜单的方法:来自窗口交互的Java JOptionPane可视工件,java,joptionpane,gridworld,visual-artifacts,Java,Joptionpane,Gridworld,Visual Artifacts,我正在尝试使用JSpinner和JOptionPane为一个小项目创建一个简单的菜单。我创建了所需的输出,但当我与窗口交互,甚至将鼠标悬停在框中的按钮上时,它会一次又一次地创建视觉效果(参见下图): 我做了一些研究,并认为这可能是由于JOptionPane不是线程安全的,但无法得到任何工作 总的来说,我的具体问题是如何防止Java在我的JOptionPane窗口上重新绘制这些可视工件 作为参考,请参阅我用于显示此菜单的方法: import javax.swing.JFrame; import
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SpinnerNumberModel;
import javax.swing.JSpinner;
public class Battleship
{
public static void main(String[] args)
{
SpinnerNumberModel battleshipRange = new SpinnerNumberModel(1, 1, 5, 1);
JSpinner rangeSpinner = new JSpinner(battleshipRange);
JOptionPane.showMessageDialog(null, rangeSpinner, "Battleship Number", JOptionPane.QUESTION_MESSAGE);
}
}
我在BlueJ上运行此代码,并使用Windows10Pro
如果这是一个初学者问题,请提前向您表示感谢和歉意。我对编程还是相当陌生的
编辑:更新代码以提供问题的完整来源,但它消失了。我会密切关注它,看看错误的源头在哪里。在完成我的项目后,我终于找到了为什么在我的游戏中所有按钮/单选按钮/等等中都会出现视觉伪影 在GridWorld源代码中,在“GridPanel.java”脚本下,原始程序员创建了一个名为“setToolTipsEnabled(boolean flag)”的方法。它的功能是在游戏停止运行时,当光标悬停在网格上时,在光标旁边弹出一个消息框 当扩展GridWorld以创建我的项目时,该方法会越过网格结构并尝试在光标悬停的任何对象下方创建工具提示。因此,在按钮/单选按钮等上创建视觉瑕疵 为了解决这个问题,我确保这个方法总是设置为false,因为我的游戏不需要工具提示。这个方法是在“GridPanel.java”和“GUIController.java”脚本(在GridWorld代码中)中实现的。我更改了以下方法来解决此问题: GridPanel.java
/**
* Construct a new GridPanel object with no grid. The view will be
* empty.
*/
public GridPanel(DisplayMap map, ResourceBundle res)
{
displayMap = map;
resources = res;
// Phillip Sturtevant: Commented out to prevent visual artifacts
//setToolTipsEnabled(true);
}
GUIController.java
/**
* Stops any existing timer currently carrying out steps.
* Phillip Sturtevant Note: keep tool tips hidden to prevent visual artifacts
*/
public void stop()
{
display.setToolTipsEnabled(false); // hide tool tips while stopped
timer.stop();
running = false;
}
或者,可以完全省略方法调用,但我将它们注释掉,以防将来需要它们
作为参考,下面的方法在GridWorld(位于“GridPanel.java”)中设置工具提示的可见性:
发布4行代码对我们没有帮助。张贴一个适当的说明问题的帖子。根据您对问题的描述,您只需要一个带有微调器的选项面板,当然还有一个main()方法来显示选项窗格。在创建示例时,您可能会发现问题。我重新构造了代码以提供适当的示例,但现在错误消失了。即使重新启动我的程序,问题也消失了。我会在开发我的程序时关注它,看看问题是否会再次出现。谢谢你的反馈。它帮助我缩小了这个问题的范围,并将帮助我在将来提出更好的问题。
/**
* Enables/disables showing of tooltip giving information about the
* occupant beneath the mouse.
* @param flag true/false to enable/disable tool tips
*/
public void setToolTipsEnabled(boolean flag)
{
if ("hide".equals(System.getProperty("gridworld.gui.tooltips")))
flag = false;
if (flag)
ToolTipManager.sharedInstance().registerComponent(this);
else
ToolTipManager.sharedInstance().unregisterComponent(this);
toolTipsEnabled = flag;
}