繁体   English   中英

关闭一个JFrame

[英]Closing a JFrame

我正在一个jtable上工作。 对于该表的每一行(当我选择它时),我需要打开一个新的jframe。 打开应用程序后,我使用按钮进行了简单搜索,并且第一次选择了一行,一切正常。 当我关闭刚打开的这个新jframe时,问题开始了,我执行另一个搜索,然后选择
另一排 实际上,将打开多个具有相同内容的jframe。 就像发送了多个请求。

此代码在主应用程序中:

private static String QUERY_BASED_ON_SITE2="from WordsToFind a where a.wordToFindName like '";

private void runQueryBasedOnName2() {
     executeHQLQuery2(QUERY_BASED_ON_SITE2 + jTextField14.getText() + "%'");
}

private void executeHQLQuery2(String hql2) {
    try {
        Configuration configuration = new Configuration().configure();
        StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
        SessionFactory factory = configuration.buildSessionFactory(builder.build());
        Session session = factory.openSession();
        Query q2 = session.createQuery(hql2);
        List resultsWords2 = (List) q2.list();
        System.out.println("resultsWords2 ----> " + resultsWords2);
        displayWords2(resultsWords2);
        } catch (ClassNotFoundException ex) {
        Logger.getLogger(ClientEditor.class.getName()).log(Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        Logger.getLogger(ClientEditor.class.getName()).log(Level.SEVERE, null, ex);
    }
}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    if(!jTextField14.getText().trim().equals("")) {
        runQueryBasedOnName2();
    }        

}

private void displayWords2(List resultsWords2) throws ClassNotFoundException, InstantiationException {                       
        Vector<String> tableHeaders2 = new Vector<String>();
        final Vector tableWords2 = new Vector();   
        tableHeaders2.add("Word Id");
        for(Object ow : resultsWords2) {
              WordsToFind words;
              words = (WordsToFind)ow;
              Vector<Object> oneRowWords = new Vector<Object>();
              oneRowWords.add(words.getWordToFindId());
              tableWords2.add(oneRowWords);
                        }     
    jTable4.setModel(new DefaultTableModel(tableWords2, tableHeaders2));         
    jTable4.setAutoCreateRowSorter(true);
    jTable4.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    jTable4.addMouseListener(new MouseAdapter() {
              public void mouseClicked(MouseEvent e) {      
                int selectedRow = jTable4.getSelectedRow();                                
                selectedRow = jTable4.convertRowIndexToModel(selectedRow);
                SimpleSwingBrowser browser = new SimpleSwingBrowser();
                browser.setVisible(true);                                                              
                browser.loadURL("http://www.google.com");
                browser.highlihtWord();                                                          
                }
              });
}

我尝试将下面的代码行添加到SimpleSwingBrowser类中

dispose();

this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));

我得到了相同的结果。 谢谢阿尔布

JFrame使事件关闭,并在关闭时退出。

    JFrame frame= new JFrame()
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    // frame code here ..
    frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));

将默认操作设置为在关闭时退出将起作用。 确保为您打算关闭的jframe设置该值

JFrame frame= new JFrame()
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

对单击打开的jframe使用dipose()也可以

http://chortle.ccsu.edu/java5/notes/chap56/ch56_9.html

当从当前的JFrame创建新的JFrames ,请确保它具有这段代码

setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

Note :不要创建相同classJFrames ,为此要创建单独的扩展JFrame

一点代码对调试您的问题将非常有帮助。 我认为使用方法时应将实例命名为null

dispose()

请让我知道这是否对您有帮助。 或者,如果您有解决方案,请与我们分享。 多谢兄弟

暂无
暂无

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

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