当前位置: 首页 > 知识库问答 >
问题:

JMenuItems是坏的绘制[重复]

宗政财
2023-03-14

我已经构建了一个UI,但当我尝试选择MenuBar的选项时,它绘制得很糟糕。

这是我的主Launcher.java

public class Launcher
{
    public static void main(String[] args) throws IOException
    {
        SwingUtilities.invokeLater(new Runnable() 
        {
            public void run()
            {
                new Gui();
            }
        });
    }
}

这是管理UI GUI.java的类

public class Gui extends JFrame
{
    private JMenuBar menuBar=new JMenuBar();
    private JMenu info=new JMenu("Info");
    private JMenu help=new JMenu("Aiuto");
    private JMenu tool=new JMenu("Strumenti");
    private JMenuItem update=new JMenuItem("Controlla aggiornamenti");
    private JMenuItem resetTable=new JMenuItem("Reset tabella");
    private JMenuItem resetTextArea=new JMenuItem("Reset area di testo");
    private JMenuItem forum=new JMenuItem("Vai al forum");
    private JMenuItem guide=new JMenuItem("Guida");
    private JMenuItem information=new JMenuItem("Informazioni");
    private JMenuItem trouble=new JMenuItem("Segnala un problema");
    private final int GUI_WIDTH=1270;
    private final int GUI_HEIGHT=700;


    /**
     * Costruttore dell'interfaccia principale
     */
    public Gui()
    {
        setMenuBar();
        setTitle("WP 0.2");
        setGUI();
    }

    /**
     * Metodo che setta l'interfaccia grafica principale
     */
    private void setGUI()
    {
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(GUI_WIDTH,GUI_HEIGHT);
        Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
        int width=(int) screenSize.getWidth();
        int height=(int) screenSize.getHeight();
        setLocation((width-GUI_WIDTH)/2,(height-GUI_HEIGHT)/2);
        setResizable(true);
    }

    /**
     * Metodo che aggiunge i vari componenti al menubar
     */
    public void setMenuBar()
    {
        setJMenuBar(menuBar); // Creazione del Menu
        menuBar.add(info);
        menuBar.add(tool);
        menuBar.add(help);

        info.add(update);
        tool.add(resetTable);
        tool.add(resetTextArea);
        help.add(forum);
        help.add(trouble);
    }
}

会是问题所在,因为Swing不是线程安全的?

共有1个答案

夏令秋
2023-03-14

此外,setVisible(true)需要在所有内容之后。当您将JFrame设置为可见时,它会绘制当前组件。如果您在setVisible之后调整和移动JFrame,则需要重新绘制JFrame。我通常将set可见放在构造函数的末尾。

 private void setGUI()
{
    //setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(GUI_WIDTH,GUI_HEIGHT);
    Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
    int width=(int) screenSize.getWidth();
    int height=(int) screenSize.getHeight();
    setLocation((width-GUI_WIDTH)/2,(height-GUI_HEIGHT)/2);
    setResizable(true);
    setVisible(true);
}
 类似资料:
  • 问题内容: 因此,我正在创建一个免费的手绘图JPanel,它会响应鼠标的移动并 绘制线条。我得到了它的大部分工作,除了一个错误,它会 在线之间随机画一条直线。该随机直线不是 故意的,在缓冲图像上绘制的内容严格来说应该是 用户绘制的内容。这些随机绘制的线不是由用户完成的, 这令人困惑。以下是我的代码,任何人都可以看看吗?所包含的图像 使您可以直观地看到正在执行的操作。 问题答案: 您可能希望嵌套列表

  • 所以我在上面创建了这个表格,现在我试图用它来绘制 但是现在我想弄清楚如何画一条均值线,例如,我在图像的右边画了爱尔兰的均值,我不知道如何在这个均值的图表上画一条线。真的,任何帮助感谢。干杯,伙计们。

  • 我在CSV文件中有一些数据,想打印出来,但图形没有显示出来 这是CSV文件http://www.mediafire.com/file/2gtbxm5adom7m4j/pop.csv

  • 所以我有一个包含JTable的应用程序。JTable位于JScrollPane的内部,JScrollPane绘制在JFrame上。 现在,在我的应用程序中,我打开一个新窗口,向该表中添加一个新行,在我单击一个按钮保存更改后,新窗口关闭。 现在我尝试在新窗口关闭后添加这些行: 这里有什么问题?

  • 问题内容: 这是我的问题…: 在我的活动中,我有一个和一个。我希望Button仅在显示某个可绘制对象时才执行操作。是的,这意味着该代码正在各种可绘制对象之间进行动画处理,从而使其不会中断我想要完成的工作。 没用 并且我将其范围缩小到“ if(vari(drawabledrawable == acertaindrawable)”行的错误。尽管Eclipse并没有公然报告两个可绘制对象是否相同的And

  • 我编写了这段代码,可以在JavaFX画布上绘制。它可以很好地工作,但我不知道如何重新绘制画布(比如在Swing中),以便在新画布上重新开始绘制。这是我的代码,非常感谢你的帮助!马里奥

  • 我创建了一个程序,只需在屏幕上移动一个球。我以前把它都放在一节课上,但我觉得它看起来太乱了,所以我把它分成了三个不同的课:主课。。。初始化一切,游戏。。。它描绘一切,是一个JPanel,AL是一个KeyListener(这也是问题所在)。问题是,我无法让程序从我的AL类重新绘制,无论我试图传递什么。有人能帮忙吗?以下是我的三门课: - -

  • 问题内容: 我创建了一个自定义视图(我们称之为),该视图基本上只是使用画布在其自身上绘制一些文本。使用全局变量设置要绘制的文本。 在程序执行过程中的某个时候,我想更改全局变量,并重新绘制自身以更新文本。我尝试过然后,但这无济于事。我怀疑既然内的任何内容都没有改变,它认为没有理由打电话给我。是否有任何方法可以强制视图重新绘制自身,即使它认为不需要重新绘制它呢? 问题答案: 如果我在MyView内部有