0

我是 Java 桌面应用程序编程的新手,所以我会很感激一些帮助......

我用构建器添加了框架的组件。

当我单击主框架的按钮时,我将显示如下对话框:

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {  
            BehaviorDialog behavDialog = new BehaviorDialog(this, rootPaneCheckingEnabled);
            behavDialog.setVisible(true);
    }  

我的BehaviorDialog课是这样的:

public class BehaviorDialog extends javax.swing.JDialog {

/**
 * Creates new form BehaviorDialog
 */
public BehaviorDialog(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    initComponents();
    setTitle("Add behavior");
    setLocationRelativeTo(this);
}

/**
 * This method is called from within the constructor to initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is always
 * regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {
//....
}// </editor-fold>                        

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Set the Nimbus look and feel */

    /* Create and display the dialog */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
                BehaviorDialog dialog = new BehaviorDialog(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    @Override
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
    //...
    // End of variables declaration                   
}

我的问题是:

  • 这是启动框架/对话框的正确方法吗?(它有效,但我想确定它是否是最好的方法......)

  • 当我删除invokeLater()in 时main,它似乎以相同的方式工作......我应该保留它还是可以删除它?删除它有什么后果?

提前致谢!

4

2 回答 2

3

我认为您的代码没有任何问题。但是您绝对应该保留invokeLater,因为它会为您处理线程。也就是说,它将这个事件排队,直到其他 AWT 事件完成。这使您可以确保界面保持平稳运行。

但是当然,如​​果您想在其他地方重用这个 JDialog(并且想要做一些小的修改,比如位置和大小),我建议您将 setTitle 和(可能)setLocationRelativeTo 方法移动到调用框架。

于 2012-09-24T11:40:12.523 回答
3

这是可能的方法之一。有些人喜欢为每个对话框/窗口创建子类,因此该类管理自己的布局和(通常)行为。其他人更喜欢委托,即不要通过创建一种创建对话框及其布局的工厂方法来为每个对话框创建子类。我认为这种方法更好,因为它更灵活。您可以更轻松地将代码分层。例如创建主面板的层,创建子面板的子层,将面板放入对话框的更高层等。将来您可以替换处理对话框的层并将相同的布局放入 JFrame 或其他面板等。

关于invokeLater()- 它只是异步运行您的代码。在您的情况下,这没有意义。但它对于需要时间的操作很有用。例如,如果您想执行需要 10 秒单击按钮的操作,您可能希望异步运行此操作。否则,您的 GUI 将冻结 10 秒。

于 2012-09-24T11:44:56.393 回答