명품자바프로그래밍 chapter14_lab12
실습1| 메뉴, 툴팁, 팝업 다이얼로그, 컬러 다이얼로그, 다이얼로그
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class SwingTest extends JFrame{
JLabel text = new JLabel("Text"); //글씨 기본 세팅 값 은 Text
public SwingTest() {
setTitle("Menu 만들기 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //창 닫기
Container c = getContentPane();
text.setHorizontalAlignment(SwingConstants.CENTER); //가운데 글씨가 위치하도록 설정
c.add(text,BorderLayout.NORTH); //위치지정 North에 오도록
createMenu(); //메뉴 생성, 프레임에 삽입
setSize(300,200);
setVisible(true);
}
public void createMenu() {
JMenuBar mb = new JMenuBar(); //menubar 생성
JMenuItem [] menuItem1 = new JMenuItem[3];
String[] fileItem = {"열기","저장","종료"};
JMenu fileMenu = new JMenu("파일"); //큰 제목 (파일)
FileActionListener listener1 = new FileActionListener();
for(int i=0;i<menuItem1.length;i++) { //3개의 메뉴 아이템을 파일에 삽입한다.
menuItem1[i] = new JMenuItem(fileItem[i]);
menuItem1[i].addActionListener(listener1);
if (i == 2) //만약에 i==2일 때
fileMenu.addSeparator(); //분리선 삽입
fileMenu.add(menuItem1[i]);
}
//편집 메뉴
JMenuItem [] menuItem2 = new JMenuItem[3];
String[] editItem = {"색 선택","폰트","텍스트 변경"};
JMenu editMenu = new JMenu("편집"); //큰 제목
EditActionListener listener2 = new EditActionListener();
for(int i=0;i<menuItem2.length;i++) { //3개의 메뉴 아이템을 파일에 삽입한다.
menuItem2[i] = new JMenuItem(editItem[i]);
menuItem2[i].addActionListener(listener2);
editMenu.add(menuItem2[i]);
}
//도움말 메뉴
JMenu helpMenu = new JMenu("도움말"); //큰 제목
JMenuItem info = new JMenuItem("버전 정보");
info.addActionListener(new ActionListener(){ //showMessageDialog(버전정보를 눌렀을 때)
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand() == "버전 정보") { //버전정보를 눌렀을 때
JOptionPane.showMessageDialog(null, "테스트 v1.0"); //해당 내용이 보여진다.
}
}
});
helpMenu.add(info); //메뉴 아이템info를 도움말에 삽입
//툴팁 (텍스트필드) , 해당 내용이 뜨도록
text.setToolTipText("편집에 따라 변결될 영역입니다.");
//JMenuBar에 추가
mb.add(fileMenu); mb.add(editMenu); mb.add(helpMenu);
setJMenuBar(mb);
}
class FileActionListener implements ActionListener{ //예제 14-9 참고
JFileChooser chooser = new JFileChooser(); //filechooser 선언
JFileChooser saver = new JFileChooser(); //filechooser 선언
@Override
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (cmd == "열기") { //열기를 골랐을 경우
int open = chooser.showOpenDialog(null); //showOpenDialog로 파일 열기
String filePath = chooser.getSelectedFile().getPath(); //절대 경로 얻기
text.setText(filePath + "파일이 선택되었습니다."); //텍스트 값을 해당 내용으로 변경
}
else if (cmd == "저장") { //저장을 골랐을 경우
int save = saver.showSaveDialog(null); //showSavwDialog로 파일 저장
String filePath = saver.getSelectedFile().getPath(); //절대 경로 얻기
text.setText(filePath + "파일에 저장되었습니다."); //텍스트 값을 해당 내용으로 변경
}
else if (cmd == "종료") { // 종료를 눌렀을 경우,
int result = JOptionPane.showConfirmDialog(null, "종료하시겠습니까?","Confirm",JOptionPane.YES_NO_OPTION);//showConfirmDialog창이 뜨도록하기
if (result == JOptionPane.YES_OPTION) //예를 눌렀을 경우
System.exit(0); //파일 종료
}
}
}
class EditActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (cmd == "색 선택") { //색선택을 골랐을 경우
Color selectedColor = JColorChooser.showDialog(null, "Color", Color.YELLOW); //showDialog 를 통해서 색을 선택
if(selectedColor != null) //선택한 값이 null 값이 아니라면
text.setForeground(selectedColor); //텍스트의 색을 고른 색으로 설정한다.
}
else if (cmd == "폰트") {
//실습5(선택)
}
else if (cmd == "텍스트 변경") { //텍스트 변경을 골랐을 경우
String result = JOptionPane.showInputDialog("변경할 텍스트를 입력하세요"); //showInputDialog를 띄워서 변경할 내용을 받아낸다.
if (result != null) { //입력받은 내욜리 null값이 아니라면
text.setText(result); //텍스트 값 변경
}
}
}
}
public static void main(String[] args) {
new SwingTest();
}
}
실습2| 그래픽 그리기
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class DrawGraphic extends JFrame{
Container c;
int x,y,width,height; //시작좌표, 끝 좌표
int num; //모드 변경하는 변수
Color sel_color = new Color(000); //rgb값 000 == black
public DrawGraphic() {
setTitle("그래픽 그리기");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //창 닫기
c = getContentPane();
createMenu(); //함수 호출
c.add(new MyGraphic()); //container에 그리는 MyGraphic panel 추가
setSize(400,300);
setVisible(true);
}
public void createMenu() {
JToolBar bar = new JToolBar();
bar.setBackground(Color.LIGHT_GRAY); //툴바 배경색 설정
JLabel label1 = new JLabel("도형");
JButton b1 = new JButton(" \\ "); //직선그리기
b1.addActionListener(new MyListener()); //이벤트 추가 --> 버튼 선택했을 때 모드를 정해주는 이벤트
JButton b2 = new JButton(" □ "); //사각형 그리기
b2.addActionListener(new MyListener()); //이벤트 추가 --> 버튼 선택했을 때 모드를 정해주는 이벤트
JButton b3 = new JButton(" ○ "); //원그리기
b3.addActionListener(new MyListener()); //이벤트 추가 --> 버튼 선택했을 때 모드를 정해주는 이벤트
JButton b4 = new JButton(" △ "); //polygon(삼각형) 그리기
b4.addActionListener(new MyListener()); //이벤트 추가 --> 버튼 선택했을 때 모드를 정해주는 이벤트
JLabel label2 = new JLabel(" 색 선택 ");
JButton color = new JButton(new ImageIcon("C:\\Users\\lg\\Desktop\\생활코딩\\자바\\workspace\\Lab13_1\\src\\color.png")); //이미지 넣기
color.addActionListener(new ActionListener(){ //이미지를 선택했을 때
@Override
public void actionPerformed(ActionEvent e) {
Color selectedColor = JColorChooser.showDialog(null, "색상 선택", Color.YELLOW ); //색 선택하는JColorChoser (예제 14-10)
if(selectedColor!= null) //선택한 값이 null값이 아니라면
sel_color = selectedColor; //sel_color를 선택한 값으로 저장
}
});
bar.add(label1); bar.add(b1); bar.add(b2); bar.add(b3); bar.add(b4); bar.add(label2); bar.add(color); //툴바에 추가
c.add(bar,BorderLayout.NORTH); //툴바 위치지정
}
class MyListener implements ActionListener{ //버튼을 눌렀을 때 모드를 설정하는 부분
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand(); //버튼값 가져오기
switch(cmd) { //switch문 활용 (예제 14-2)
case " \\ ": // 직선을 택했을 때
num = 0; break;
case " □ ": //네모 선택
num = 1; break;
case " ○ ": //원 선택
num = 2; break;
case " △ ": //세모 선택
num = 3; break;
}
}
}
class MyGraphic extends JPanel{
public MyGraphic() { //좌표 계산
addMouseListener(new MouseAdapter(){
@Override
public void mousePressed(MouseEvent e) { //눌렀을 떄
x=e.getX(); //마우스를 눌렀을 때의 x좌표값
y=e.getY(); //마우스를 눌렀을 때의 y좌표값
}
@Override
public void mouseReleased(MouseEvent e) { // 뗐을 때
width=e.getX()-x; //마우스를 뗐을 때의 x좌표의 시작 좌표를 빼면 width값
height= e.getY()-y; //마우스를 뗐을 때의 y좌표의 시작 좌표를 빼면 height값
}
});
addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseDragged(MouseEvent e) { //드래그 했을 때
width=e.getX()-x; // 드래그 했을 때 보일 수 있도록 width값 변경
height= e.getY()-y; // 드래그 했을 때 보일 수 있도록 height값 변경
}
});
}
@Override
protected void paintComponent(Graphics g) { //버튼에 따른 모드 설정
super.paintComponent(g);
g.setColor(sel_color); //해당 그림의 색 지정 (위에서 선택한 색== sel_color에 저장)
if(num==0) { //직선
g.drawLine(x, y, x+width, y+height);
repaint(); //repaint 호출
}
if(num==1) { //사각형
g.drawRect(x, y, width, height);
repaint(); //repaint 호출
}
if(num==2) { //원
g.drawOval(x, y, width, height);
repaint(); //repaint 호출
}
if(num==3) { //삼각형 , polygon
int xs[]= {x,x+width/2,x+width}; //왼쪽 아래 꼭짓점, 가운데 꼭짓점, 오른쪽 아래 꼭짓점
int ys[]= {y+height,y,y+height}; //왼쪽 아래 꼭짓점, 가운데 꼭짓점, 오른쪽 아래 꼭짓점
g.drawPolygon(xs,ys,3);
repaint(); //repaint 호출
}
}
}
public static void main(String[] args) {
new DrawGraphic();
}
}
'Programming > JAVA' 카테고리의 다른 글
Ch2. 변수와 자료형 (0) | 2021.07.06 |
---|---|
Ch1. 자바 프로그래밍 시작하기 (0) | 2021.07.06 |
그래픽 (0) | 2020.12.30 |
기본적인 스윙 컴포넌트와 활용 (0) | 2020.12.30 |
자바의 이벤트 처리 (0) | 2020.12.30 |
댓글