2015-07-10 88 views
0

我正在jtable上工作。对于此表的每一行(当我选择它时),我需要打开一个新的jframe。 打开应用程序后,我使用一个按钮进行简单的搜索,我第一次选择一行,它工作正常; 当我关闭刚刚打开的这个新的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();               
       } 
       }); 
} 

我尝试添加的代码follwing线插入SimpleSwingBrowser类

dispose(); 

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

我获得了相同的结果。 谢谢Alb

+0

你的问题不清楚,关闭jframe时发生了什么?单击某一行时打开了多少个框架? –

+0

你能展示一些更多的代码吗?你的方法应该工作。 –

+0

你真的需要打开一个JFrame吗,还是你需要一个JWindow? – user489041

回答

0

设置默认操作退出关闭将工作。一定要设置为你打算关闭

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

使用dipose()为你点击打开的JFrame的jframes也可以工作

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

+0

嗯,他说他使用的是处置,它不起作用。 –

+0

我假设他正在使用主框架的Dipose,而不是被打开的那个,很难判断是否没有代码。 –

+0

@Chen处置被打开 – gocan76

0

当您创建从当前JFrameJFrames,确保它有这段代码

setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); 

Note:不要使新的JFramesclass相同,为此创建一个单独的延伸JFrame

1

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

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

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

有点代码会对调试问题很有帮助。 我想你应该命名实例空当您使用方法

dispose()

请让我知道,如果这可以帮助您。或者如果您获得解决方案,请与我们分享。感谢兄弟

+0

在我们发现更多关于这个问题之前,随机猜测只是'噪声'。 *“一段代码会非常有帮助”* OP已经发布了“一段代码”。我们需要的是** MCVE或SSCCE **。 –