자바-15일차 이클립스

최성현·2023년 7월 5일
0

Java

목록 보기
44/46

SwingRadiobutton/checkbox

public class SwingRadioCheck_01 extends JFrame implements ActionListener {
	
	Container cp;
	JRadioButton rb []=new JRadioButton[4]; //하나만 버튼을 선택하고 싶을때
	JCheckBox cb[]=new JCheckBox[4];
	JLabel lblMessage; //라디오버튼, 체크박스 결과값 출력
	JPanel pTop,pBottom; //라디오버튼, 체크박스 올릴 패널
	Color colors[]= {Color.red,Color.pink,Color.blue,Color.green};
	
	public SwingRadioCheck_01(String title) {
		super(title);
		cp=this.getContentPane();
		this.setBounds(200, 100, 600, 500);
		cp.setBackground(new Color(255,255,200));
		setDesign();
		setVisible(true);
	}
	
	public void setDesign()
	{
		//상단패널에 보더로 감싼 4개의 radio버튼 만들기
		String str1[]= {"빨강","핑크","파랑","초록"};
		pTop=new JPanel();
		pTop.setBorder(new TitledBorder("글자색"));
		this.add("North",pTop);
		
		
		//라디오버튼 하나만 선택되도록 그룹을 지어줌
		ButtonGroup bg=new ButtonGroup();
		
		for(int i=0;i<rb.length;i++)
		{
			rb[i]=new JRadioButton(str1[i],i==2?true:false); //라디오버튼 생성 //index2번에 체크하겠다
			rb[i].addActionListener(this); //라디오버튼에 액션추가
			pTop.add(rb[i]); //4개의 버튼을 각각 탑 패널에 추가
			bg.add(rb[i]); //안해주면 다중선택 //버튼그룹에 추가
		}
		
		ImageIcon icon=new ImageIcon("/Users/sunghyunchoi/Desktop/sist0615/Swingimage/logoImg/a04.png");
		
		lblMessage=new JLabel("Have a nice day",icon,JLabel.CENTER); //출력 및 계산나오는 곳
		lblMessage.setHorizontalTextPosition(JLabel.LEFT);
		lblMessage.setBorder(new LineBorder(Color.magenta,2)); //라인굵기
		this.add("Center",lblMessage);
		
		//하단패널에 보더로 감싼 4개의 checkbox버튼 만들기
		pBottom=new JPanel();
		pBottom.setBorder(new TitledBorder("가능언어"));
		this.add("South",pBottom);
		
		String str2[]= {"독일어","영어","한국어","JAVA"};
		
		for(int i=0;i<cb.length;i++)
		{
			cb[i]=new JCheckBox(str2[i]);
			pBottom.add(cb[i]);
			cb[i].addActionListener(this);
		}
	}
	
	//이벤트
	@Override
	public void actionPerformed(ActionEvent e) {
		
		Object ob=e.getSource();
		
		//라디오버튼 호출처리,메세지를 컬러별로 출력
		for(int i=0;i<rb.length;i++)
		{
			if(ob==rb[i])
			{
				lblMessage.setForeground(colors[i]);
				lblMessage.setFont(new Font("", Font.BOLD, 20)); //글자체 글자스타일 폰트크기
			}
		}
		
		//체크박스 기본 로직
		//증가 값이기 때문에 for문 밖에서
		//체크박스 호출처리...선택한 체크를 라벨메세지별 출력
		String lang="나의 가능 언어는 ";
		
		for(int i=0;i<cb.length;i++)
		{
			if(cb[i].isSelected())//boolean으로 안하면 체크 후 해제했을때 글자가 안없어
			{
				lang+=cb[i].getText()+" ";
			}
		}
		
		lblMessage.setText(lang);
		
		//ob냐 cb냐 비교할때 사용
		//클래스 타입비교
		if(ob instanceof JCheckBox)
			lblMessage.setText(lang);
		else if(ob instanceof JRadioButton)
			lblMessage.setText("Have a Nice Day");
		
	}

	public static void main(String[] args) {
		
		new SwingRadioCheck_01("라디오 체크 연습");
	}

}

swing JTable

public class SwingJTable_02 extends JFrame {
	
	Container cp;
	JTable table;
	JLabel lblTitle;
	JLabel lblOut; //출력
	
	public SwingJTable_02(String title) {
		super(title);
		cp=this.getContentPane();
		this.setBounds(200, 100, 600, 500);
		cp.setBackground(new Color(255,255,200));
		setDesign();
		setVisible(true);
	}
	
	public void setDesign()
	{
		String data[][]= {{"김영준","서울","010-1234-1234"},
							{"최성현","경기","010-1111-2222"},
							{"장미란","인천","010-525-36363"},
							{"박세리","제주","010-3255-3263"}};
		String title[]= {"이름","주소","연락처"};
		
		lblTitle=new JLabel("JTable연습",JLabel.CENTER);
		lblOut=new JLabel("결과출력....",JLabel.CENTER);
		
		table=new JTable(data, title);
		JScrollPane pane=new JScrollPane(table); //생성한 테이블 넣기
		
		//테이블에 마우스 이벤트 추가하기 위해서 밑에 클래스 생성후 상속 받아서 작성
		table.addMouseListener(new TableEvent());
		
		this.add("North",lblTitle);
		this.add("Center",pane);
		this.add("South",lblOut);
		
	}
	
	//상속받기 위해서 생성
	//테이블클릭시 발생하는 마우스이벤트
	class TableEvent extends MouseAdapter{
		
		@Override
		public void mouseClicked(MouseEvent e) {
			super.mouseClicked(e);
			
			//System.out.println("테이블 클릭!!!"); 마우스 먹는지 확인용
			//선택한 행번호 얻기
			int rowNum=table.getSelectedRow();
			
			String str="이름: "+table.getValueAt(rowNum, 0)
			           +",주소: "+table.getValueAt(rowNum, 1)
			           +", 연락처: "+table.getValueAt(rowNum, 2);
			
			lblOut.setText(str); //swing화면 아래 결과값 출력
			
		}
	}

	public static void main(String[] args) {
		new SwingJTable_02("스윙 테이블 연습");
	}

}

swing 응용

public class SwingTableShop_03 extends JFrame implements ActionListener {
	
	Container cp;
	JTextField tfSang,tfSu,tfDan;
	JButton btnAdd;
	JTable table;
	DefaultTableModel model;
	
	//저장하고 불러올 파일명
	String FILENAME="/Users/sunghyunchoi/Desktop/sist0615/file/fruit.txt";
	

	
	
	public SwingTableShop_03(String title) {
		super(title);
		cp=this.getContentPane();
		this.setBounds(200, 100, 400, 400);
		cp.setBackground(new Color(255,255,200));
		
		//디자인
		setDesign();
		
		//테이블데이터
		tableData();
		
		
		setVisible(true);
	}
	
	//디자인
	public void setDesign()
	{
		this.setLayout(null);
		
		JLabel lbl1=new JLabel("상품명");
		JLabel lbl2=new JLabel("수량");
		JLabel lbl3=new JLabel("단가");
		
		lbl1.setBounds(30, 20, 80, 30);
		this.add(lbl1);
		
		lbl2.setBounds(130, 20, 80, 30);
		this.add(lbl2);
		
		lbl3.setBounds(230, 20, 80, 30);
		this.add(lbl3);
		
		tfSang=new JTextField();
		tfSang.setBounds(20, 60, 100, 30);
		this.add(tfSang);
		
		tfSu=new JTextField();
		tfSu.setBounds(120, 60, 100, 30);
		this.add(tfSu);
		
		tfDan=new JTextField();
		tfDan.setBounds(220, 60, 100, 30);
		this.add(tfDan);
		
		//버튼
		btnAdd=new JButton("추가하기");
		btnAdd.setBounds(100, 120, 100, 30);
		this.add(btnAdd);
		
		//버튼에 이벤트
		btnAdd.addActionListener(this);
		
		//테이블 생성
		String title[]= {"상품명","수량","가격","총금액"};
		model=new DefaultTableModel(title, 0); //0은 행 갯수
		table=new JTable(model);
		JScrollPane js=new JScrollPane(table);
		js.setBounds(20, 160, 350, 160);
		this.add(js);
		
		
		//테이블 클릭시 선택한 행번호를 selectRow에 저장
		table.addMouseListener(new MouseAdapter() {
			
			@Override
			public void mouseClicked(MouseEvent e) {
				super.mouseClicked(e);
				
				int selectRow=table.getSelectedRow();//행번호저장
				
			}
		});
		
		
	}
	
	//처음생성시 테이블에 불러올 메서드
	public void tableData()
	{
		FileReader fr=null;
		BufferedReader br=null;
		
		try {
			fr=new FileReader(FILENAME);
			br=new BufferedReader(fr);
			
			while(true)
			{
				String s=br.readLine();
				
				if(s==null)
					break;
				
				String data[]=s.split(",");
				
				//table에 배열형 데이터 추가
				model.addRow(data);
				
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO: handle exception
		}
	}
	
	public static void main(String[] args) {
		
		new SwingTableShop_03("상품테이블");
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		
		Object ob=e.getSource();
		
		if(ob==btnAdd)
		{
			String sang=tfSang.getText().trim();
			String su=tfSu.getText().trim();
			String dan=tfDan.getText().trim();
			
			if(sang.length()==0 || su.length()==0 || dan.length()==0)
			{
				JOptionPane.showMessageDialog(this, "3개의 값을 모두 입력해주세요");
				return; //메서드 끝내고 다시 시작하게 해주는 것
			}
			
			int total=0;
			total=Integer.parseInt(su)*Integer.parseInt(dan);
			
			
			NumberFormat nf=NumberFormat.getInstance(); //숫자를 문자로 인식
			Vector<String> data=new Vector<String>();
			
			data.add(sang);
			data.add(su);
			data.add(dan);
			data.add(nf.format(total));
			
			//테이블에 추가
			model.addRow(data);
			
			//입력값 지워주기 /값 입력후 추가하기 버튼 누르면 값 자동으로 지워주기
			tfSang.setText("");
			tfSu.setText("");
			tfDan.setText("");
			
		}
	}

}
profile
백엔드 개발자로서 성장해 나가는 성현이의 블로그~

0개의 댓글