我们刚刚开始在计算机科学课上学习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);
在我们上一个实验室中,但它是网格布局。它最后一次工作,但不是这一次,有人可以解释为什么?提前谢谢
答案 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类。如果源类拥有该名称的函数,则只能调用这些函数。