본문 바로가기

BackEnd/Java

[java]이것이 자바다 부록 Java UI 11 (Swing을 이용한 툴바 컴포넌트)

728x90
반응형

1. 툴바 컴포넌트

툴바는 메뉴바 아래에 위치하고 주로 버튼들이 배치되는 컨테이너이다. 메뉴보다는 빠르게 원하는 기능을 마우스로 선택할 수 있기 때문에 사용자들은 메뉴보다는 툴바를 더 선호한다. Swing은 툴바 생성을 위해서 다음과 같은 컴포넌트를 제공하고 있다.

 

NO 컴포넌트 설명
1 JToolBar 툴바 생성을 위한 컴포넌트
2 JToolBar.Separator 버튼들을 그룹 짓기 위해 공백을 제공하는 컴포넌트

 

 

◎ 툴바 버튼을 클릭시 어떤 버튼이 클릭되었는지 메시지로 알려주는 예제

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;
import javax.swing.border.SoftBevelBorder;


public class JToolBarExample extends JFrame {
	private JMenuBar jMenuBar;
	private JToolBar jToolBar;
	private JButton btnNew, btnSave, btnCopy, btnPaste;
		
	// 메인 윈도우 설정
	public JToolBarExample() {
		this.setTitle("JFrame");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setJMenuBar(getJMenuBar());
	
		// JMenuBar를 JFrame의 북쪽에 배치
		this.getContentPane().add(getJToolBar(), BorderLayout.NORTH);
		
		this.setSize(300, 200);
	}
	
	// JMenuBar 생성	
	public JMenuBar getJMenuBar() {
		if(jMenuBar == null) {
			jMenuBar = new JMenuBar();
			jMenuBar.add(new JMenu("파일"));
			jMenuBar.add(new JMenu("도움말"));
		}
		return jMenuBar;
	}
	
	// JToolBar 생성
	public JToolBar getJToolBar() {
		if(jToolBar == null) {
			jToolBar = new JToolBar();
			jToolBar.add(getBtnNew());
			jToolBar.add(getBtnSave());
			jToolBar.addSeparator();
			jToolBar.add(getBtnCopy());
			jToolBar.add(getBtnPaste());
		}
		return jToolBar;
	}
		
	// JToolBar의 New 버튼 생성	
	public JButton getBtnNew() {
		if(btnNew == null) {
			btnNew = new JButton();
			btnNew.setIcon(new ImageIcon(getClass().getResource("new.gif")));;
			btnNew.setBorder(new SoftBevelBorder(SoftBevelBorder.RAISED));
			btnNew.setToolTipText("새로만들기");
			btnNew.addActionListener(actionListener);
		}
		return btnNew;
	}
	
	// JToolBar의 Save 버튼 생성
	public JButton getBtnSave() {
		if(btnSave == null) {
			btnSave = new JButton();
			btnSave.setIcon(new ImageIcon(getClass().getResource("save.gif")));;
			btnSave.setBorder(new SoftBevelBorder(SoftBevelBorder.RAISED));
			btnSave.setToolTipText("저장");
			btnSave.addActionListener(actionListener);
		}
		return btnSave;
	}
	
	
	// JToolBar의 Copy 버튼 생성
	public JButton getBtnCopy() {
		if(btnCopy == null) {
			btnCopy = new JButton();
			btnCopy.setIcon(new ImageIcon(getClass().getResource("copy.gif")));;
			btnCopy.setBorder(new SoftBevelBorder(SoftBevelBorder.RAISED));
			btnCopy.setToolTipText("복사");
			btnCopy.addActionListener(actionListener);
		}
		return btnCopy;
	}
	
	
	// JToolBar의 Paste 버튼 생성
	public JButton getBtnPaste() {
		if(btnPaste == null) {
			btnPaste = new JButton();
			btnPaste.setIcon(new ImageIcon(getClass().getResource("paste.gif")));;
			btnPaste.setBorder(new SoftBevelBorder(SoftBevelBorder.RAISED));
			btnPaste.setToolTipText("붙여넣기");
			btnPaste.addActionListener(actionListener);
		}
		return btnPaste;
	}
	
	
	// JToolBar의 버튼 이벤트를 처리
	private ActionListener actionListener = new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent e) {
			if(e.getSource() == btnNew) {
				JOptionPane.showMessageDialog(
					JToolBarExample.this, "[새로만들기]를 클릭");					
			} else if(e.getSource() == btnSave) {
				JOptionPane.showMessageDialog(
					JToolBarExample.this, "[저장]를 클릭");				
			} else if(e.getSource() == btnCopy) {
				JOptionPane.showMessageDialog(
					JToolBarExample.this, "[복사]를 클릭");				
			} else if(e.getSource() == btnPaste) {
				JOptionPane.showMessageDialog(
					JToolBarExample.this, "[붙여넣기]를 클릭");				
			}
		} 
	};
	
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JToolBarExample jFram = new JToolBarExample();
				jFram.setVisible(true);
			}
		});
	}
}

 

 

JToolBar을 이용해 툴바의 위치를 생성할 수 있는 ToolBar를 구현해보았습니다.

 

버튼을 이용해서 ToolBar의 위치에다 넣으니 좀 더 깔끔하게 정리가 되네요!!

 

더 많은 기능들에 대해서 배워볼게요~!!

 

많은 분들의 피드백은 언제나 환영합니다!  많은 댓글 부탁드려요~~

 

728x90
반응형