2012-11-27 2 views
1

자바를 쓰는 데있어 매우 새로운 기능이므로 도움을 얻을 수있어서 고맙습니다.JFrame에 텍스트 (파일에서 읽음)를 가져 오는 중

나는 텍스트가있는 JFrame을 별도의 텍스트 파일에서 읽으려고하는데 (5 개의 문단이 각각 하나씩 나타난다). 지금까지는 성공하지 못했던 텍스트를 JFrame에 표시하는 데 도움이 필요합니다. (지연된 효과는 그리 걱정할 필요가 없습니다.) 나는 아래의 코드로 마크에서 멀리 떨어져 있는가? 이 문제는 공통적 인 일이지만 다른 스레드는 이벤트 및 기타 어려운 아이디어를 다루었으며 이러한 코드에서 필요한 것을 취하는 것은 여전히 ​​어려운 과제입니다.

필자는 JPanel을 읽을 때도 있지만 텍스트를 계속하려면 JLabel이 필요하다는 것을 읽었습니다. StoryFrame 클래스에 텍스트를 표시하는 메소드가 필요하다고 생각합니다. 여기서는 JLabel을 추가 할 수 있으며 (지연된 효과를 생성하는 데 도움이되도록 nextLine 명령을 지정할 수 있습니다.) 반복적으로이 과정을 반복하십시오). 또한 cmd는 정적 인 곳에서 정적이 아닌 메소드를 호출한다는 것을 알았습니다. Java에서 Dummies 텍스트를 살펴 보았지만 이것을 해결할 방법을 찾을 수 없었습니다. 나는이 코드가 충분하지 않다는 것을 알고, 나는 무엇을 놓치고 있습니까? 모든 해당 DisplayText의

import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class StoryFrame extends JFrame { 
     public StoryFrame() { 
     setTitle("見張ってしながら..."); 
     setSize(400,500); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 

    public void displayText() { 
     JLabel Text = new JLabel(); 
     add(Text); // I feel I need to add a lot more here to connect the two classes 

     } 
} 


import java.util.Scanner; 
import java.io.File; 
import java.io.IOException; 

class ShowIntro { 
public static void main(String args[]) 
       throws IOException { 

    new StoryFrame(); 
    Scanner reader = new Scanner(new File("Intro.txt")); 

    while (reader.hasNext()) { 
    StoryFrame.displayText();  
     try { 
      Thread.sleep(5000); 
     } catch (InterruptedException e) {  
     } 
    } 
} 
} 

답변

0
class ShowIntro { 
public static void main(String args[]) 
       throws IOException { 

    new StoryFrame(); 
    Scanner reader = new Scanner(new File("Intro.txt")); 

    while (reader.hasNext()) { 
     StoryFrame.displayText(); // 1 & 2  
     try { 
      Thread.sleep(5000); 
     } catch (InterruptedException e) {  
     } 
    } 
} 
} 

ShowIntro 클래스를보고 2 가지 이상한 것을 알았습니다 :

  1. 클래스에 비 정적 메서드 (displayText())를 호출하고 있습니다.
  2. 스캐너가 해당 메서드 호출을 읽는 값을 전달하지 않습니다.

수정하려면 (1) StoryFrame 클래스의 인스턴스를 변수에 전달하고 StoryFrame을 표시된 변수의 이름으로 대체해야합니다.
displayText() 메서드에 하나의 매개 변수를 추가하려면 StoryFrame 클래스의 해당 메서드 머리글을 public void displayText(String text) {으로 바꾸고 ShowIntro 클래스에서 메서드를 호출 할 때 스캐너에서 읽은 텍스트를 전달하십시오.

수정 (테스트되지 않은) 버전

class ShowIntro { 
public static void main(String args[]) 
       throws IOException { 

    StoryFrame frame = new StoryFrame();     // Store the StoryFrame in a variable 
    Scanner reader = new Scanner(new File("Intro.txt")); 

    while (reader.hasNext()) { 
     frame.displayText(reader.next());    // pass the text read by the scanner to the displayText() method 
     try { 
      Thread.sleep(5000); 
     } catch (InterruptedException e) {  
     } 
    } 
} 
} 

그리고 StoryFrame 클래스의 displayText() 방법 :

public void displayText(String text) {  // One parameter: a String 
    JLabel Text = new JLabel(text);   // Use the String; make it the content of the JLabel 
    add(Text);        // Now add the JLabel to the JFrame. 
} 
+0

나는 나의 프레임에서 단어를 가지고있다! - 모든 단어가 아니라, 내일의 도전입니다^_^(그냥 nextLine 함수로 놀 필요가 있습니다). 이 문제를 해결해 주셔서 감사 드리며 지금 어디서 잘못되었는지보십시오. –

+0

오, 그리고 아직 한가지 : 관습은 자본으로 변수 이름을 시작하지 않고, 클래스 이름 만 가져야합니다. – 11684

0

먼저() 그러므로 당신은 당신의 클래스의 객체를 호출하지 않고, 주요입니다 정적 하나의 비 정적 메서드를 호출 할 수 없습니다, 정적 방법은 아닙니다.

StoryFrame sf = new StoryFrame(); 
sf.displayText(); 

이렇게 그렇지 않은 경우 :

StoryFrame.displayText(); 

컴파일러는 해당 DisplayText이 그렇지 않은 정적 방법이 될 것으로 예상됩니다

당신은 그런 일이 필요합니다.

displayText()에서 정적이 아닌 메서드를 호출 할 때 새로운 문제가 발생하기 때문에 displayText() 메서드를 정적 메서드로 만들지 마십시오. StoryFrame 객체를 만들고 displayText()를 호출하면됩니다.

또한 충고 한 장, 인형 책에는 사용하지 말아야하며 쓸모가 없습니다. Java를 배우기 위해 권하는 훌륭한 책은 Big Java라고하는 것입니다. 그것은 당신에게 많은 것들을 가르쳐 줄 것입니다.

또한 @schippi에서 설명한 것처럼 displayText() 메소드에는 JLabel에 추가 할 텍스트가 될 매개 변수가 필요합니다.

+0

나는 그를 지우는, 덕분에 그 실수를 생각했다. 또한 Big Java를 확인해 주셔서 감사합니다. 인형은 자바를 액세스 가능하게 만든다는 점에서 나를 도왔지만 하드 코어의 경우에는 적합하지 않습니다. –

0

JPanel은 다른 구성 요소의 컨테이너 일뿐입니다. JLabel은 텍스트를 포함 할 수 있습니다. JLabel에 텍스트를 추가하려고합니다.

당신은 당신이 당신의 프레임의 생성자에서 intanciate 지금

private JLabel mylabel; 
public StoryFrame() { 
    setTitle("見張ってしながら..."); 
    setSize(400,500); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setLocationRelativeTo(null); 
    mylabel=new JLabel(); 
    this.add(mylabel); 
    setVisible(true); 
} 

당신이

reader.next() 
에 의해 수행 된 스캐너에서 텍스트를 원하는 프레임에 추가 Objectvariable로 JLabel의 필요

레이블의 텍스트를 변경하려고합니다.

mylabel.setText(text); 

내가 당신을 위해 나머지를 해결할 수 있기를 바랍니다 당신이 할 수있는 뭔가를

mylabel.setText(mylabel.getText()+text); 

를 추가하는 자신

팁 : 해당 DisplayText 방법은 매개 변수를 필요로

+0

설명해 주셔서 감사합니다. 많이 고맙다 –

관련 문제