일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- N+1
- 피연산자
- InterruptedException
- delete
- 변수와 상수
- 추상메서드
- foreigen key
- Shared Lock
- Java
- 프로그래머스 코테
- exclusive lock
- 서버 스크립트
- bufferedInputStream
- 즉시로딩
- 참조타입
- SQL
- jsoup
- 오버라이딩
- 메세지 큐
- 지연로딩
- null/not null
- 컬렉션 프레임워크
- 멱등성
- select
- 원시타입
- 프로그래머스
- 오버로딩
- 변수와 메서드
- git 기초
- 연산자와의 관계
- Today
- Total
[JAVA_Back-End]
[JAVA] GUI(3) 본문
< 지난 포스팅 정리 >
Swing - Java GUI
- 방법론
1.DAO / (D)TO
데이터 접근..
* tier - layer
GUI
JFrame
JPanel(Border)
JLabel
JtextField / JPasswordField / JTextArea
=> 입력 / 출력(JLabel)
JButton
체크박스 라디오..
JCheckBoxEx01.java - CheckBox만들기 |
import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JCheckBox; import javax.swing.JButton; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class JCheckBoxEx01 extends JFrame { private JPanel contentPane; private JCheckBox CB1; private JCheckBox CB2; private JCheckBox CB3; private JCheckBox CB4; private JButton btn2; private JButton btn3; private JButton btn4; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { JCheckBoxEx01 frame = new JCheckBoxEx01(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public JCheckBoxEx01() { setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 600, 800); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); CB1 = new JCheckBox("사과"); CB1.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if(CB1.isSelected()) { System.out.println("선택"); }else { System.out.println("해제"); } } }); CB1.setSelected(true); CB1.setBounds(23, 25, 115, 23); contentPane.add(CB1); CB2 = new JCheckBox("수박"); CB2.setBounds(23, 50, 115, 23); contentPane.add(CB2); CB3 = new JCheckBox("참외"); CB3.setBounds(23, 75, 115, 23); contentPane.add(CB3); CB4 = new JCheckBox("딸기"); CB4.setBounds(23, 100, 115, 23); contentPane.add(CB4); JButton btn1 = new JButton("선택"); btn1.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if(CB1.isSelected()) { System.out.println("bx1 선택: "+ CB1.getText()); //getText()로 체크된 내용을 가져옴 } if(CB2.isSelected()) { System.out.println("bx2 선택: "+ CB2.getText()); } if(CB3.isSelected()) { System.out.println("bx3 선택: "+ CB3.getText()); } if(CB4.isSelected()) { System.out.println("bx4 선택: "+ CB4.getText()); } } }); btn1.setBounds(23, 129, 97, 23); contentPane.add(btn1); btn2 = new JButton("전체선택"); btn2.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { CB1.setSelected(true); CB2.setSelected(true); CB3.setSelected(true); CB4.setSelected(true); } }); btn2.setBounds(23, 165, 97, 23); contentPane.add(btn2); btn3 = new JButton("전체해제"); btn3.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { CB1.setSelected(false); CB2.setSelected(false); CB3.setSelected(false); CB4.setSelected(false); } }); btn3.setBounds(23, 198, 97, 23); contentPane.add(btn3); btn4 = new JButton("전체선택"); btn4.addMouseListener(new MouseAdapter() { //boolean check =true; //기본 true로 설정 후 클릭할 수 있도록 함(if문 실행) if문에 check넣으면 이름은 바뀌지 않고 동작은 함 @Override public void mouseClicked(MouseEvent e) { if(btn4.getText().equals("전체선택")) { //if문이 실행되면 다음은 전체 취소가 될테니까 check를 false로 설정(다음클릭 시 else문 실행될 것임) CB1.setSelected(true); CB2.setSelected(true); CB3.setSelected(true); CB4.setSelected(true); //check=false; btn4.setText("전체해제"); }else { CB1.setSelected(false); CB2.setSelected(false); CB3.setSelected(false); CB4.setSelected(false); //check=true; btn4.setText("전체선택"); } } }); btn4.setBounds(23, 235, 97, 23); contentPane.add(btn4); } } |
JRadiobuttonEx01.java - RadioButton만들기 |
import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JRadioButton; import javax.swing.ButtonGroup; import javax.swing.JButton; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class JRadioButtonEx01 extends JFrame { private JPanel contentPane; private final ButtonGroup buttonGroup = new ButtonGroup(); private JRadioButton btn1; private JRadioButton btn2; private JRadioButton btn3; private JRadioButton btn4; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { JRadioButtonEx01 frame = new JRadioButtonEx01(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public JRadioButtonEx01() { setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 600, 800); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); btn1 = new JRadioButton("사과"); btn1.setSelected(true); buttonGroup.add(btn1); //buttongroup에 포함시킴 btn1.setBounds(8, 6, 121, 23); contentPane.add(btn1); btn2 = new JRadioButton("수박"); buttonGroup.add(btn2); btn2.setBounds(8, 31, 121, 23); contentPane.add(btn2); btn3 = new JRadioButton("참외"); buttonGroup.add(btn3); btn3.setBounds(8, 56, 121, 23); contentPane.add(btn3); btn4 = new JRadioButton("딸기"); buttonGroup.add(btn4); btn4.setBounds(8, 81, 121, 23); contentPane.add(btn4); JButton btn5 = new JButton("선택"); btn5.addMouseListener(new MouseAdapter() { //checkbox => 다중, radiobutton => 단일 @Override public void mouseClicked(MouseEvent e) { if(btn1.isSelected()) { //선택된 내용을 버튼을 클릭해 확인하기 System.out.println("rdbtn1 선택"); }else if(btn2.isSelected()) { System.out.println("rdbtn2 선택"); }else if(btn3.isSelected()) { System.out.println("rdbtn3 선택"); }else if(btn4.isSelected()) { System.out.println("rdbtn4 선택"); } } }); btn5.setBounds(12, 110, 128, 23); contentPane.add(btn5); } } |
JOptionPaneEx01.java - 팝업(경고)창 띄우기 |
import java.awt.EventQueue;
import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JButton; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class JOptionPaneEx01 extends JFrame { private JPanel contentPane; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { JOptionPaneEx01 frame = new JOptionPaneEx01(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public JOptionPaneEx01() { setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 600, 800); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JButton btn1 = new JButton("New button"); btn1.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { //JOptionPane.showMessageDialog(JOptionPaneEx01.this, "메세지"); JOptionPane.showMessageDialog(JOptionPaneEx01.this, "메세지","타이틀", JOptionPane.QUESTION_MESSAGE ); } }); btn1.setBounds(12, 10, 97, 23); contentPane.add(btn1); JButton btn2 = new JButton("New button"); btn2.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { //확인창 띄우기 //JOptionPane.showConfirmDialog(JOptionPaneEx01.this, "메세지"); //인스턴스 없으면 static int result=JOptionPane.showConfirmDialog(JOptionPaneEx01.this, "메세지","타이틀",JOptionPane.OK_CANCEL_OPTION); if(result==JOptionPane.OK_OPTION) { System.out.println("OK_OPTION"); }else if(result==JOptionPane.CANCEL_OPTION) { System.out.println("CANCEL_OPTION"); }else if(result==JOptionPane.CLOSED_OPTION) { System.out.println("CLOSED_OPTION"); }else { System.out.println("기타"); } } }); btn2.setBounds(12, 47, 97, 23); contentPane.add(btn2); JButton btn3 = new JButton("New button"); btn3.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { //JOptionPane.showInputDialog("메세지"); String msg = JOptionPane.showInputDialog("메시지","내용"); //System.out.println("메시지: "+msg); if(msg!=null) { System.out.println(msg); }else { System.out.println("취소클릭"); } } }); btn3.setBounds(12, 90, 97, 23); contentPane.add(btn3); } } |
JOptionPaneEx02.java - 팝업입력창으로 단수 입력하여 구구단 출력하기 |
import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JButton; import javax.swing.JTextArea; import javax.swing.JScrollPane; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class JOptionPaneEx02 extends JFrame { private JPanel contentPane; private JTextArea textArea; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { JOptionPaneEx02 frame = new JOptionPaneEx02(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public JOptionPaneEx02() { setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 600, 800); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JButton btn = new JButton("구구단 입력"); btn.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { String msg = JOptionPane.showInputDialog("구구단을 입력하세요"); if(msg!=null) { textArea.setText(gugudan(msg)); }else { textArea.setText("다시 입력바랍니다"); } } }); btn.setBounds(25, 20, 529, 23); contentPane.add(btn); JScrollPane scrollPane = new JScrollPane(); scrollPane.setBounds(25, 57, 529, 461); contentPane.add(scrollPane); textArea = new JTextArea(); textArea.setEditable(false); scrollPane.setViewportView(textArea); } public String gugudan(String num) { String result=""; for(int i=1; i<=9;i++) { result+= num+"x"+i+"="+ Integer.parseInt(num)*i+"\n"; } return result; } } |
JProgressBarEx01.java - 진행상태 바 구현하기 (최소/ 최대값에 도달했을 때 팝업창 띄우기) |
import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JProgressBar; import javax.swing.JButton; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class JProgressBarEx01 extends JFrame { private JPanel contentPane; private JProgressBar progressBar; private JButton btnNewButton; private JButton btnNewButton_1; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { JProgressBarEx01 frame = new JProgressBarEx01(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public JProgressBarEx01() { setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 600, 800); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); progressBar = new JProgressBar(); progressBar.setStringPainted(true); progressBar.setValue(50); progressBar.setBounds(12, 10, 560, 14); contentPane.add(progressBar); JButton btn1 = new JButton("New button"); btn1.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { System.out.println(progressBar.getValue()); progressBar.setValue(150); } }); btn1.setBounds(12, 34, 97, 23); contentPane.add(btn1); //최소값/최대값에 도달했을 때 경고창 btnNewButton = new JButton("감소(-10)"); btnNewButton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { progressBar.setValue(progressBar.getValue()-10); if(progressBar.getValue()==progressBar.getMinimum()) { JOptionPane.showMessageDialog(JProgressBarEx01.this, "더 이상 감소가 불가합니다","Warning", JOptionPane.WARNING_MESSAGE ); } } }); btnNewButton.setBounds(12, 67, 97, 23); contentPane.add(btnNewButton); btnNewButton_1 = new JButton("증가(+10)"); btnNewButton_1.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { progressBar.setValue(progressBar.getValue()+10); if(progressBar.getValue()==progressBar.getMaximum()) { JOptionPane.showMessageDialog(JProgressBarEx01.this, "더 이상 증가가 불가합니다","Warning", JOptionPane.WARNING_MESSAGE ); } } }); btnNewButton_1.setBounds(121, 67, 97, 23); contentPane.add(btnNewButton_1); } } |
Jslider
majorTick - 큰 범위
minorTick -작은범위
paintLabels와 paintTicks를 다 true로 설정
JSliderEx01.java - 슬라이더 구현하기 |
import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JSlider; import javax.swing.JButton; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.event.ChangeListener; import javax.swing.event.ChangeEvent; import javax.swing.JTextArea; import javax.swing.JScrollPane; public class JSliderEx01 extends JFrame { private JPanel contentPane; private JScrollPane scrollPane; private JTextArea textArea; private JSlider slider; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { JSliderEx01 frame = new JSliderEx01(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public JSliderEx01() { setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 600, 800); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); slider = new JSlider(); slider.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { //System.out.println(slider.getValue()); textArea.append(slider.getValue()+System.lineSeparator()); //슬라이더 바의 움직임 값을 textArea에 연결(append)해서 표시 } }); slider.setMinorTickSpacing(5); slider.setPaintTicks(true); slider.setPaintLabels(true); slider.setMajorTickSpacing(10); slider.setBounds(12, 10, 560, 76); contentPane.add(slider); JButton btn1 = new JButton("New button"); btn1.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { System.out.println(slider.getValue()); } }); btn1.setBounds(12, 108, 97, 23); contentPane.add(btn1); scrollPane = new JScrollPane(); scrollPane.setBounds(12, 141, 560, 263); contentPane.add(scrollPane); textArea = new JTextArea(); scrollPane.setViewportView(textArea); } } |
JSpinner
JSpinnerEx01.java - 여러가지 Spinner 구현하기 |
import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; import javax.swing.SpinnerListModel; import javax.swing.SpinnerDateModel; import java.util.Date; import java.util.Calendar; import javax.swing.JButton; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.event.ChangeListener; import javax.swing.event.ChangeEvent; public class JSpinnerEx01 extends JFrame { private JPanel contentPane; private JSpinner spinner02; private JSpinner spinner03; private JSpinner spinner01; private JButton btn2; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { JSpinnerEx01 frame = new JSpinnerEx01(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public JSpinnerEx01() { setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 600, 800); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); spinner01 = new JSpinner(); spinner01.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { System.out.println((Integer)spinner01.getValue()); } }); SpinnerNumberModel spinnerNumberModel1=new SpinnerNumberModel(50,0,100,10); //spinner01.setModel(new SpinnerNumberModel(50, 0, 100, 10)); //초기값 설정 가능 spinner01.setBounds(151, 10, 168, 28); contentPane.add(spinner01); spinner02 = new JSpinner(); spinner02.setModel(new SpinnerListModel(new String[] {"\uC0AC\uACFC", "\uCC38\uC678 ", "\uC218\uBC15", "\uB538\uAE30", "\uBCF5\uC22D\uC544"})); spinner02.setBounds(151, 62, 168, 28); contentPane.add(spinner02); spinner03 = new JSpinner(); spinner03.setModel(new SpinnerDateModel(new Date(1691938800000L), new Date(1691938800000L), new Date(1820847600000L), Calendar.DAY_OF_YEAR)); spinner03.setBounds(151, 115, 168, 28); contentPane.add(spinner03); JButton btn1 = new JButton("New button"); btn1.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { //데이터 가져오기 System.out.println((Integer)spinner01.getValue()); //spinner안의 내용이 어떤 형인지 확인 후 형변환 하여 출력해야한다. System.out.println((String)spinner02.getValue()); } }); btn1.setBounds(151, 165, 97, 23); contentPane.add(btn1); btn2 = new JButton("New button"); btn2.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { spinner02.setModel(new SpinnerListModel(new String[] {"\uC0AC\uACFC", "\uCC38\uC678 ", "\uC218\uBC15", "\uB538\uAE30", "\uBCF5\uC22D\uC544"})); //버튼에 spinner내용을 동적으로 부여 } }); btn2.setBounds(151, 198, 97, 23); contentPane.add(btn2); } } |
Database + Spinner
JSpinnerEx02.java - 직업 목록 데이터베이스에서 불러온 후, 스피너에 목록 적용하기 (emp테이블에서 직책이름을 선택하면 직책이름이 뭐가 있는지 리스트에 넣기) |
import java.awt.EventQueue; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JLabel; import javax.swing.JSpinner; import javax.swing.JScrollBar; import javax.swing.JTextArea; import javax.swing.JScrollPane; import javax.swing.SpinnerListModel; import javax.swing.JButton; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.event.ChangeListener; import javax.swing.event.ChangeEvent; public class JSpinnerEx02 extends JFrame { private JPanel contentPane; private JTextArea textArea; private JSpinner spinner; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { JSpinnerEx02 frame = new JSpinnerEx02(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public JSpinnerEx02() { setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 600, 800); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JLabel lbl01 = new JLabel("직책"); lbl01.setBounds(32, 23, 57, 15); contentPane.add(lbl01); spinner = new JSpinner(); spinner.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { String strjob=(String)spinner.getValue(); if(strjob=="직책이름") { getData(); } } }); //spinner.setModel(new SpinnerListModel(new String[] {"\uC9C1\uCC45\uC774\uB984"})); spinner.setModel(new SpinnerListModel(getData())); //받아온 데이터를 spinner에 넣기위한 동적 할당 spinner.setBounds(88, 20, 462, 22); contentPane.add(spinner); JScrollPane scrollPane = new JScrollPane(); scrollPane.setBounds(26, 68, 532, 559); contentPane.add(scrollPane); textArea = new JTextArea(); textArea.setEditable(false); scrollPane.setViewportView(textArea); } public String[] getData() { String url = "jdbc:mariadb://localhost:3306/sample"; String user = "root"; String password = "!123456"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String[] datas =null; try { Class.forName( "org.mariadb.jdbc.Driver" ); conn = DriverManager.getConnection(url, user, password); String sql = "select distinct job from emp"; pstmt = conn.prepareStatement( sql ); rs = pstmt.executeQuery(); rs.last(); //데이터 개수 확인 ( 중요) int count = rs.getRow(); rs.beforeFirst(); datas = new String[count]; int idx=0; while( rs.next() ) { datas[idx++]=rs.getString("job"); } } catch (ClassNotFoundException e1) { // TODO Auto-generated catch block System.out.println( "에러 " + e1.getMessage() ); } catch (SQLException e1) { // TODO Auto-generated catch block System.out.println( "에러 " + e1.getMessage() ); } finally { if( rs != null ) try { rs.close(); } catch(SQLException e1) {} if( pstmt != null ) try { pstmt.close(); } catch(SQLException e1) {} if( conn != null ) try { conn.close(); } catch(SQLException e1) {} } return datas; } } |
- 동적으로 할당할 때 배열의 크기를 확인하는 코드가 중요하다
EmpDAO.java - DAO로 분리 (DAO 동작을 처리하는 구간) |
import java.sql.Connection;
import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class EmpDAO { private Connection conn; public EmpDAO() { String url = "jdbc:mariadb://localhost:3306/sample"; String user = "root"; String password = "!123456"; try { Class.forName( "org.mariadb.jdbc.Driver" ); conn = DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException e1) { // TODO Auto-generated catch block System.out.println( "에러 " + e1.getMessage() ); } catch (SQLException e1) { // TODO Auto-generated catch block System.out.println( "에러 " + e1.getMessage() ); } } public String[] listJob() { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String[] datas =null; try{ String sql = "select distinct job from emp"; pstmt = conn.prepareStatement( sql ); rs = pstmt.executeQuery(); rs.last(); //데이터 개수 확인 ( 중요) int count = rs.getRow(); rs.beforeFirst(); datas = new String[count]; int idx=0; while( rs.next() ) { datas[idx++]=rs.getString("job"); } }catch(SQLException e) { System.out.println( "에러 " + e.getMessage() ); }finally { if( rs != null ) try { rs.close(); } catch(SQLException e1) {} if( pstmt != null ) try { pstmt.close(); } catch(SQLException e1) {} if( conn != null ) try { conn.close(); } catch(SQLException e1) {} } return datas; } } |
CustomSpinnerListModel.java - 객체 생성 |
import javax.swing.SpinnerListModel;
public class CustomSpinnerListModel extends SpinnerListModel { public CustomSpinnerListModel() { super( new EmpDAO().listJob()); } } |
Combobox
JComboBoxEx01.java - Combobox로 과일 선택하기 |
import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JComboBox; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.ItemListener; import java.awt.event.ItemEvent; public class JComboBoxEx01 extends JFrame { private JPanel contentPane; private JComboBox comboBox; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { JComboBoxEx01 frame = new JComboBoxEx01(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public JComboBoxEx01() { setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 600, 800); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); comboBox = new JComboBox(); comboBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if(e.getStateChange()==ItemEvent.SELECTED) { //선택된 내용만 뜰 수 있도록 설정해주어야 한다. 그렇지 않으면 클릭내용과 선택후 내용이 같이 떠서 중복으로 내용이 뜨게 된다. System.out.println((String)comboBox.getSelectedItem()); } } }); //comboBox.setModel(new DefaultComboBoxModel(new String[] {"사과", "참외", "수박 ", "딸기"})); //어떻게 데이터를 넣을것인지 comboBox.setModel(new CustomComboboxEx01()); comboBox.setSelectedIndex(0); //처음에 어떤 데이터를 셋팅할건지 comboBox.setBounds(12, 10, 175, 23); contentPane.add(comboBox); JButton btn1 = new JButton("New button"); btn1.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { System.out.println(comboBox.getSelectedIndex()); System.out.println((String)comboBox.getSelectedItem()); } }); btn1.setBounds(12, 43, 175, 23); contentPane.add(btn1); } } |
=> combobox에는 데이터를 넣을 때 DefaultComboBoxModel을 사용하여 직접적으로 넣는 방식이 있는가 하면, CustomComboboxModel을 통해 데이터베이스에서 따로 데이터를 가져와 넣는 방식이 있다.
CustomComboboxEx01.java - JCombobox에 적용할 수 있는 커스텀Combobox (String 사용) |
import javax.swing.DefaultComboBoxModel;
public class CustomComboboxEx01 extends DefaultComboBoxModel<String> { private String[] items = new String[] {"사과","참외","수박","딸기"}; //Callback 메서드 -> 개발자가 호출하는 것이 아닌 시스템에 의해 호출 @Override public int getSize() { // TODO Auto-generated method stub System.out.println("getSize() 호출"); return items.length; } @Override public String getElementAt(int index) { // TODO Auto-generated method stub System.out.println("getElementAt() 호출"); return items[index]; } } |
CustomComboboxEx02.java - JCombobox에 적용할 수 있는 커스텀Combobox(2) (ArrayList사용) |
import java.util.ArrayList; import javax.swing.DefaultComboBoxModel; public class CustomComboboxEx02 extends DefaultComboBoxModel<String> { private ArrayList<String> items; public CustomComboboxEx02() { items= new ArrayList<String>(); items.add("과일선택"); // 맨 처음 출력되는 것이 과일선택이 될 수 있도록 함 items.add("사과"); items.add("참외"); items.add("수박"); items.add("딸기"); } @Override public int getSize() { // TODO Auto-generated method stub //System.out.println("getSize() 호출"); return items.size(); } @Override public String getElementAt(int index) { // TODO Auto-generated method stub //System.out.println("getElementAt() 호출"); return items.get(index); } } |
=> ArrayList를 사용하던 String을 사용하던 JComboBox프로젝트 코드는 따로 바뀌지 않고 setModel에서 어느 CustomCombobox를 사용할것인지만 정하면 된다.
=> 또한 Custom에서 String을 사용하면 size는 .length로 확인, element는 [index]로 확인해야한다.
반면 Custom에서 ArrayList를 사용하면 size는 .size()를 사용하고, element는 .get(index)를 사용한다.
=> CustomComboBox에서 EmpDAO를 사용하여 데이터베이스 안에 있는 데이터를 가져와 ComboBox안에 넣을 수 있다.
CustomComboboxModel.java - ArrayList로 작성 |
import java.util.ArrayList;
import javax.swing.DefaultComboBoxModel; public class CustomComboboxModel extends DefaultComboBoxModel<String> { //private String[] datas; private ArrayList<String> datas; public CustomComboboxModel() { EmpDAO2 dao = new EmpDAO2(); datas = dao.listJob(); } @Override public int getSize() { return datas.size(); } @Override public String getElementAt(int index) { // TODO Auto-generated method stub //System.out.println("getElementAt() 호출"); return datas.get(index); } } |
JComboBoxEx03.java - CustomComboboxModel.java를 사용한 본 클래스 |
import java.awt.EventQueue; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSpinner; import javax.swing.JTextArea; import javax.swing.SpinnerListModel; import javax.swing.border.EmptyBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.JComboBox; import javax.swing.DefaultComboBoxModel; import java.awt.event.ItemListener; import java.awt.event.ItemEvent; public class JComboBoxEx03 extends JFrame { private JPanel contentPane; private JTextArea textArea; private JComboBox comboBox; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { JComboBoxEx03 frame = new JComboBoxEx03(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public JComboBoxEx03() { setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 600, 800); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JScrollPane scrollPane = new JScrollPane(); scrollPane.setBounds(26, 68, 532, 559); contentPane.add(scrollPane); textArea = new JTextArea(); textArea.setEditable(false); scrollPane.setViewportView(textArea); comboBox = new JComboBox(); comboBox.setModel(new CustomComboboxModel()); comboBox.setSelectedIndex(0); comboBox.setBounds(26, 25, 532, 23); contentPane.add(comboBox); } } |
우편번호 검색기
시도
구군
동
'Programming > JAVA' 카테고리의 다른 글
[JAVA]GUI(5) - Layout (0) | 2023.09.18 |
---|---|
[JAVA] GUI(4) (0) | 2023.09.15 |
[JAVA] GUI(2) (0) | 2023.09.12 |
[JAVA] 멀티스레드 + GUI(1) (0) | 2023.09.12 |
[JAVA] Data/객체 입출력 (0) | 2023.09.01 |