0

我的程序打开一个文件,允许您查看或编辑它,然后再次保存。到目前为止,我只有 GUI 布局。

因此,当我尝试编译程序时,出现以下错误:

    FileChooser.java:26: error: <identifier> expected
         fileChooser = newJFileChooser();

我得到了 ^^^ 错误四次,对于我初始化的每个组件一次。

    FileChooser.java:39: error: invalid method declaration; return type required
         public FileChooserGUI() {

尝试创建构造函数时出现此^^^ 错误。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.filechooser.*;

public class FileChooser extends JFrame { //JFrame is a container class in Swing

//declare all components and other variables
private JTextArea textArea; //b
private JButton openFileButton; //c
private JButton saveFileButton;
private JButton clearButton;

//Declare and initialize a JFileChooser object using JFileChooser's
//default constructor.
private JFileChooser fileChooser;
fileChooser = newJFileChooser();

//Declare and initialize a FileNameExtensionFilter object for .txt files.
private FileFilter fileFilter;
fileFilter = new FileNameExtensionFilter("text file", "txt");

//Set the JFileChooser object's current file filter by calling it's
//setFileFilter method and passing it the filter you created in e.
fileChooser.setFileFilter(fileFilter);


//constructor - initialize all components, add them to the container, 
//create listener objects, register them to listen for events
public JFileChooserLabGUI() {

    //call superclass constructor
    super("File Chooser");


    //initialize all components
    textArea = new JTextArea();
    openFileButton = new JButton("Open");
    saveFileButton = new JButton("Save");
    clearButton = new JButton("Clear");

    //create and register the listener object with
    //sources of events (the JButtons in this example)
    listener = new JFileChooserListener();
    openFileButton.addActionListener(listener);
    saveFileButton.addActionListener(listener);
    clearButton.addActionListener(listener);


    //arrange components in the window
    //Create a layout manager object and set this window's
    //layout manager to it
    textPanel = new JPanel();
    textPanel.setLayout(new GridLayout(1,2));
    textPanel.add(textArea);

    buttonPanel = new JPanel();
    buttonPanel.setLayout(new GridLayout(1,3,15,0));
    buttonPanel.add(openFileButton);
    buttonPanel.add(saveFileButton);
    buttonPanel.add(clearButton);
    this.setLayout(new GridLayout(3,1));



    //Add components to the container
    this.add(textPanel);
    this.add(buttonPanel);      


}//end of constructor
}//end of class

我还没有完成侦听器类,但我认为这与仅显示 GUI 以确保布局正确无关?

我注意到当我在同一行中声明和初始化时,我没有收到这四个错误。我初始化有什么问题吗?

4

2 回答 2

1

您正在尝试声明类型的构造函数,JFileChooserLabGUI但该类被声明为FileChooser

public class FileChooser extends JFrame {
    public JFileChooserLabGUI() {
        ...
    }
}

编辑:如前所述,还有其他问题。例如,您不能在方法/构造函数之外有一个简单的赋值语句:

fileChooser = newJFileChooser();

你会想把它放在你的构造函数中,或者作为变量声明的一部分。

...这可能意味着是new JFileChooser(),而不是对方法的调用newJFileChooser()。例如,如果您将其作为声明的一部分:

private JFileChooser fileChooser = new JFileChooser();

对 ,做同样的事情FileFilter,然后移动这一行:

fileChooser.setFileFilter(fileFilter);

进入你的构造函数。

一般来说——特别是如果你对一种语言比较陌生——经常构建你的代码是一个非常好的主意。这样,您在发现错误时就有更好的机会理解错误,因为您只是编写了不正确的代码。哦,在你去的时候也写单元测试。

于 2013-04-16T15:18:10.953 回答
1

我认为有几件事需要纠正

  1. 构造函数名称与类名称不同。

  2. 关于类方法之外的变量赋值:

    • 您必须同时声明和初始化变量。
    • 或(更好的方法)在构造函数中声明和初始化。签出Java 变量声明
  3. 此外,还有小的语法错误。new 和构造函数名称之间应该有空格。

    public FileChooser () {
       //call superclass constructor
       super("File Chooser");
       fileChooser=fileChooser = new JFileChooser();
       fileFilter=new FileNameExtensionFilter("text file", "txt");
       fileChooser.setFileFilter(fileFilter);
    
      ...
       }
    

希望这可以帮助!

于 2013-04-16T15:48:58.063 回答