JAVA

[JAVA] GUI / 계속 추가예정

sian han 2022. 4. 11. 21:28

※ GUI 작업

 

콤보박스에 추가 하는 방법

 

1. 콤보박스의 addItem 메서드 이용해서 추가하기 (기존+신규)

  - 단순항목추가

cbPdName.addItem("java");
cbPdName.addItem("Spring");
cbPdName.addItem("Oracle");

 

 

2. 배열 모델(model) 이용

  - model 로 따로 분리해서 작업하는 것 : 콤보 - 모델 - 데이터

  - 기존에 있었던것 보두 삭제되고 추가되는 거임

 

 String[] arr = {"사과","배","귤"};
DefaultComboBoxModel cModel = new DefaultComboBoxModel(arr);
cbPdName.setModel(cModel);  // 콤보랑 데이터를 모델로 연결

 

 

3. vector 모델 이용 

  - vector = arraylist 이전버전

  - 기존에 있었던것 보두 삭제되고 추가되는 거임

Vector<String> vec = new Vector<>();
        vec.add("봄");
        vec.add("여름");
        vec.add("가을");
        
        DefaultComboBoxModel cModel2 = new DefaultComboBoxModel(vec);
        cbPdName.setModel(cModel2);

 

 

 

부모frame 버튼 클릭했을 때 자식 frame 띄우기

  -  자식이 부모에 접근해서 뭔가 작업해야됨 = > 부모주소를 넘기자 = this 를 넘기자

 

부모 LoginGUI

else if(e.getSource()==btJoin){ //회원가입 창 띄우기
MemberFrame f = new MemberFrame(this); // 로그인주소 = this ★자기자신 주소에 들어있음
f.setVisible(true);

자식 MemberFrame

public MemberFrame(LoginGUI loginGui){   // LoginGUI 에서 this 로 넘겼으니까 LoginGUI 로 받아줘야함
        this();                         //★ 이거 매우 중요함 절대 빼먹으면 안됨 !
        this.loginGui=loginGui;
    }

 

부모 MemberFrame

else if(e.getSource()==btDup){
            SubUserid f = new SubUserid(this,tfUserid.getText()); //자기자신을 자식에게 넘겨줄꺼니까 this 사용
            //userid를 subsuerid 창으로 보내는거
            f.setVisible(true);

자식 SubUserid

 SubUserid(MemberFrame memberFrame, String userid) {
        this();
        
        this.memberFrame = memberFrame;
        tfUserid.setText(userid);
    }

 

 

자식에서 X 했을 때 자식의 창만 닫히게

setDefaultCloseOperation

private void init() {
	this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }

 

 

 

 

검색결과 多 => List 로 묶어서 테이블에 뿌리기

 private String[] colNames={"번호","상품명","가격"};
private DefaultTableModel model2=new DefaultTableModel();
...

else if(e.getSource()==btSearch){
            try {
                int price1 = Integer.parseInt(tfPrice1.getText());
                int price2 = Integer.parseInt(tfPrice2.getText());
                
                Vector<PdDTO>list = pdDao.selectByPrice(price1, price2);
                
                String [][] data = new String[list.size()][colNames.length];
                for(int i =0 ; i<list.size();i++){
                    
                    PdDTO dto = list.get(i);
                    
                    data[i][0] = (dto.getNo()+"");
                    data[i][1]= (dto.getPdName());
                    data[i][2] =(dto.getPrice()+"");
                    data[i][3]=(dto.getRegdate().toString());
                    data[i][4]= (dto.getDescription());
                    
                }
                
                model2.setDataVector(data, colNames);
                table2.setModel(model2);
            } catch (SQLException ex) {
                Logger.getLogger(ProductGUI.class.getName()).log(Level.SEVERE, null, ex);
            }
            
        }

 

 

 

 

endBunji가 있을 때만 startBunji와 EndBunji를 연결해서 보여준다.

String startBunji = dto.getStartbunji();
            String endbunji = dto.getEndbunji();
            String bunji = startBunji;
            if (endbunji!=null && !endbunji.isEmpty()) { //end 번지가 null 이 아닐경우
                bunji =  startBunji + "~" + endbunji; // start 와 end 를 ~ 로 연결해서 출력
            }
            data[i][4] = bunji;
        }

 

 

 연결해서 dto에 넣은 것 다시 split 해서 tf 및 cb 에 뿌리기

- 전화번호 cb + tf + tf

   - setSelectedItem(arr[0]); : 콤보에 뿌릴때

 String hp = dto.getHp();
        if(hp!=null && !hp.isEmpty()){	//null체크 필수
            String [] arr =hp.split("-");
            cbHp1.setSelectedItem(arr[0]); // 010 
            tfHp2.setText(arr[1]); //1111
            tfHp3.setText(arr[2]); //1111
        }

 

 

 - 이메일 tf + cb + tf

    - 도메인이 콤보박스 안에있으면 콤보박스에서 선택하고

      콤보박스에 없으면 콤보박스는 직접입력으로 선택해놓고 tfemail3 에 도메인 뿌리기

boolean existEmail=false;
        String email=dto.getEmail();  //h@nate.com, h@herb.com, null
        if(email!=null && !email.isEmpty()){
            String[] arr=email.split("@");
            tfEmail1.setText(arr[0]);
            
            String email2 = arr[1]; //nate.com, herb.com
            for(String s : emailArr){ //배열에서 하나하나 꺼내서 비교 for문
                if(email2.equals(s)){    
                    existEmail=true; //배열 목록안에 존재
                    break;
                }
            }//for
            
            if(existEmail){ 
                cbEmail2.setSelectedItem(email2);
            }else{
                cbEmail2.setSelectedItem("직접입력"); //콤보에 "직접입력" 이라고 써져있는걸 선택해라
                tfEmail3.setText(email2);
            }
        }

 

 

 

 

 

각 컬럼 사이즈 조절

table.getColumnModel().getColumn(0).setPreferredWidth(40);
        table.getColumnModel().getColumn(1).setPreferredWidth(120);
        table.getColumnModel().getColumn(2).setPreferredWidth(60);

 

 

 

가격 오른쪽 정렬

DefaultTableCellRenderer dtcr = new DefaultTableCellRenderer();
        dtcr.setHorizontalAlignment(SwingConstants.RIGHT);
        table.getColumnModel().getColumn(2).setCellRenderer(dtcr);

 

 

 


 

※ DAO

DAO 에서 Sql문 like 사용하기

  - 특정 동 검색

  - select * from zipcode where dong like '논현동'

  - ' ? ' => '%' || ? || '%'

String sql = "select * from zipcode where dong like '%'||?||'%'";

  

regdate 값 timestamp 로 찍히게

 

  - DTO 에서 : 생성자에 넣어줘야 함 / getter setter / toString 다 넣어야함

public PdDTO(int no, String pdName, int price, Timestamp regdate, String description) {
        this.no = no;
        this.pdName = pdName;
        this.price = price;
        this.regdate = regdate;
        this.description = description;
    }

 

  - DAO 에서 : regdate 생략해도 됨

String sql="insert into pd(no, pdname, price, description)"
					+ " values (pd_seq.nextval, ?,?, ?)";

 

  - GUI 에서 : 위에서 받아온 값만 다시 받아서 ..엥 여기서도 regdate 따로 언급 안하네 도대체 어떻게 들어간거지 ? 

    DTO 에서 timestamp 로 선언된것만으로도 들어가나봄

private void addData() throws SQLException {
        //1
        String pdName=tfPdName.getText();
        String price=tfPrice.getText();
        String desc=taDesc.getText();
        
        //2
        PdDTO dto = new PdDTO();
        dto.setPdName(pdName);
        dto.setPrice(Integer.parseInt(price));
        dto.setDescription(desc);
        int cnt=pdDao.insertPd(dto);

 

 

setTitle

private void init() {
        setTitle("로그인");
    }

 

 

 

 

 

 

 

 

 

 

 

 

'JAVA' 카테고리의 다른 글

[JAVA] Thread 스레드  (0) 2022.04.14
[JAVA] IO  (0) 2022.04.13
[JAVA] AWT.EVENT  (0) 2022.04.06
[JAVA] AWT  (0) 2022.04.05
[JAVA] DTO / DAO  (0) 2022.04.04