2015-07-10 94 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 **。 –