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

为什么JLabel在我的JFrame类中不可见?

华俊贤
2023-03-14

我正在努力学习java,但我遇到了一些问题,找到答案对我来说并不简单。我想做的任务似乎很简单。

我想添加一个标签框架。MyFrame是一个JFrame类,具有一些基本的修改,如大小、颜色等。

主代码如下所示:

public class Main {
    public static void main(String[] args)
    {
        // a GUI window to add components
        MyFrame myFrame = new MyFrame();
    
        ImageIcon image = new ImageIcon("Images/background.png");
        //a GUI display area for a string of text,image or both
        JLabel label = new JLabel("Why it is happening?",image,JLabel.CENTER);
        myFrame.add(label);
        //label.setText("Why it is happening?");// set text of label
        //label.setIcon(image);
        label.setHorizontalTextPosition(JLabel.CENTER);
        
    }

}

我得到的结果就是我想要的:正确的结果

当我评论关于标签的最后一行时,它正在改变我的用户界面的外观。它只显示JFrame而没有我的标签。

非工作代码:

public class Main {
    public static void main(String[] args)
    {
        // a GUI window to add components
        MyFrame myFrame = new MyFrame();
    
        ImageIcon image = new ImageIcon("Images/background.png");
        //a GUI display area for a string of text,image or both
        JLabel label = new JLabel("Why it is happening?",image,JLabel.CENTER);
        myFrame.add(label);
        //label.setText("Why it is happening?");// set text of label
        //label.setIcon(image);
        //Commented
        //label.setHorizontalTextPosition(JLabel.CENTER);
        
    }

}

这是图形结果:不工作标签

我错过了一些基本信息吗?我认为两者应该是一样的。

共有1个答案

简俊楚
2023-03-14

这是一个有趣的问题。乍一看,我同意@VGR。但是如果这一切都归因于绘画的顺序等。-那么我会期望调用“重新绘制()”甚至“无效()”来解决这个问题。看起来不像...所以也许这是一个摆动的错误。

import javax.swing.*;

public class Main
{
    public static void main(String[] args)
    {
        // a GUI window to add components
        JFrame myFrame = new JFrame();
        ImageIcon image = new ImageIcon("Images/background.png");

        myFrame.setSize(500,250);
        myFrame.setVisible(true);

        JLabel label = new JLabel("Why it is happening?", image, JLabel.CENTER);
        myFrame.add(label);

        //label.setHorizontalTextPosition(JLabel.CENTER); 
        label.repaint(); //Should have the same effect as the line above, but doesn't!

        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

}
 类似资料:
  • 在此输入图像说明 我正在尝试用新文本更新并且我需要这个文本有下行线。

  • 问题内容: 我似乎无法弄清楚为什么我的JFrame为空。我要去哪里错了? 导入javax.swing。*; 导入java.awt.FlowLayout; 公共类GUIExample扩展JFrame { } 问题答案: 您忘记在jFrame中添加contentPane了,就像这样 我注意到您正在使用继承来构建jFrame,因此在这种情况下,您需要实例化自己的类。我已经用最小的代码重构了您的代码以运行

  • 我对编程相对较新,所以如果这个问题很愚蠢,我很抱歉。我正在创建一个Java程序,它在JPanel中包含一个JButton,而JPanel在JFrame中。另一个按钮在JPanel之外,但仍在JFrame中。我将布局设置为BoxLayout。我的问题是,我把面板做成黑色,除了第二个按钮之外,它占据了整个JFrame。如何使JPanel只占用第一个按钮周围的区域?

  • 我有一个我将像这样填充它 在这种情况下,如果返回类似的内容,那么最终结果是一个空的?这是为什么?我以为会捕获所有转义字符。

  • 尝试将我的java应用程序从Eclipse导出到可运行的jar文件中。(这是一个控制台应用程序) 这是Eclipse中项目目录的外观: 以下是项目的运行配置: 这就是jar创建选项的外观: 最后,这是我得到的错误: 我真的试过了所有的东西,但我很困惑为什么它不运行。主类选择正确,运行配置似乎正确,我尝试了runnable和regular,两者都不起作用。 我尝试过清理、重建,甚至重新制作这个项目,

  • 所以我尝试在Java创建一个象棋游戏(自我学习)。 我使用JFrame创建一个框架,JPanel将其添加到框架中,JLabel定义象棋棋盘的瓷砖。 我想通过单击它来改变瓷砖的颜色,我使用的是这样的方法:这是鼠标单击的方法。 这里调用的函数是: 所以当我点击一个瓷砖,它为正确的瓷砖上色,但通过打开一个新的瓷砖。知道这是为什么吗?我如何只在那个框架中进行更改? 这是整个源代码: main.java m