부모창을 켰을때 자식창이 뜨게하고싶다.
그러려면 이른 인스턴스화를 해야한다.
나의 시도-미완
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);
}
}
테이블을 넣어보기
'학원수업 > 12월' 카테고리의 다른 글
12/14 국비학원 자바수업 13회차(생성자, this) (0) | 2022.12.14 |
---|---|
12/13 국비학원 자바수업 12회차(JTable, Static, 접근제한자) (0) | 2022.12.13 |
12/12 국비학원 자바수업 11회차(배열, 추상메소드, 인터페이스) (0) | 2022.12.12 |
12/09 국비학원 자바수업 10회차(equals, 다차원 배열) (1) | 2022.12.09 |
12/08 국비학원 자바수업 9회차(배열, UI API) (0) | 2022.12.08 |
댓글