【问题标题】:JLabel not validatingJLabel 未验证
【发布时间】:2013-07-28 21:32:57
【问题描述】:

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

【问题讨论】:

  • 那么我将如何修复我的程序?
  • 我猜我应该用另一种方法添加扫描仪?
  • 但是,如果我的 jlabel 从文件中正确加载内容,为什么我的 jlabel 会出现在 jframe 上?
  • 你在上编程课是吗?
  • 1) 源代码中的一个空白行总是就足够了。 { 之后或} 之前的空行通常也是多余的。 2) 对代码块使用一致且符合逻辑的缩进。代码的缩进是为了帮助人们理解程序流程。 3) 不要在JFrame 等顶级容器中进行绘制,而是添加JPanel 并在paintComponent(Graphics) 方法中进行自定义绘制。还为自定义组件返回一个合理的首选大小,以协助布局管理器。

标签: java swing window jframe jlabel


【解决方案1】:

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

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

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

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

【讨论】:

  • 能否包含一些程序代码来解决这个问题,请原谅我的请求,但我是 java 新手,对面向对象编程不熟悉。
  • 我知道 php 但那不一样
  • @user2540802:我什至不确定您要完成什么。您确实需要先阅读一些 Swing 教程。您必须先学习 Java 和 Swing,然后才能尝试使用它们。没有捷径可走。
  • 但是,如果我的 jlabel 从文件中正确加载内容,为什么我的 jlabel 会出现在 jframe 上?
  • @user2540802:您还将 JLabel 添加到错误的 JFrame 中。请参阅编辑以回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-08
  • 2018-01-18
相关资源
最近更新 更多