-1

我将 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();
    }
4

1 回答 1

4

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

  • 您正在覆盖 JFrame 的绘制方法,这是几乎永远不应该做的事情
  • 您正在使用 Scanner 并尝试在 Paint 或 paintComponent 方法中读取文件。
  • 您正在尝试在 paint 或 paintComponent 方法中添加组件。
  • 您创建了一个 Scanner 对象,但从未使用它读取文件。
  • 您创建了两个 JFrame,this它们是您的介绍类的当前对象,并且正在显示,而 window 是 JFrame 变量,它正在接收 JLabel,并且从不显示。
  • 您需要学习并遵循 Java 命名约定,以便其他人可以更好地理解您的代码。类名以大写字母开头,方法和变量名以小写字母开头。
  • 您将希望再次改进代码格式,以便其他人可以更容易地理解您的代码。这包括您的代码缩进和空格的使用(一个空白行就足够了)。

您永远不会在paint 或paintComponent 方法中添加组件或使用扫描仪或文件。除非你想让你的程序完全没有响应。paint 方法几乎不应该被覆盖,JPanel 的paintComponent 方法应该被覆盖以只进行绘画和绘画。

在构造函数或非绘制方法中使用 Scanner。有关如何使用此库的更多详细信息,
还请查看Swing 教程。

于 2013-07-28T21:37:26.407 回答