2013-07-09 4 views
0

Мой код дублирует создание главного экрана, когда я нажимаю кнопку поиска. Событие поиска должно открывать только один новый фрейм с текстовым полем для ввода запроса. Создание другого фрейма вызывает это дублирование или это какая-то ошибка? Я попытался использовать mainFrame для загрузки даты searchPane (p1 в коде), но когда я это делаю, это решает мою проблему с окном, но defaultCloseOperation() в Search Windows вызывает закрытие всей программы - как я могу решить эту ситуацию?JFrame дублирование на главном экране

заранее спасибо

SearchScreen

import java.awt.Color; 
import java.awt.GridLayout; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class SearchScreen extends MainScreen{ 

    JButton btsearch; 
    JLabel lbsearch; 
    protected JTextField txtsearch; 
    JPanel p1; 
    protected JFrame searchFrame = new JFrame(); 

    public SearchScreen(){ 

    //Button Creation 
     btsearch= new JButton("Search"); 

    //Label Creation 
     lbsearch= new JLabel("Type Keywords in english to be searched below:"); 

    //TextBox 
     txtsearch= new JTextField(); 

    //Pane Creation 
     p1=new JPanel(); 
      p1.setBackground(Color.gray); 

    //Pane Components 
     p1.add(lbsearch); 
      p1.add(txtsearch); 
       p1.add(btsearch); 

    //JFrame Layout Setup 
     p1.setLayout(new GridLayout(3,3)); 

      btsearch.setEnabled(true); 

    //Adding JPaneel  
     searchFrame.add(p1); 

    //JFrame Setup 
     searchFrame.setTitle("SHST"); 
      searchFrame.setSize(400, 400); 
       searchFrame.setVisible(true); 
        searchFrame.setDefaultCloseOperation(1); 

    } 

} 

В начало

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import java.awt.event.WindowListener; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.JPanel; 
import javax.swing.JTabbedPane; 

public class MainScreen implements ActionListener { 


    JMenuBar bar; 
    JMenu file, register; 
    JMenuItem close, search; 
    JPanel entrance = new JPanel(); 
    JFrame mainFrame = new JFrame(); 

    public MainScreen() 
    { 

     bar= new JMenuBar(); 
     file= new JMenu("File"); 
      register= new JMenu("Search"); 

     close= new JMenuItem("Close"); 
      close.addActionListener(this); 

     search= new JMenuItem("Request Query"); 
      search.addActionListener(this); 

     //mainFrame Setup 
     bar.add(file); 
      bar.add(register); 
       file.add(close); 
        register.add(search); 

      mainFrame.setExtendedState(mainFrame.getExtendedState() | mainFrame.MAXIMIZED_BOTH); 
       mainFrame.setTitle("SHST"); 
        mainFrame.setJMenuBar(bar); 
         mainFrame.setDefaultCloseOperation(0); 
          mainFrame.setVisible(true); 

          WindowListener J=new WindowAdapter(){ 
            public void windowClosing(WindowEvent e){ 
            System.exit(0); 
            } 
           }; 

           mainFrame.addWindowListener(J); 

} 

    public void actionPerformed(ActionEvent e){ 
     if(e.getSource()==close){ 
      System.exit(0); 
    } 

      if(e.getSource()==search){ 
       SearchScreen s= new SearchScreen(); 

      } 

public static void main (String[] args){ 

     MainScreen m= new MainScreen(); 

    } 

     } 

ответ

1

Ваш вопрос здесь

if(e.getSource()==search){ 
        SearchScreen s= new SearchScreen(); 

       } 

Использование реализации наследования dangereous, SearchScree n - это MainScreen, тогда конструктор этого класса всегда вызывается.

+0

ow - это было быстро; теперь это сработало, но я думаю, что u означало «Использование hertiance» нет? Потому что я удалил езда с сайта searchScreen и теперь работает как charme; D –

+0

@ VictorOliveira im не английский родной динамик, может быть, я создаю слова, которые не существуют xD .. Я имею в виду, что использование конкретного наследования (с конкретными классами) опасно и редко, что необходимо – nachokk

+0

@nachkokk извините за задержку, первый раз в голосовании я должен подождать еще 5 минут, чтобы согласиться, и мне пришлось покинуть компьютер - но на самом деле спасибо чувак hehehe –

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