본문 바로가기
학원수업/12월

12/12 숙제 풀이

by 코딩마스터^^ 2022. 12. 13.

부모창을 켰을때 자식창이 뜨게하고싶다.

그러려면 이른 인스턴스화를 해야한다.

 

나의 시도-미완

package dev_java.address;
//목표 생성자 초기화 알기
//클래스를 쪼갰을때 스태틱을 사용하지 않고 생성자를 사용하기

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;

public class AddressBook implements ActionListener {

  //선언부
  AddressDialog adb =new AddressDialog(this);
  JFrame jf = new JFrame();
  JPanel jp = new JPanel();
  JTable jt = new JTable();

  JButton jb[]=new JButton [4];
  String jb_label[]={"조회","입력","수정","상세보기"}
  // JButton jb1 = new JButton("조회");
  // JButton jb2 = new JButton("입력");
  // JButton jb3 = new JButton("수정");
  // JButton jb4 = new JButton("상세보기");

  AddressDialog aDialog=new AddressDialog();




  //생성자
  public AddressBook(){
    initDisplay();
  }

  //화면처리부
  public void initDisplay(){
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setTitle("주소록 Ver1.0");
    jf.setSize(500,450);
    jf.setVisible(true);
    for(int i=0;i<4;i++){
      jp.add(jb[i]);
    }
    jp.setLayout(new FlowLayout(FlowLayout.LEFT, 10,20));
    jf.add(jp);

  

  }

  //메인메소드

  public static void main(String[] args) {
    new AddressBook();
  }


  @Override
  public void actionPerformed(ActionEvent e) {
    Object obj=e.getSource(true);
    if(jb[0]==obj){
      jf.append()

    }
  }
  
}

 

package dev_java.address;

import javax.swing.JDialog;//팝업창 띄우기

public class AddressDialog {
  JDialog jdg=new JDialog();

  public AddressDialog(){//생성자
    jdg.setTitle("입력| 수정| 상세보기");
    jdg.setSize(400,350);
    jdg.setVisible(true);//이게 포인트????
  }
  
  
}

 

해결 못한 부분

1. 부모창 자식창과의 연결

2. 부모창의 버튼을 눌렀을때 그에 맞는 자식창의 반응

 

해결위한 시도

package dev_java.address;
//목표 생성자 초기화 알기
//클래스를 쪼갰을때 스태틱을 사용하지 않고 생성자를 사용하기

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;

public class AddressBook implements ActionListener {

  //선언부
  AddressDialog adb =new AddressDialog();
  JFrame jf = new JFrame();
  JPanel jp = new JPanel();
  JTable jt = new JTable();

  JButton jb[]=new JButton [4];
  String jb_label[]={"입력","조회","수정","상세보기"};

  // JButton jb1 = new JButton("입력");
  // JButton jb2 = new JButton("조회");
  // JButton jb3 = new JButton("수정");
  // JButton jb4 = new JButton("상세보기");

  AddressDialog aDialog=new AddressDialog();




  //생성자
  public AddressBook(){
    initDisplay();
  }

  //화면처리부
  public void initDisplay(){
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setTitle("주소록 Ver1.0");
    jf.setSize(500,450);
    for(int i=0;i<4;i++){
      jb[i]= new JButton(jb_label[i]);//버튼에 이름표/라벨을 달아줘야한다.*****
      jp.add(jb[i]);//패널에 버튼을 붙임
      jb[i].addActionListener(this);//버튼에다가 액션리스너를 넣어줘야된다.****** 그리고 나를 넣어줘야된다.*****
    }
    jp.setLayout(new FlowLayout(FlowLayout.LEFT, 10,20));
    jf.add("North", jp);//프레임을 북쪽으로 붙여주기
    jf.setVisible(true);//****순서가 중요*** 다 추가하고 보이게 해야된다.
    
  

  }

  //메인메소드

  public static void main(String[] args) {
    new AddressBook();
  }


  @Override
  public void actionPerformed(ActionEvent e) {
    Object obj=e.getSource();
    if(jb[0]==obj){
      adb.jdg.setVisible(true);
      adb.jdg.setTitle("입력");
    }
    if(jb[1]==obj){
      adb.jdg.setVisible(true);
      adb.jdg.setTitle("조회");
    }
    if(jb[3]==obj){
      adb.jdg.setVisible(true);
      adb.jdg.setTitle("상세보기");
    }

  }
  
}

 

package dev_java.address;

import javax.swing.JDialog;//팝업창 띄우기

public class AddressDialog {
  JDialog jdg=new JDialog();

  public AddressDialog(){//생성자
    // jdg.setTitle(); 없어도 된다. 오버라이드에서 만들었으므로
    jdg.setSize(400,350);
    jdg.setVisible(false);//이게 포인트????
  }
  
  }

선생님의 풀이

버튼은 메인에 있지만 눌렀을때 서브의 settitle(true/false)여기가 바뀌어야 된다.

파라미터는 하나는 스트링 하나는 false

 

반환타입이 필요한가?

package dev_java.address;
//목표 생성자 초기화 알기
//클래스를 쪼갰을때 스태틱을 사용하지 않고 생성자를 사용하기

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;

public class AddressBook_dap implements ActionListener {

  //선언부
  AddressDialog adb =new AddressDialog();
  JFrame jf = new JFrame();
  JPanel jp = new JPanel();
  JTable jt = new JTable();

  JButton jb[]=new JButton [4];
  String jb_label[]={"입력","조회","수정","상세보기"};//이름표 달아주기

  // JButton jb1 = new JButton("입력");
  // JButton jb2 = new JButton("조회");
  // JButton jb3 = new JButton("수정");
  // JButton jb4 = new JButton("상세보기");

  AddressDialog aDialog=new AddressDialog();




  //생성자
  public AddressBook_dap(){
    initDisplay();
  }

  //화면처리부
  public void initDisplay(){
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setTitle("주소록 Ver1.0");
    jf.setSize(500,450);
    for(int i=0;i<4;i++){
      jb[i]= new JButton(jb_label[i]);//버튼에 이름표/라벨을 달아줘야한다.*****
      jp.add(jb[i]);//패널에 버튼을 붙임
      jb[i].addActionListener(this);//버튼에다가 액션리스너를 넣어줘야된다.****** 그리고 나를 넣어줘야된다.*****
    }
    jp.setLayout(new FlowLayout(FlowLayout.LEFT, 10,20));//가로로 붙여주는 친구
    jf.add("North", jp);
    jf.setVisible(true);//****순서가 중요*** 다 추가하고 보이게 해야된다.
    
  

  }

  //메인메소드

  public static void main(String[] args) {
    new AddressBook();
  }


  @Override
  public void actionPerformed(ActionEvent e) {
    Object obj=e.getSource();
    if(jb[0]==obj){
      // adb.jdg.setVisible(true);
      // adb.jdg.setTitle(jb_label[0]);//배열의 값를 가져와 "입력"
      adb.setDialog(jb_label[0], true);
    }
    if(jb[1]==obj){
      // adb.jdg.setVisible(true);
      // adb.jdg.setTitle(jb_label[1]);
      adb.setDialog(jb_label[1], true);
    }
    
    if(jb[3]==obj){
    //   adb.jdg.setVisible(true);
    //   adb.jdg.setTitle(jb_label[3]);
    adb.setDialog(jb_label[3], true);
    }

  }
  
}

재사용성을 위해 다이얼로그에 메소드를 따로 만들어준다.

package dev_java.address;

import javax.swing.JDialog;//팝업창 띄우기

public class AddressDialog {
  JDialog jdg=new JDialog();

  public AddressDialog(){//생성자
    // jdg.setTitle(); 없어도 된다. 오버라이드에서 만들었으므로
    jdg.setSize(400,350);
    jdg.setVisible(false);//이게 포인트????
  }
  
  public void setDialog(String title, boolean isView){
    jdg.setTitle(title);
    jdg.setVisible(isView);
  }
  
}

 

테이블을 넣어보기
 

 

댓글