2013-07-09 1 views
0

검색 버튼을 누르면 내 코드가 기본 화면 생성을 복제합니다. 검색 이벤트는 텍스트 입력란에 새 프레임 하나만 열어야합니다. 다른 프레임이 만들어지면이 중복이 발생합니까? 아니면 일종의 버그입니까? mainPrame을 사용하여 searchPane (코드에서 p1)의 날짜를 업로드하려고 시도했지만이 작업을 수행하면 창의 문제가 해결되지만 검색 창의 defaultCloseOperation()은 전체 프로그램을 닫습니다. 어떻게이 상황을 해결할 수 있습니까? 사전에메인 화면의 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); 

    } 

} 

MainScreen

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

문제가 상속 구현 dangereous이다 사용 여기

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

       } 

이다하는 SearchScree n은 MainScreen이고,이 클래스의 생성자는 항상 호출됩니다.

+0

아야 - 빨리되었습니다. 이제는 효과가 있었지만, 나는 "hertiance를 사용하는 것"이 ​​아니라고 생각했다. 왜냐하면 searchScreen에서 가져온 heritance를 제거하고 charme처럼 작동하기 때문입니다. D –

+0

@VictorOliveira 영어 원어민이 아니기 때문에 xD가 존재하지 않는 단어를 만들 수도 있습니다. 구체적인 클래스를 사용하여 구체적인 상속을 사용한다는 의미입니다. 위험하고 그것은 희귀하다. 희박하다. – nachokk

+0

@nachkokk 지연으로 인해 유감스럽게 생각한다. 투표에 나서기까지 5 분을 더 기다려야했다. 컴퓨터를 떠나야했다. 그러나 정말로 감사했다. hehehe –

관련 문제