2014-05-06 41 views
0

我正在我的第一个GUI程序上工作,几乎完成了最后一堂课是一个jFrame有一个.txt文件和一个关闭窗口的按钮,我不知道如何追加我的文件到窗口? package eg.edu.guc.santorini.gui;如何将.txt文件添加到JTextArea以及放置我的.txt文件的位置?

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Container; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 

public class Rules extends JFrame implements ActionListener, MouseListener{ 
JPanel Rules; 
JTextArea rules; 
public Rules() throws IOException 
{ 
    super(); 
    setTitle("Rules Of Santorini Board Game"); 
    setSize(1000, 700); 
    setLocation(200, 100); 
    Container content = getContentPane(); 
    content.setBackground(new Color(220,20,60)); 
    content.setLayout(new BorderLayout()); 
    setVisible(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLocationRelativeTo(null); 
    WindowDestroyer wd = new WindowDestroyer(); 
    addWindowListener(wd); 

    JTextArea rules=new JTextArea(); 
    rules.append(""); 


    JTextArea textArea = new JTextArea(); 
    JScrollPane scrollPane = new JScrollPane(textArea); 

    StringBuilder builder = new StringBuilder(); 

    // read a text file from resources folder that is parallel to src folder 
    BufferedReader reader = new BufferedReader(new FileReader(new    File("resources/New Text Document.txt"))); 
    String line = null; 
    while ((line = reader.readLine()) != null) { 
     // read the file line by line 
     builder.append(line).append(System.lineSeparator()); 
    } 
    reader.close(); 

    // set the content of file in text area 
    textArea.setText(builder.toString()); 

     /* FileReader fileReader = new FileReader("New Text Document.txt"); 
BufferedReader bufferedReader = new BufferedReader(fileReader); 

String inputFile = ""; 
String textFieldReadable = bufferedReader.readLine(); 

while (textFieldReadable != null){ 
    inputFile += textFieldReadable; 
    textFieldReadable = bufferedReader.readLine();      
    rules.setText(inputFile);*/ 



    Rules=new JPanel(); 
    Rules.setLayout(null); 
    this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    Rules.setVisible(true); 
    Rules.setBackground(Color.ORANGE); 
    add(Rules, BorderLayout.CENTER); 
    Rules.setSize(1000, 700); 
    this.getContentPane().add(Rules); 


    JButton ok=new JButton("Got It"); 
    ok.setSize(100, 50); 
    ok.setLocation(800, 570); 
    ok.addMouseListener(this); 
    Rules.add(ok); 

    ok.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) 
     { 
      //dispose(); 
      setVisible(false); 

     } 
    }); 

    //JFrame f = new JFrame(); 
    //f.setSize(320, 200); 
    //f.getContentPane().add(rules); 
    //f.setVisible(true); 



} 




@Override 
public void mouseClicked(MouseEvent arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mouseEntered(MouseEvent arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mouseExited(MouseEvent arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mousePressed(MouseEvent arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mouseReleased(MouseEvent arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void actionPerformed(ActionEvent e) { 
    // TODO Auto-generated method stub 

} 

} 
+0

你想在'JTextArea'内显示文本文件的内容吗?或者你无法读取文件? – Braj

+0

我想在JTextArea的窗口 – user2419300

+0

中显示内容? – Braj

回答

4

在哪里放置我的txt文件?

你可以尝试任何一个

// Read from same package 
InputStream in = getClass().getResourceAsStream("abc.txt"); 

// Read from resources folder parallel to src in your project 
File file = new File("resources/abc.txt"); 

// Read from src/resources folder 
InputStream in = getClass().getResourceAsStream("/resources/abc.txt"); 

enter image description here


- 编辑 -

必读A Visual Guide to Layout Managers

这里是你的代码的一些要点:

  • 不要使用null布局Rules.setLayout(null);
  • 呼叫JFrame#setVisible(true);到底什么时候所有组分添加
  • 始终使用SwingUtilities.invokeLater()初始化GUI
  • 遵循Java命名约定。
+0

问题出现在抛出异常之后另一个类需要在初始化类之后尝试catch catch块规则= null并且出现一个我不知道如何处理的问题 – user2419300

+0

'textArea'没有添加到'JFrame'中。第二,你为'规则'创建了一个本地和实例变量。 – Braj

+0

不要抛出它。使用'try-catch'块。 – Braj

4

要读取一个文件到一个JTextArea可以简单地使用JTextArea#read,这将,但是,丢弃的JTextArea

更新

当前内容将代码添加到IDE后,我注意到你并没有将rulesJTextArea)添加到任何东西中,所以它永远不会被看到......

你如何创建的一般结构你e UI也有点歪斜,尝试更多的东西一样......

public class Rules extends JFrame { 

    public Rules() throws IOException { 
     super(); 
     // Initial setu[ 
     setTitle("Rules Of Santorini Board Game"); 

     // Create the basic UI content 
     JTextArea textArea = new JTextArea(40, 20); 
     JScrollPane scrollPane = new JScrollPane(textArea); 

     // Read the file 
     try (BufferedReader reader = new BufferedReader(new FileReader(new File("resources/New Text Document.txt")))) { 
      textArea.read(reader, "File"); 
     } catch (IOException exp) { 
      exp.printStackTrace(); 
     } 

     getContentPane().setBackground(Color.ORANGE); 

     JButton ok = new JButton("Got It"); 
     add(textArea, BorderLayout.SOUTH); 
     add(ok, BorderLayout.SOUTH); 

     ok.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       //dispose(); 
       //?? No idea what this is for, but it won't do much 
       setVisible(false); 

      } 
     }); 

     pack(); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     setVisible(true); 

    } 

} 

不要使用MouseListener s的按钮,而不是你应该使用ActionListener

不要使用null布局。像素完美的布局是现代UI设计中的错觉,您无法控制字体,DPI,渲染管线或其他因素,这些因素将改变组件在屏幕上的渲染方式。

Swing旨在与布局经理合作解决这些问题。如果你坚持忽视这些功能,并且针对API设计工作,准备好应对许多令人头痛的问题,并且永不结束艰苦的工作......

+0

它的'一个完美的解决方案。 – Braj

+0

@Braj不知道它是否完美,但很简单;) – MadProgrammer

相关问题