netbeans:链接应用程序和视图?

时间:2010-06-22 06:42:53

标签: java swing netbeans

在netbeans IDE中创建gui应用程序时,

它生成2个文件,App.java和View.java

可以在view.java中包含应用程序逻辑吗?我的直觉告诉我这是一个坏主意。但是,我不知道如何调用方法或以某种方式“钩”App.java与View.java

因此,我不必将所有代码都放在按钮的actionPerformed上,而只是从App.java中插入一个方法

我对Java很新。如果有人有关于Netbeans的好教程或书籍,我想我会买它。

2 个答案:

答案 0 :(得分:1)

另一个好方法是学习和使用Action Classes。见How to Use Actions

这样的Action类封装了一个工作单元(“login”,“print”,...),你只需将它附加到一个或多个gui元素(JButton,JMenu,...)。如果您使用此概念,您的应用程序可以更容易地增长。分离应用程序逻辑,GUI和数据总是一个好主意。

不完整的例子

public class ShowListAction extends AbstractAction {

JTextArea listArea;
YourListHandler listHandler;

public ShowListAction() {
    this.putValue(Action.NAME,"Show List");
    // this.putValue(Action.SMALL_ICON, yourIcon); // You can set various Properties for your Action...
    this.setEnabled(enabled); // You can enable/disable the Action and hence any JButton connected to it ....
}

public void setListArea(JTextArea listArea) {
    this.listArea = listArea;
}

public void setListHandler(YourListHandler listHandler) {
    this.listHandler = listHandler;
}

public void actionPerformed(ActionEvent e) {
  // Here comes the actual work

  // list with data injected from another class which handles that
  List<String> list = listHandler.getNamesList();
  // output - correct
  for (String s : list) {
    listArea.append(s);
  }
}

}

要使用此功能,您需要在视图中创建/获取操作的实例,并将其附加到例如带有

的JButton
yourButton.setAction(theAction)

答案 1 :(得分:0)

取决于有多少代码。如果您只使用少量UI组件来完成整个应用程序,那么您可以将逻辑放入视图中。

但是在略大(实际上几乎每个)应用程序中,您需要定义自己的类,然后创建它们的实例。如果是这样,请尝试将所有逻辑行为放在某些类中,然后在View类中创建实例。

例如,如果你想在JTextArea中写一些列表,那么在那里创建它并将其写在那里并不是很好。

糟糕的做法:

public void actionPerformed(java.awt.event.ActionEvent evt) {
  // whole logic done here - bad
  List<String> list = new ArrayList<String>();
  list.add("John");
  list.add("Mike");
  list.add("Joe");
  // output - correct
  for (String s : list) {
    jTextArea.append(s);
  }
}

好方法:

public void actionPerformed(java.awt.event.ActionEvent evt) {
  // list with data injected from another class which handles that
  List<String> list = new ListHandler().getNamesList();
  // output - correct
  for (String s : list) {
    jTextArea.append(s);
  }
}