ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 02. 타이틀바 삭제
    [Java] 단축키 안내 프로그램 2021. 2. 9. 21:22

    안녕하세요 Becca입니다!

     

    단축키 안내 프로그램의 두 번째 시간입니다.

    이번 글에서는 프레임의 타이틀바를 삭제하고, 프레임의 이동방법을 수정해보도록 하겠습니다.


    프레임의 타이틀바를 삭제하는 이유는 디자인을 할 때 이상하게 보였기 때문입니다.

    그러므로 타이틀바를 삭제하고, 프레임의 이동방법을 수정해보도록 하겠습니다.

    (프레임의 이동은 타이틀바를 마우스로 클릭하여 드래그를 하는 방식인데, 타이틀바를 삭제하여 이 방법이 막힙니다.)

     

     

    [타이틀바 삭제 방법]

    MainFrame()에서 프레임의 타이틀바를 삭제하고, 크기 변경을 불가능하도록 하는 코드를 작성합니다.

    (크기 변경 불가능은 디자인을 했을 때, 망가지지 않도록 하기 위해서 넣었습니다.)

     

    public MainFrame()
    {
    	setResizable(false); // 크기 변경 불가능하도록 함
    	setUndecorated(true); // 프레임의 타이틀바를 없앰
    		
    	// setTitle("MainFrame") // 프레임의 타이틀바를 없애서 타이틀은 필요 없음
    	setSize(1100, 700);
    	setVisible(true);
    }

     

     

    이제, 프로그램을 실행하면 아래처럼 타이틀바가 없어진 프레임이 나옵니다.

    타이틀바가 없어서 프로그램을 종료하려면 작업 표시줄에서 X버튼을 눌러 종료시켜야 합니다.

    (나중에 메인 페이지에서 종료할 수 있도록 버튼을 추가할 예정입니다.)

     

     

     

    [프레임 이동방법 수정]

    1. 마우스를 클릭한 곳의 좌표를 저장하기 위해 initialClick을 선언합니다.

     

    public class MainFrame extends JFrame
    {
    	private Point initialClick; // 마우스의 x, y 좌표를 저장하기 위해 선언
        
    	public MainFrame()
    	{
    		...
    	}
    }

     

     

    2. java.awt.*java.awt.event.*을 import 합니다.

     

    import javax.swing.*;
    import java.awt.*; // Point를 사용하기 위해 import
    import java.awt.event.*; // event를 위해 import

     

     

    3. 마우스가 클릭될 경우에 대한 event를 발생시키기 위해 MouseListener(),

    3. 드래그될 경우에 대한 event를 발생시키기 위해 MouseMotionListener()를 MainFrame() 안에 적어줍니다.

     

    public MainFrame()
    {
    	setResizable(false);
    	setUndecorated(true);
    		
    	// setTitle("MainFrame")
    	setSize(1100, 700);
    	setVisible(true);
    		
    	this.addMouseListener(new moveWindows()); // 윈도우 이동하기 위해 설정
    	this.addMouseMotionListener(new moveWindows()); // 윈도우 이동하기 위해 설정
    }

     

     

    4. event가 발생했을 때 원하는 동작을 수행할 클래스 moveWindows()를 선언하고,

    4. MouseAdapter를 상속받습니다. (MouseListener(), MouseMotionListener()를 모두 포함하고 있습니다.)

     

    // 프레임 이동 (타이틀바를 없애서 이동 불가능한 것을 가능하도록 함)
    class moveWindows extends MouseAdapter
    { 
    	
    }

     

     

    5. 마우스가 눌린 경우인 mousePressed()에 현재 좌표를 저장하고, 컴포넌트를 리턴받습니다.

     

    class moveWindows extends MouseAdapter
    { 
    	public void mousePressed(MouseEvent e) 
    	{ 
    		/* 5번 */
    		initialClick = e.getPoint(); // 현재 좌표 저장
    		getComponentAt(initialClick); // 저장한 좌표를 포함한 컴포넌트를 리턴 받음
    	}
    }

     

     

    6. 마우스가 드래그된 경우인 mouseDragged()에서, 드래그 된 프레임의 정보를 jf에 저장합니다.

     

    class moveWindows extends MouseAdapter
    { 
    	public void mousePressed(MouseEvent e) 
    	{ 
    		initialClick = e.getPoint();
    		getComponentAt(initialClick);
    	}
    
    	public void mouseDragged(MouseEvent e) 
     	{
    		/* 6번 */
    		JFrame jf = (JFrame) e.getSource(); // 드래그 된 JFrame의 정보를 받아옴
    	}
    }

     

     

    7. jf의 x, y 좌표를 저장합니다.

     

    class moveWindows extends MouseAdapter
    { 
    	public void mousePressed(MouseEvent e) 
    	{ 
    		initialClick = e.getPoint();
    		getComponentAt(initialClick);
    	}
    
    	public void mouseDragged(MouseEvent e) 
     	{
    		JFrame jf = (JFrame) e.getSource();
            
    		/* 7번 */
    		int thisX = jf.getLocation().x; // jf의 x 값을 저장함
    		int thisY = jf.getLocation().y; // jf의 y 값을 저장함
    	}
    }

     

     

    8. 현재 마우스 위치의 좌표처음 마우스를 클릭한 위치의 좌표빼서 저장합니다.

     

    class moveWindows extends MouseAdapter
    { 
    	public void mousePressed(MouseEvent e) 
    	{ 
    		initialClick = e.getPoint();
    		getComponentAt(initialClick);
    	}
    
    	public void mouseDragged(MouseEvent e) 
     	{
    		JFrame jf = (JFrame) e.getSource();
                
    		int thisX = jf.getLocation().x;
    		int thisY = jf.getLocation().y;
                
     		/* 8번 */
    		int xMoved = e.getX() - initialClick.x; 
    		int yMoved = e.getY() - initialClick.y; 
    		// 현재 마우스 위치의 x, y좌표 - 첫 마우스 클릭 위치 x, y좌표
    		// initialClick를 하지 않으면 (0, 0)에 포인터가 고정된채로 움직임
    	}
    }

     

     

    9. jf의 좌표8번에서 저장한 좌표더해 저장합니다.

     

    class moveWindows extends MouseAdapter
    { 
    	public void mousePressed(MouseEvent e) 
    	{ 
    		initialClick = e.getPoint();
    		getComponentAt(initialClick);
    	}
    
    	public void mouseDragged(MouseEvent e) 
     	{
    		JFrame jf = (JFrame) e.getSource();
                
    		int thisX = jf.getLocation().x;
    		int thisY = jf.getLocation().y;
    
    		int xMoved = e.getX() - initialClick.x;
    		int yMoved = e.getY() - initialClick.y;
    		
    		/* 9번 */
    		int X = thisX + xMoved; // jf x값 + 이동한 x 값
    		int Y = thisY + yMoved; // jf y값 + 이동한 y 값
    	}
    }

     

     

    10. jf의 좌표9번의 좌표변경합니다.

     

    class moveWindows extends MouseAdapter
    { 
    	public void mousePressed(MouseEvent e) 
    	{ 
    		initialClick = e.getPoint();
    		getComponentAt(initialClick);
    	}
    
    	public void mouseDragged(MouseEvent e) 
     	{
    		JFrame jf = (JFrame) e.getSource();
                
    		int thisX = jf.getLocation().x;
    		int thisY = jf.getLocation().y;
            
    		int xMoved = e.getX() - initialClick.x;
    		int yMoved = e.getY() - initialClick.y;
    
    		int X = thisX + xMoved;
    		int Y = thisY + yMoved;
            
    		/* 10번 */
    		jf.setLocation(X, Y); // jf의 위치 변경
    	}
    }

     

     

    6 ~ 10번 과정이 이해되지 않는다면 아래 표를 참고해주세요.

     

     

    이제, 프로그램을 실행하고 프레임 안쪽을 클릭해 드래그를 하면 프레임이 움직입니다!

     

     

    [메인 프레임 전체 코드]

    package main_page;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class MainFrame extends JFrame
    {
    	private Mainpg m_pg = null;
    	
    	private Point initialClick;
    	
    	public MainFrame()
    	{
    		setResizable(false);
    		setUndecorated(true);
    		
    		// setTitle("MainFrame")
    		setSize(1100, 700);
    		setVisible(true);
    		
    		this.addMouseListener(new moveWindows());
    		this.addMouseMotionListener(new moveWindows());
    	}
    	
    	class moveWindows extends MouseAdapter
    	{ 
    		public void mousePressed(MouseEvent e) 
    		{ 
    			initialClick = e.getPoint();
    			getComponentAt(initialClick);
    		}
    
    		public void mouseDragged(MouseEvent e) 
    		{
    			JFrame jf = (JFrame) e.getSource();
                
    			int thisX = jf.getLocation().x;
    			int thisY = jf.getLocation().y;
                
    			int xMoved = e.getX() - initialClick.x;
    			int yMoved = e.getY() - initialClick.y;
                
    			int X = thisX + xMoved;
    			int Y = thisY + yMoved;
    			jf.setLocation(X, Y);
    		}
    	}
    
    	public static void main(String[] args) 
    	{
    		MainFrame mf = new MainFrame();
    	}
    }

     


    여기까지 잘 따라오셨나요?

    타이틀바 삭제는 쉽지만 프레임의 이동 방법을 수정하는 과정에서 코드의 이해가 어려웠을거라 생각합니다.

    이해가 잘 되지 않는다면 그 과정을 다시 보거나, 위의 표를 참고하여 계산을 해보셨으면 좋겠습니다!

     

    다음 글에서는 메인 페이지를 만들어보도록 하겠습니다.

    다음 글에서 만나요!

    '[Java] 단축키 안내 프로그램' 카테고리의 다른 글

    04. 크롤링  (0) 2021.03.02
    03. 메인 페이지  (0) 2021.02.17
    01. 메인 프레임  (0) 2021.01.08
    00. 프로그램 소개  (0) 2021.01.02

    댓글

Designed by Tistory.