테이블을 넣어보자!
JTable과 DefaultTableModel을 이용
package dev_java.address;
//목표 생성자 초기화 알기
//클래스를 쪼갰을때 스태틱을 사용하지 않고 생성자를 사용하기
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
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("상세보기");
//BorderLayout중앙에 테이블 추가하기
String[] header= {"번호","이름","H.P"};
//JTable은 양식만 제공할뿐이고 데이터를 담을 클래스는 별도로 필요함
String[][] datas= new String[3][3];
//JTable에 들어갈 실제 데이터셋을 관리할 수 있는 클래스 선언함
//JTable에 보여지는 실제 데이터는 디폴트모델클래스를 통해 제어해야함을 의미
// DefaultTableModel dtm_addr=new DefaultTableModel(datas, header);
DefaultTableModel dtm_addr= new DefaultTableModel(datas, header);
//데이터셋을 JTable생성시 파라미터로 매칭하기
JTable jt=new JTable(dtm_addr);
//디폴트테이블모델의 로우 수가 많아지는 경우 스크롤패인을 추가해야된다.
JScrollPane jsp_addr = new JScrollPane(jt, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
//생성자
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<jb.length;i++){
jb[i]= new JButton(jb_label[i]);//버튼에 이름표/라벨을 달아줘야한다.*****
// jb[i].setBounds(20,20,120,30);//버튼 붙이기 전에 해주기
jp.add(jb[i]);//패널에 버튼을 붙임
jb[i].addActionListener(this);//버튼에다가 액션리스너를 넣어줘야된다.****** 그리고 나를 넣어줘야된다.*****
}
//JPannel은 FlowLayout이 기본값인데 사용자의 정의 크기와 위치를 위해
//레이아웃을 뭉갠다..???
jp.setLayout(new FlowLayout(FlowLayout.LEFT, 10,20));//가로로 붙여주는 친구
jf.add("North", jp);//북쪽으로 붙여주기
jf.add("Center", jsp_addr);
jf.setVisible(true);//****순서가 중요*** 다 추가하고 보이게 해야된다.
}
//메인메소드
public static void main(String[] args) {
new AddressBook_dap();
}
@Override
public void actionPerformed(ActionEvent e) {
Object obj=e.getSource();
if(obj==jb[0]){//전체조회-검색
String members[][]={
{"1","김도희","010-1234-5678"},
{"2","이은재","010-4567-8912"},
{"3","박소연","010-2345-6789"}
};
// dtm_addr.setDataVector(members, header);
//이미 테이블에 조회된 정보가 있는경우 모두 삭제함
// while(dtm_addr.getRowCount()>0){
// dtm_addr.removeRow(0);
// }//없으면 밑에 추가가 된다.
for(int i=0;i<members.length;i++){
Vector<String> oneRow= new Vector<>();//<>제네릭
oneRow.add(members[i][0]);
oneRow.add(members[i][1]);
oneRow.add(members[i][2]);
dtm_addr.addRow(oneRow);
}
jsp_addr.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener(){
public void adjustmentValueChanged(AdjustmentEvent e){
JScrollBar jsb = (JScrollBar)e.getSource();
jsb.setValue(jsb.getMaximum());
}
}
);
}
if(jb[1]==obj){
// adb.jdg.setVisible(true);
// adb.jdg.setTitle(jb_label[0]);//배열의 값를 가져와 "입력"
adb.setDialog(jb_label[1], true);
}
if(jb[2]==obj){
// adb.jdg.setVisible(true);
// adb.jdg.setTitle(jb_label[1]);
adb.setDialog(jb_label[2], true);
}
if(jb[3]==obj){
// adb.jdg.setVisible(true);
// adb.jdg.setTitle(jb_label[3]);
adb.setDialog(jb_label[3], true);
}
}
}
JMenu
JMenuItem 을 사용해보자.
ToolBar
이벤트 처리 순서
1. 이벤트 소스(버튼, 체크박스, 텍스트필드)에 대응하는 인터페이스를 찾아라.
---->추상 메소드를 찾아서 재정의 해야된다.
2. 이벤트 소스와 이벤트 처리를 담당하는 핸들러클래스를 매칭함.
버튼.addActionListener(this);
implement actionListener
메소드 호출하기 파라미터넣기 이런것을 확실하게 알아야 한다.
화면구현이 중요한것이아니라
3. ActionPerformed 메소드 오버라이딩하기(재정의)
구현체 클래스가 있어야 한다.
ActionListener - 인터페이스. 추상메소드만 갖는다. 반드시 구현체 클래스가 있어야 한다.
그래야 인스턴스화가 가능하다.
쓰레드는 그림자이다.
자동차에 달려있는 네비게이션
static
package dev_java.ch03.Practice;
class S1{
static int i;//0. 전변의 성격. 글로벌하게 사용이 가능하다. 인스턴스화 없이 사용이 가능하다. 복제본 만들지 마라.
static void m(){
}
}
class S2{
void n(){
S1.i=500;
}
}
public class StaticTest {
public static void main(String[] args) {
// insert here
S1.i=10; //선언이 먼저다. 스태틱 전변이다. 타입+다트연산자로 할수있다. 인스턴스화 필요없다.
S1 s1 = new S1();
s1.i=100;//틀린거는 아니지만 쓰지 말아줄래...?
System.out.println(S1.i);//100
System.out.println(s1.i);//100 둘다 100이다. 왜? 스태틱은 원본이다. 하나를 바꾸면 원본을 바꾸는거다.
S2 s2 = new S2();
s2.n();//메소드 뒤에 ;이면 메소드 호출이다. n메소드 호출했니? 네. 경유했다.
System.out.println("n()호출 후======>"+S1.i);//0? 10? 100? 500? 500이다.
}
}
//접근제한자 private > friendly(같은 클래스 친구들만 쓸수있다) > protected(상속관계의 아빠는 쓰기 가능) > public
//static - 변수앞에,메소드앞에, 클래스앞에
//final-변수앞에(상수)-메소드앞에(오버라이딩 불가)-클래스 앞에(상속안됨- 자손못가짐)
연습할때 쉬운문제로 말해가면서 하나하나 만들어보자.
지역변수일때 내안에서 쓸수 없다. 파라미터로 값을 넘겨준다.
static안에서는 non-static은 그냥 안된다!!!!
자바에서는 같은 내용의 메소드를 여러개 만들 수 있다. 단, 파라미터의 갯수가 다르거나 타입이 다르면.
package dev_java.ch03.Practice;
//접근제한자 private > friendly(같은 클래스 친구들만 쓸수있다) > protected(상속관계의 아빠는 쓰기 가능) > public
//static - 변수앞에,메소드앞에, 클래스앞에
//final-변수앞에(상수)-메소드앞에(오버라이딩 불가)-클래스 앞에(상속안됨- 자손못가짐)
import java.util.Scanner;
public class Ellipse2 {
//선언부- 전역변수는 초기화를 생략 가능하다. 왜냐하면 생성자가 해 주니까.
double area=0.0;
final double PI=3.14; // final재정의가 불가능하다. PI=2.5;//불가능하다.
//리턴타입을 결정할 수 있나요? 네- 메인에서 면적 출력할거니?
//파라미터의 갯수와 타입도 선택 할 수 있니? 네
double 면적구하기(int i1,int i2){//메인에서 출력할 때 double로 리턴타입을 결정. 메소드에서출력하려면 void로 리턴타입 결정.
area=i1*i2*PI;//Int*double은 더블이 이긴다. 자동 형전환
return 0.0;
// return 3;//자동형전환
// return (float)3.5; //강제 형전환
}
//자바에서는 같은 이름의 메소드를 중복 선언할 수 있다.
//단, 파라미터의 갯수가 다르거나 타입이 달라야 한다.-메소드 오버로딩
double 면적구하기(){
return 0.0;
}
public static void main(String[] args) {
Ellipse2 e2=new Ellipse2();
int r1=0, r2=0;//반지름 2개 담을 변수 선언
Scanner s = new Scanner(System.in);//인스턴스화-메모리에 로딩-메소드나 변수 누린다.
System.out.print("첫번째 반지름 입력하세요");
String user1=s.nextLine(); //호출. 구현이면 {}
System.out.println("사용자가 입력한 첫번째 반지름은 ==="+user1);
System.out.println("두번째 반지름을 입력하세요");
String user2=s.nextLine();
int i1=Integer.parseInt(user1); //첫번째 반지름을 원시형으로 바꿈 왜? 곱셈해야되니까.
int i2=Integer.parseInt(user2); //두번째 반지름을 원시형으로 바꿈 왜? 곱셈해야되니까.
e2.면적구하기(i1,i2);//파라미터로 값을 넘겨준다******
System.out.println("타원형의 면적은"+e2.area+"입니다."); //Ellipse.area는 안된다. area가 스태틱이 아니니까. 스태틱=공유=하나
}
}
'학원수업 > 12월' 카테고리의 다른 글
12/15 자바 14회차(this 최종, 배열복사, Vector) (0) | 2022.12.15 |
---|---|
12/14 국비학원 자바수업 13회차(생성자, this) (0) | 2022.12.14 |
12/12 숙제 풀이 (0) | 2022.12.13 |
12/12 국비학원 자바수업 11회차(배열, 추상메소드, 인터페이스) (0) | 2022.12.12 |
12/09 국비학원 자바수업 10회차(equals, 다차원 배열) (1) | 2022.12.09 |
댓글