2015-07-10 2 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));

Я получил те же результаты. Thanks Alb

+0

Ваш вопрос непонятен, что происходит, когда вы закрываете jframe? Сколько фреймов открывается при нажатии строки? –

+0

Можете ли вы показать еще какой-нибудь код? Ваши методы должны работать. –

+0

Вам действительно нужно открыть JFrame, или вам нужен JWindow? – user489041

ответ

0

Настройка работы по умолчанию для выхода при закрытии будет работать. Убедитесь в том, чтобы установить, что для jframes вы собираетесь закрыть

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

Использование dipose() для JFrame вы открываете по щелчку может также работать

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

+0

Ухммм, он сказал, что использует утилиту, и это не работает. –

+0

Я предполагаю, что он использует Dipose основного кадра, а не тот, который открывается, трудно сказать, нет ли кода. –

+0

@Chen dispose - тот, который открывается – gocan76

0

При создании нового JFrames от вашего текущего JFrame, убедитесь, что у него есть эта часть кода

setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); 

Note: Не делайте новые JFrames того же class, создайте отдельный экстренный 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()

пожалуйста, дайте мне знать, если это поможет вам. или если вы получите решение, пожалуйста, поделитесь с нами. thanks bro

+0

Случайные догадки - это всего лишь «шум», пока мы не узнаем больше о проблеме. * «немного кода будет очень полезно» * OP уже отправил «немного кода». Нам нужны ** MCVE или SSCCE. ** –

Смежные вопросы