Java JLabel未验证

Java JLabel未验证,java,swing,window,jframe,jlabel,Java,Swing,Window,Jframe,Jlabel,我将一个JLabel设置为一个从文件中读取信息的字符串,每当我想将它添加到JFrame并加载类时,JLabel都不会出现。字符串intromsgstring正在工作,我知道这一点,因为我使用System.out.println()对其进行了测试 这是密码 import java.awt.*; import java.util.Scanner; import java.awt.event.KeyListener; import java.awt.event.MouseAdapter; import

我将一个JLabel设置为一个从文件中读取信息的字符串,每当我想将它添加到JFrame并加载类时,JLabel都不会出现。字符串intromsgstring正在工作,我知道这一点,因为我使用System.out.println()对其进行了测试

这是密码

import java.awt.*;
import java.util.Scanner;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.MouseMotionListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import java.awt.color.*;
import java.awt.Graphics;
import java.io.File;
import java.io.FileNotFoundException;
public class intro extends JFrame{

//Variables 
public Font font = new Font("Arial", Font.BOLD, 20);
public String playername;
public String intromsgstring;
public JLabel intromsg = new JLabel(intromsgstring);
public JFrame window = new JFrame();
//Screen Settings
public intro(){
setSize(1100,650);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setVisible(true);
setTitle("TEST");
setBackground(Color.BLACK);
}

//Paint Method
public void paint(){
    try {
        Scanner scan = new Scanner(new                        File("/Users/AlecStanton/Desktop/op1/name.txt"));
         intromsgstring = "Oh! Hello there. Welcome to the land of lylaid. So your name is " + scan.nextLine();
         } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

     //Intro Box
    intromsg.setFont(font);
    intromsg.setAlignmentX(170);
    intromsg.setAlignmentY(535);
    window.add(intromsg);
}

//Object
public static void main(String[] args) {
      intro intro = new intro();
    }

您的代码有几个问题,包括

  • 您正在重写JFrame的绘制方法,这几乎是不应该做的
  • 您正在使用扫描仪并尝试以paint或paintComponent方法读入文件
  • 您正在尝试在paint或paintComponent方法中添加组件
  • 您创建了扫描仪对象,但从未使用它读取文件
  • 您有两个JFrames,
    this
    ,它是您的简介类的当前对象,并且正在显示;window是一个JFrame变量,它正在接收JLabel,并且从不显示
  • 您需要学习并遵循Java命名约定,以便其他人能够更好地理解您的代码。类名以大写字母和方法开头,变量名以小写字母开头
  • 您还需要改进代码格式,以便其他人更容易理解您的代码。这包括代码缩进和使用空格(一个空行就足够了)
从不在paint或paintComponent方法中添加组件或使用扫描仪或文件。除非你想让你的程序完全没有反应。绘制方法几乎永远不应该被覆盖,JPanel的paintComponent方法应该被覆盖,以便只进行绘制和绘制

在构造函数或非绘制方法中使用扫描仪。

还请查看,以了解有关如何使用此库的更多详细信息。

那么我将如何修复我的Program?我猜我应该用另一种方法添加扫描仪?但是,如果从fle正确加载内容,为什么我的jlabel会出现在jframe上?你正在学习编程课程,不是吗?1)一行空白的白字源代码中的空间总是足够的。
{
之后或
}
之前的空行通常也是多余的。2) 对代码块使用一致的逻辑缩进。代码的缩进旨在帮助人们理解程序流程。3) 在
paintComponent(Graphics)
方法中添加
JPanel
&进行自定义绘制,而不是在顶级容器(如
JFrame
)中进行绘制。还可以为自定义组件返回一个合理的首选大小,以帮助布局管理器。您能提供一些程序代码来修复此问题吗?请原谅我的请求,但我对java不熟悉,也不熟悉面向对象编程。我知道php,但那是different@user2540802当前位置我甚至不确定你想要完成什么。您确实需要先阅读一些Swing教程。您必须先学习Java和Swing,然后才能尝试使用它们。没有捷径。但是如果我的jlabel从fle正确加载内容,为什么它会出现在jframe上?@user254082:另外,您将jlabel添加到错误的jframe。请参见编辑以回答问题。