繁体   English   中英

从Java Swing读取文件

[英]Reading a file from Java Swing

我在寻找结构建议而不是特定的编码。 我的程序有一个Main类,该类初始化一个GUI,然后在放置将要读取的文件的名称之后,单击一个按钮。 我在侦听器上附加了相应的mouseClicked事件处理程序,并在该处理程序内执行了所有例程。

这似乎不是一个好方法,是吗? 这样行事通常吗? 我所有的程序都在事件处理程序中吗?

这样行事通常吗?

UI编程是基于事件的 Swing。 将其扭曲为其他任何样式都不会令您更轻松。 您可能要说的是,您应该最小化该UI部分中的代码。

这意味着您不应该将UI绑定到逻辑上,因此会造成密集耦合。 在此示例中,应将文件读取代码移到另一个方法中,最好是在另一个类中。

我所有的程序都在事件处理程序中吗?

要回答这个特定问题:不,那太可怕了! 可以从那里调用程序,但是不要在事件处理程序中编写代码!

这似乎不是一个好方法,是吗? 这样行事通常吗? 我所有的程序都在事件处理程序中吗?

没错,这不是一个好方法。 相反,应考虑实现模型-视图-控件(MVC)类型的结构或其变体之一。

  • 模型:这是程序的大脑,保持程序状态的大脑。 它不应包含GUI代码,侦听器代码,而应仅包含数据以及数据附带的逻辑。 该模型不应实现处理程序接口
  • 视图:这是GUI,这里是您的Swing组件和相关代码。 该视图不应实现处理程序接口。
  • 控件:这是上述两者之间的连接代码,用于处理用户交互的代码,要求模型更改状态。 可以实现处理程序接口,或者具有可以执行的内部类,或者可以由可以执行的对象组成。 例如,您的控件可以读取文件(在后台线程中),将文本提供给模型,然后模型可以通知视图(或控件-此控件有很多变体)其状态已更改。
  • 顺便说一句:不要给JButton一个MouseListener。 请改用ActionListener。

没有规则 ,只有好的做法 并且从良好实践道德出发,始终建议您将代码分成小块,每个块负责一些工作。

因此,您最好将代码移到事件处理程序之外,并将作业委托给称为readFiles()方法,然后在处理程序中调用后者。

即使此方法可以切成小块,您也可以执行相同的操作,例如,它只能遍历要读取的文件并为每个文件调用readFile()方法:

private void readFiles(Files[] files)
{
  for(File file : files)
  {
    readFile(file);
  }
}

只是一个简单的代码片段,所有内容都应进行更新以遵循您的模型。

  • 首先,可以使用JFileChooser进行文件选择操作,而不是提供文件路径。 特别是因为您正在使用Swing
  • 其次,应该尝试将代码模块化到一定程度,以使代码看起来更容易理解。 因此,您可以创建一个单独的方法来处理文件操作。 您可以从任何事件处理程序调用此函数。 无论是鼠标还是键盘。 这样可以避免代码重复,并可以启用模块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM