-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 を使用していて、ペイントまたは paintComponent メソッドでファイルを読み込もうとしています。
  • paint または paintComponent メソッドにコンポーネントを追加しようとしています。
  • Scanner オブジェクトを作成しますが、それを使用してファイルを読み取ることはありません。
  • イントロ クラスの現在のオブジェクトであり、表示されている2 つの JFramesthisと、JLabel を受け取り、表示されない JFrame 変数であるウィンドウを javave します。
  • 他の人があなたのコードをよりよく理解できるように、Java の命名規則を学び、それに従う必要があります。クラス名は大文字で始まり、メソッド名と変数名は小文字で始まります。
  • 他の人がコードをより簡単に理解できるように、コードのフォーマットを改善する必要があります。これには、コードのインデントと空白の使用が含まれます (1 行の空白行で十分です)。

コンポーネントを追加したり、paint または paintComponent メソッドでスキャナやファイルを操作したりすることはありません。プログラムを完全に無反応にしたい場合を除きます。paint メソッドをオーバーライドすることはほとんどありません。JPanel の paintComponent メソッドは、ペイントとペイントのみを行うためにオーバーライドする必要があります。

Scanner をコンストラクタまたは非ペイント メソッドで使用します。このライブラリの使用方法の詳細については、 Swing チュートリアル
もご覧ください。

于 2013-07-28T21:37:26.407 に答える