티스토리 뷰
연락처 프로그램 Ver.0.5
1. 이름 , 전화번호 , 이메일을 입력하고 "등록" 버튼을 누르면 로그 화면(textAreaLog)에
등록된 연락처 개수 : 1개
등록을 완료했습니다!
2. 번호입력에 번호를 입력하고 "검색"을 누르면 검색 및 전체결과 출력 화면(textAreaInfo)에
--- 연락처 1 ---
Contact [name = 김이름 , phone = 010-1111-1111, email = kimname@test.com]
3. 이름, 전화번호, 이메일 을 수정하고 "수정 "버튼을 누르면 검색 및 전체결과 출력 화면(textAreaInfo)에는
Contact [name = 김이름 , phone = 010-2222-2222, email = kimname@test.com]
로그 화면(textAreaLog)에는
수정 완료!
4. 번호를 입력하고 "삭제" 버튼을 누르면 삭제하고 로그화면에
삭제되었습니다!
옆에 스크롤에서 보거나 전체 검색으로 확인할 수 있음
+ 추가 : 테이블로 전체 검색을 할 수 있게 함
내 코드
package edu.java.contact05;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingConstants;
import edu.java.contact04.ContactVO;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
public class ContactMain5 {
private JFrame frame;
private JTextField textName;
private JTextField textPhone;
private JTextField textEmail;
private JTextField textIndex;
private JTextArea textAreaInfo;
private JTextArea textAreaLog;
private static ArrayList<Contact> list = new ArrayList<>(); //연락처를 담을 list 생성
private int count = 0; //연락처의 개수
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ContactMain5 window = new ContactMain5();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public ContactMain5() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 540, 632);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JLabel lblNewLabel = new JLabel("연락처 프로그램 ver 0.5");
lblNewLabel.setFont(new Font("나눔고딕", Font.PLAIN, 30));
lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel.setBounds(12, 10, 500, 48);
frame.getContentPane().add(lblNewLabel);
JLabel lblName = new JLabel("이름");
lblName.setHorizontalAlignment(SwingConstants.CENTER);
lblName.setFont(new Font("나눔고딕", Font.BOLD, 25));
lblName.setBounds(12, 68, 159, 48);
frame.getContentPane().add(lblName);
JLabel lblPhone = new JLabel("연락처");
lblPhone.setHorizontalAlignment(SwingConstants.CENTER);
lblPhone.setFont(new Font("나눔고딕", Font.BOLD, 25));
lblPhone.setBounds(12, 139, 159, 48);
frame.getContentPane().add(lblPhone);
JLabel lblEmail = new JLabel("이메일");
lblEmail.setHorizontalAlignment(SwingConstants.CENTER);
lblEmail.setFont(new Font("나눔고딕", Font.BOLD, 25));
lblEmail.setBounds(12, 197, 159, 56);
frame.getContentPane().add(lblEmail);
textName = new JTextField();
textName.setBounds(200, 68, 273, 48);
frame.getContentPane().add(textName);
textName.setColumns(10);
textPhone = new JTextField();
textPhone.setBounds(200, 140, 273, 48);
frame.getContentPane().add(textPhone);
textPhone.setColumns(10);
textEmail = new JTextField();
textEmail.setBounds(200, 207, 273, 48);
frame.getContentPane().add(textEmail);
textEmail.setColumns(10);
JButton btnInsert = new JButton("등록");
btnInsert.setFont(new Font("맑은 고딕", Font.BOLD, 20));
btnInsert.setBounds(12, 279, 122, 48);
btnInsert.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String name = textName.getText();
String phone = textPhone.getText();
String email = textEmail.getText();
Contact ct = new Contact(name, phone, email); //여기서 리스트로 받아야하지 않을까
count++;
String msg = "등록된 연락처 개수 : " + count + "\n"
+ "등록을 완료했습니다!" + "\n";
textAreaLog.append(msg);
System.out.println("출력하기");
}
});
frame.getContentPane().add(btnInsert);
textIndex = new JTextField();
textIndex.setHorizontalAlignment(SwingConstants.CENTER);
textIndex.setBounds(152, 279, 122, 48);
frame.getContentPane().add(textIndex);
textIndex.setColumns(10);
JButton btnSearch = new JButton("검색");
btnSearch.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String name = textName.getText();
String phone = textPhone.getText();
String email = textEmail.getText();
Contact ct = new Contact(name, phone, email);
String index = textIndex.getText();
int num = Integer.parseInt(index);
String msg1 = "--- 연락처 " + num + "---" + "\n" //입력한 숫자를 읽어와서
+ ct.toString() + "\n"; //해당 인덱스를 출력해야하는데
textAreaInfo.append(msg1);
}
});
btnSearch.setFont(new Font("맑은 고딕", Font.BOLD, 20));
btnSearch.setBounds(290, 278, 122, 48);
frame.getContentPane().add(btnSearch);
JButton btnUpdate = new JButton("수정");
btnUpdate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String name = textName.getText();
String phone = textPhone.getText();
String email = textEmail.getText();
Contact ct = new Contact(name, phone, email);
String msg2 = ct.toString();
textAreaLog.append("수정 완료!");
textAreaInfo.append(msg2);
}
});
btnUpdate.setFont(new Font("맑은 고딕", Font.BOLD, 20));
btnUpdate.setBounds(12, 337, 122, 48);
frame.getContentPane().add(btnUpdate);
JButton btnDelete = new JButton("삭제"); // 삭제 기능은 입력한 인덱스를 삭제하기 => 리스트 만들고
btnDelete.setFont(new Font("맑은 고딕", Font.BOLD, 20));
btnDelete.setBounds(152, 337, 122, 48);
frame.getContentPane().add(btnDelete);
JButton btnAllSearch = new JButton("전체 검색");
btnAllSearch.setFont(new Font("맑은 고딕", Font.BOLD, 20));
btnAllSearch.setBounds(290, 338, 122, 47);
frame.getContentPane().add(btnAllSearch);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(12, 395, 400, 72);
frame.getContentPane().add(scrollPane);
textAreaInfo = new JTextArea(); // textAreaInfo 초기화
scrollPane.setViewportView(textAreaInfo);
JScrollPane scrollPane_1 = new JScrollPane();
scrollPane_1.setBounds(12, 487, 400, 78);
frame.getContentPane().add(scrollPane_1);
textAreaLog = new JTextArea(); // textAreaLog 초기화
scrollPane_1.setViewportView(textAreaLog);
}
}
GUI 09
Design > Components > JCheckBox
아래 코드에서 독서 체크박스(chckbxReading)를 선택하면 setEnabled(false)가 호출되어
버튼(btnOutput)이 비활성화된다. 이것은 일종의 동작 제어이다.
즉, 사용자가 "독서"를 선택하는 경우 버튼(btnOutput)을 비활성화하여 사용자가 버튼을 클릭할 수 없도록 한다.
JCheckBox chckbxReading = new JCheckBox("독서");
chckbxReading.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(chckbxReading.isSelected()) { // 독서 체크박스를 선택하면
btnOutput.setEnabled(false);
} else {
btnOutput.setEnabled(true);
}
}
});
chckbxReading.setBounds(235, 6, 115, 23);
frame.getContentPane().add(chckbxReading);
btnOutput = new JButton("출력");
btnOutput.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String result = "음악 : " + chckbxMusic.isSelected() + "\n"
+ "영화 : " + chckbxMovie.isSelected() + "\n"
+ "독서 : " + chckbxReading.isSelected() + "\n";
textArea.setText(result);
}
});
btnOutput.setBounds(358, 6, 97, 23);
frame.getContentPane().add(btnOutput)
GUI10
전체 코드
package edu.java.gui10;
import java.awt.EventQueue;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JSeparator;
import java.awt.event.ActionListener;
import java.io.File;
import java.awt.event.ActionEvent;
public class GuiMain10 {
private JFrame frame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GuiMain10 window = new GuiMain10();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public GuiMain10() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);
JMenu mnFile = new JMenu("File");
menuBar.add(mnFile);
JMenuItem mntmOpen = new JMenuItem("Open");
mntmOpen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//JFileChooser : 파일을 선택할 수 있는 팝업창
System.out.println("클릭");
JFileChooser chooser = new JFileChooser();
int result = chooser.showOpenDialog(null);
System.out.println(result);
if(result == JFileChooser.APPROVE_OPTION) { // 확인 버튼 클릭
System.out.println("파일선택");
File selected = chooser.getSelectedFile();
System.out.println(selected.getAbsolutePath());
}else { //취소 버튼을 누르면
System.out.println("취소");
}
}
});
mnFile.add(mntmOpen);
JMenu mntmSave = new JMenu("Save");
mnFile.add(mntmSave);
JSeparator separator = new JSeparator();
mnFile.add(separator);
JMenuItem mntmExit = new JMenuItem("Exit");
mntmExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// ConfirmDialog :
// Yes(확인) - No(아니오) - Cancel(취소) 버튼을 갖는 다이얼로그
int result =
JOptionPane.showConfirmDialog(frame.getContentPane(), "종료하시겠습니까?");
// parentComponent : 부모컴퍼넌트를 설정. 현재 컴퍼넌트의 보여줄 위치를 설정한다.
System.out.println("선택 결과 : " + result);
if(result == JOptionPane.YES_OPTION) {
// 프로그램 종료 :
// System.exit(0); 정상 종료
// System.exit(0 이외의 숫자); 비정상 종료
System.exit(0);
} else {
System.out.println("취소");
}
}
});
mnFile.add(mntmExit);
JMenu mnHelp = new JMenu("Help");
menuBar.add(mnHelp);
JMenuItem mntmAbout = new JMenuItem("About");
mntmAbout.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 매시지와 Ok버튼만 있는 다이얼로그 : MessageDialog
JOptionPane.showMessageDialog(frame, "버전 1.0");
}
});
mnHelp.add(mntmAbout);
}
}
GUI 11
GuiMain11
package edu.java.gui11;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class GuiMain11 {
private JFrame frame;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GuiMain11 window = new GuiMain11();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public GuiMain11() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JButton btn1 = new JButton("New Frame");
btn1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// JFrame myFrame = new JFrame();
// myFrame.setBounds(10, 10, 400, 400);
// System.out.println("프레임 생성");
// myFrame.setVisible(true);
// 일반적으로 새로운 프레임이나, 다이얼로그를 생성할 때는
// 각 클래스들을 상속받는 자식 클래스를 만들어서 사용하는 것이
// 편의성 면에서 더 좋음
MyFrame myFrame = new MyFrame();
myFrame.setVisible(true);
// frame.setVisible(false); // 메인 프레임을 안보이게
}
});
btn1.setFont(new Font("맑은 고딕", Font.BOLD, 30));
btn1.setBounds(12, 10, 410, 82);
frame.getContentPane().add(btn1);
JButton btn2 = new JButton("New Dialog");
btn2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
MyDialog myDialog = new MyDialog();
myDialog.setVisible(true);
}
});
btn2.setFont(new Font("맑은 고딕", Font.BOLD, 30));
btn2.setBounds(12, 108, 410, 82);
frame.getContentPane().add(btn2);
}
}
MyDialog
package edu.java.gui11;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class MyDialog extends JDialog {
private final JPanel contentPanel = new JPanel();
public MyDialog() {
setBounds(100, 100, 450, 300);
getContentPane().setLayout(new BorderLayout());
contentPanel.setLayout(new FlowLayout());
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
getContentPane().add(contentPanel, BorderLayout.CENTER);
{
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
getContentPane().add(buttonPane, BorderLayout.SOUTH);
{
JButton okButton = new JButton("OK");
okButton.setActionCommand("OK");
buttonPane.add(okButton);
getRootPane().setDefaultButton(okButton);
}
{
JButton cancelButton = new JButton("Cancel");
cancelButton.setActionCommand("Cancel");
buttonPane.add(cancelButton);
}
}
}
}
MyFrame
package edu.java.gui11;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
public class MyFrame extends JFrame {
// 하나의 package에 two Main은 존재할 수 없다.
private JPanel contentPane;
public MyFrame() {
// JFrame.EXIT_ON_CLOSE : 프로그램 전체 종료
// JFrame.DISPOSE_ON_CLOSE : 현재 창만 종료
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel(); // => frame.getContentPane() 과 동일
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JButton btnNewButton = new JButton("New button");
contentPane.add(btnNewButton, BorderLayout.CENTER);
}
}
GUI12
GuiMain12
package edu.java.gui12;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class GuiMain12 {
private JFrame frame;
private JTextField textField;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GuiMain12 window = new GuiMain12();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public GuiMain12() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
textField = new JTextField();
textField.setBounds(156, 38, 116, 21);
frame.getContentPane().add(textField);
textField.setColumns(10);
JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String text = textField.getText();
MyFrame myFrame = new MyFrame(text);
myFrame.setVisible(true);
}
});
btnNewButton.setBounds(167, 100, 97, 23);
frame.getContentPane().add(btnNewButton);
}
}
MyFrame
package edu.java.gui12;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
public class MyFrame extends JFrame {
// 하나의 package에 two Main은 존재할 수 없다.
private JPanel contentPane;
public MyFrame(String text) {
// JFrame.EXIT_ON_CLOSE : 프로그램 전체 종료
// JFrame.DISPOSE_ON_CLOSE : 현재 창만 종료
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel(); // => frame.getContentPane() 과 동일
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JButton btnNewButton = new JButton(text);
contentPane.add(btnNewButton, BorderLayout.CENTER);
}
}
'백엔드 교육과정 > 2월' 카테고리의 다른 글
2024_02_28_ SQL 설치 & 기본 문법 (0) | 2024.02.28 |
---|---|
2024.02.28_연락처 프로그램 ver.0.5 (0) | 2024.02.28 |
2024.02.26_GUI_Window Builder 설치 , 사용(GUI01~GUI08) (0) | 2024.02.26 |
2024.02.23_File 클래스(생성,삭제) , 연락처 ver 0.3 , 복습시 사용 사이트 추천 (0) | 2024.02.23 |
2024.02.22_Thread, File, HW6 (0) | 2024.02.22 |