简单的GUI应用程序,但找不到添加符号

时间:2017-07-02 18:52:45

标签: file user-interface

我们刚刚开始在计算机科学课上学习GUI。我们被告知

如下所示设计GUI应用程序并执行以下任务: 1.文本字段用于数据文件名,文件名长度应在5到10之间,文件扩展名必须为.txt,否则提示用户提供有效的文件名。 2.加载数据文件的内容并显示在textarea上。

这是我的代码到目前为止所说的

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import java.util.*;

public class FileLoader implements ActionListener {


private final LayoutManager layout;
private JButton loadButton;
private JTextField filename;
private JTextArea display;

public FileLoader() 
{

 layout = new FlowLayout();
  setLayout(layout);
   JFrame frame = new JFrame();
   JPanel buttonPanel = new JPanel();

   loadButton = new JButton("Load File");
   filename = new JTextField(10);
   buttonPanel.add(filename );
   buttonPanel.add(loadButton);
   display = new JTextArea(25, 50);

   add(new JLabel("File Name: "));
    add(filename);
  add(new JScrollPane(display));
  add(loadButton);

   loadButton.addActionListener(this);


 }

public void actionPerformed(ActionEvent event) {
try{

   String file = filename.getText();
   int filesize = file.length();

if (filesize>= 5 && filesize<= 10){
  Scanner input = new Scanner(getClass().getResourceAsStream(file));
  String DisTXT = " ";
  while (input.hasNextLine()){
   DisTXT = DisTXT  + input.nextLine();
  if (input.hasNextLine()){
      DisTXT = DisTXT  + "\n";
}
}
display.setText(DisTXT);
input.close();
 }


else
{
if (filesize< 5){
 display.setText("File NAME ERROR: NAME IS TOO SHORT");
} 
else {
display.setText("File NAME ERROR: NAME IS TOO LONG");
}

 }
}
catch (NullPointerException e) { 
display.setText("File not found");
}
}

public static void main(String[] args) {
   new FileLoader();

}
}

但由于某种原因,它找不到添加方法,我一直认为它是由进口自动拾取的,是不是这样呢?怎么能ix这个? 对不起,如果这是一个相当无聊的问题,那么计算机科学的这一部分对我来说是完全新的。

我也用过

layout = new FlowLayout();
setLayout(layout);

在我们上一个实验室中,但它是网格布局。它最后一次工作,但不是这一次,有人可以解释为什么?提前谢谢

1 个答案:

答案 0 :(得分:0)

代码中发生的事情只是继承问题。如果使用JFrame扩展类,则将其所有方法借用到新的子类中。以下示例1:

public class GUIappExtend extends JFrame
{
    public static void main(String[] args) 
    {
        new GUIappExtend();
    }

    public GUIappExtend() 
    {
        setSize(200, 100);
        setVisible(true);
    }
}

在您管理显示的主类中创建JFrame字段的另一个选项。以下示例2:

public class GUIappNoExtend
{
    public static void main(String[] args) 
    {
       new GUIappNoExtend();
    }
    public GUIappNoExtend() 
    {
        JFrame frame = new JFrame();
        frame.setSize(200, 100);
        frame.setVisible(true);
    }
}

正如您所看到的,在示例1中,我可以调用setSize()函数,而无需指定我调用的字段。这是因为我继承了这些&#34;隐藏&#34;函数进入子类。在示例2中,我不能只调用函数setSize(),因为类没有拥有该名称的函数。我可以改为从JFrame创建一个字段,并在那里调用setSize()函数。

对于应用程序中的add()和setLayout()函数,所有这些也是如此。我希望这能让你明白这个问题。

TL; DR - 在这种情况下,add()和setLayout()函数属于JFrame类。如果源类拥有该名称的函数,则只能调用这些函数。