Java

Java 일지 #8 Frame(2)

uni5948 2021. 8. 26. 12:31

8.삭제, 수정 구현

-변수 수정

 *기존 코드에서는 변수를 사용하는 순간에 만들었는데 이런 것 보다는 상단에 사용할 변수를 만들어 두자

//변수 만들기 초기값은 0, null 

    private JLabel a1 = null;

    private JButton button1 =null;

    private JButton button2 =null;

    private MyTable table = null;

 **ex)

 기존 code => JLabel a1 = new JLabel("위쪽");

 변수 생성 후 code => a1 = new JLabel("위쪽");

 

 *기존 MyPanel3.java의 목록 불러오기 코드 수정

ItemDB db = new ItemDB();

        List<Itemlist = db.findAllItems();

        MyTable table = new MyTable(list); 

        JScrollPane jscp1 = new JScrollPane(table); 

        this.add(jscp1BorderLayout.CENTER);

에서 

List<Itemlist = db.findAllItems();

  MyTable table = new MyTable(list); 

해당 code 삭제

 **MyTable.java code 수정

 MyTable 생성자 수정

 기존 code

 // 생성자 새로 생성

    public MyTable(List<Itemlist) {

        this.list = list;

 

        // 스스로 데이터를 추가하는 방법

        this.setModel(setData());

    }

에서

  // 생성자 새로 생성

    public MyTable() {

        this.db = new ItemDB();

        this.list = db.findAllItems(); 

 

        // 스스로 데이터를 추가하는 방법

        this.setModel(setData());

    }

으로 수정하기

 

-수정, 삭제 버튼 활성화(MyPanel3.java)

 *버튼 클릭 시 나타날 반응 구현

    //여기가 버튼 클릭 같은 이벤트 발생 시 자동으로 호출되는 메소드

    @Override

    public void actionPerformed(ActionEvent e) {

        if(e.getSource() == button1 ) { //수정버튼 클릭

            System.out.println("수정");

        }

        else if(e.getSource() == button2) { //삭제버튼 클릭

            System.out.println("삭제");

        }

    }

 *기존 버튼에 이벤트 사용 등록 입력

JPanel p1 = new JPanel(); //임시 패널

        p1.setLayout(new FlowLayout()); //순차적으로 배치

        button1 = new JButton("수정");

        button2 = new JButton("삭제");

        button1.addActionListener(this); //이벤트 사용등록

        button2.addActionListener(this); //이벤트 사용등록

        p1.add(button1);

        p1.add(button2);

        this.add(p1BorderLayout.SOUTH); //아래쪽

 

*버튼 활성화 확인

버튼 클릭 후 터미널에 출력값 확인

-삭제 구현

 **삭제, 수정을 하게 되면 내용이 변경되는데 기존의 코드를 사용하면 할 때마다 다시 불러와야 한다.

  그래서 삭제, 수정 코드 입력 시 마지막에 새로운 데이터를 불러오는 코드도 같이 입력해 주자.

 *삭제 코드 입력(MyTable.java)

 //데이터 삭제

    public void deleteItems() {

        //선택된 라인의 정보, 개수

        int[] rows = this.getSelectedRows();

        if(rows.length <= 0){ //선택하지 않고 삭제 버튼 클릭 시

            JOptionPane.showMessageDialog(this"항목을 선택하세요""항목선택"JOptionPane.WARNING_MESSAGE);

        }

        for(int row : rows){

            String code = this.getModel().getValueAt(row0).toString();

            db.deleteItem(Integer.parseInt(code) );

            //메소드 호출방법

            //클래스 obj = new클래스()

            //obj.메소드()

 

            //새로운 데이터를 가져와서 다시 생성

            this.list = db.findAllItems(); 

            this.setModel(setData());

        }

    }

 **중간에 if문을 삽입해 선택하지 않고 삭제 버튼 클릭 시 경고창이 나타나도록 한다.

 **삭제 완료 후 데이터를 새롭게 불러올 수 있게 한다.

*삭제 코드 입력(MyPanel.java)

    //여기가 버튼 클릭 같은 이벤트 발생 시 자동으로 호출되는 메소드

    @Override

    public void actionPerformed(ActionEvent e) {

        if(e.getSource() == button1 ) { //수정버튼 클릭

            System.out.println("수정");

        }

        else if(e.getSource() == button2) { //삭제버튼 클릭

            System.out.println("삭제");

        }

    }

 이전의 코드에서  System.out.println("삭제"); 부분을 지우고

  else if(e.getSource() == button2) { //삭제버튼 클릭

            //확인 0, 취소 2

            int ret = JOptionPane.showConfirmDialog(null,"삭제하시겠습니까?","삭제",JOptionPane.OK_CANCEL_OPTION);

            if(ret == 0){

                table.deleteItems();

            }

        }

    }

로 대체 한다.

 **삭제 시 바로 삭제되지 않고 삭제 할 지를 묻는 알림창을 넣어 준다.

 *삭제 구현

선택하지 않았을 때 경고문
삭제 버튼 클릭 시 삭제 확인 알림창
삭제 확인 후 db에도 삭제 되었는지 확인

-수정 구현

*수정 코드 입력(MyTable.java)

  //데이터 수정

    public void updateItems() {

        for(int i=0i<this.getRowCount(); i++){

            String code = this.getModel().getValueAt(i0).toString();

            String name = this.getModel().getValueAt(i1).toString();

            String text = this.getModel().getValueAt(i2).toString();

            String price = this.getModel().getValueAt(i3).toString();

            String quantity = this.getModel().getValueAt(i4).toString();

 

            Item item = new Item//Item.java의 타입과 동일하게 입력

                Integer.parseInt(code), 

                name

                text

                Integer.parseInt(price), 

                Long.parseLong(quantity) );

            db.updateItem(item);

        }

        //새로운 데이터를 가져와서 다시 생성

        this.list = db.findAllItems(); 

        this.setModel(setData());

    }

 **Item에서 code 등 정보를 받을 때 Item.java와 타입을 동일하게 입력해야 한다.

 *수정 코드 입력(MyPanel.java)

 //여기가 버튼 클릭 같은 이벤트 발생 시 자동으로 호출되는 메소드

    @Override

    public void actionPerformed(ActionEvent e) {

        if(e.getSource() == button1 ) { //수정버튼 클릭

            System.out.println("수정");

        }

        else if(e.getSource() == button2) { //삭제버튼 클릭

            System.out.println("삭제");

        }

    }

 삭제와 마찬가지로 System.out.println("수정"); 을 지우고

  if(e.getSource() == button1 ) { //수정버튼 클릭

            table.updateItems();

        }

을 입력한다.

 *수정 구현(id 10016)

기존 id 10016
수정 후 id 10016