[그림 14-11] 최상위 메뉴와 하위 메뉴
[그림 14-12] JMenu 클래스 다이어그램
속성 | 데이터 타입 | get | is | set | 디폴트 값 |
---|---|---|---|---|---|
accessibleContexto | Accessible Context | · | JMenu.accessibleJMenu( ) | ||
component | Component | · | |||
componentOrientation1.4, o | ComponentOrientation | · | · | From L&F | |
delay | int | · | · | 0 | |
itemCount | int | · | 0 | ||
itemi | JMenuItem | · | null | ||
layouto | LayoutManager | · | · | OverlayLayout( ) | |
menuComponentCount | int | · | 0 | ||
menuComponenti | Component | · | null | ||
menuComponents | Component[ ] | · | |||
menuListeners1.4 | MenuListener[ ] | · | |||
modelo | ButtonModel | · | · | DefaultButtonModel( ) | |
popupMenu | JPopupMenu | · | |||
popupMenuVisible | boolean | · | · | false | |
selected | boolean | · | · | false | |
subElements | MenuElement[ ] | · | |||
tearOffu | boolean | · | Throws an Error | ||
topLevelMenub, o | boolean | · | |||
UIb | MenuUI | · | From L&F | ||
UIClassID | String | · | "MenuUI" | ||
1.4since 1.4, bbound, iindexed, ooverridden, uunimplemented |
public JMenu( ) public JMenu(Action a) public JMenu(String s) public JMenu(String s, boolean b)기본적인 JMenu를 초기화 한다. Action을 메뉴와 연결하거나 tearOff 속성을 위한 boolean 값 뿐만 아니라 메뉴에 나타나는 특정한 문자열을 사용할 수도 있다.
public JMenuItem add(JMenuItem menuItem) public Component add(Component c) public void add(String s) public JMenuItem add(Action a)메뉴에 다양한 요소들을 추가할 수 있다. JMenuItem과 JComponent 객체들이 추가될 수 있지만 MenuElement 인터페이스를 상속 받았다면 후자의 방법이 더 좋다. 인자로 String 값을 주면 해당 문자열을 가지는 메뉴 아이템이 생성된다. Action을 설정하면 해당 JMenuItem를 얻기 위해 Action의 문자와 아이콘 속성이 사용되며 아이콘 오른쪽에 문자열이 나타난다. 설정된 것은 Action에 관한 연결을 가지고 있고 속성들의 변화를 반영하기 위해 갱신된다. 결과적으로 JMenuItem이 반환되고 포맷을 변경할 수 있다.
public void addSeparator( )메뉴에 구분자를 추가할 수 있다. 보통 구분자는 메뉴를 가로지르는 단일 수평선으로 구성되어 있다.
public void insert(String s, int index) public JMenuItem insert(JMenuItem mi, int index) public JMenuItem insert(Action a, int index)특정 인덱스에 메뉴 아이템을 삽입한다. 인덱스 값은 반드시 양수가 되거나 메소드를 사용할 때 IllegalArgumentException 예외를 발생시켜야 하며 JMenuItem, String, 또는 Action을 사용할 수 있다. 인자로 String 값을 주면 해당 문자열을 가지는 메뉴 아이템이 생성된다. Action을 설정하면 해당 JMenuItem를 얻기 위해 Action의 문자와 아이콘 속성이 사용되며 아이콘 오른쪽에 문자열이 나타난다. 설정된 것은 Action에 관한 연결을 가지고 있고 속성들의 변화를 반영하기 위해 갱신된다. 결과적으로 JMenuItem이 반환되고 포맷에 대해 변경을 가할 수 있다. 모든 메뉴 아이템의 인덱스들은 하나씩 증가하고 특정한 위치를 나타낸다.
public void insertSeparator(int index)특정 인덱스 위치에 수평 구분자를 삽입한다. 인덱스가 양의 값이 아니면 IllegalArgumentException을 발생시킨다. 모든 메뉴 아이템의 인덱스들은 하나씩 증가하고 특정한 위치를 나타낸다.
public void remove(JMenuItem item) public void remove(int index)특정 인덱스를 나타내는 메뉴 아이템과 변수 JMenuItem과 일치하는 메뉴 아이템을 제거한다. 만약 일치하지 않는다면 메뉴에 아무런 변화도 일어나지 않는다. 메소드가 제대로 작동한다면 특정 인덱스 이후의 메뉴 아이템의 인덱스들은 하나씩 감소한다.
public void removeAll( )메뉴로부터 모든 아이템을 제거한다.
public void updateUI( )기본 사용자 인터페이스 매니저를 강제로 갱신하여 새로운 MenuUI를 나타내기 위한 대리자(delegate)를 초기화 한다.
public void setMenuLocation(int x, int y)화면에 보이는 메뉴의 위치를 설정한다.
public boolean isMenuComponent(Component c)현재 메뉴에서 컴포넌트 c의 존재 여부를 나타낸다. 이 메소드는 모든 하위메뉴를 검색한다.
public String paramString( )메뉴 속성의 디버깅을 위해 현재 상태를 나타내는 String을 반환한다.
public void addMenuListener(MenuListener listener) public void removeMenuListener(MenuListener listener)메뉴의 이벤트를 받는 리스너 리스트로부터 MenuListener를 제거하거나 추가한다.
public void menuSelectionChanged(boolean isIncluded) public MenuElement[ ] getSubElements( ) public Component getComponent( ) public void processKeyEvent(KeyEvent event, MenuElement path[ ], MenuSelectionManager manager)MenuElement 인터페이스에 대해서는 다음에 논의하겠다.
참고 도서 Java Swing, 2nd Edition |
// MenuExample.java // import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; public class MenuExample extends JPanel { public JTextPane pane; public JMenuBar menuBar; public MenuExample( ) { menuBar = new JMenuBar( ); JMenu formatMenu = new JMenu("Justify"); formatMenu.setMnemonic("J"); MenuAction leftJustifyAction = new MenuAction("Left", new ImageIcon("left.gif")); MenuAction rightJustifyAction = new MenuAction("Right", new ImageIcon("right.gif")); MenuAction centerJustifyAction = new MenuAction("Center", new ImageIcon("center.gif")); MenuAction fullJustifyAction = new MenuAction("Full", new ImageIcon("full.gif")); JMenuItem item; item = formatMenu.add(leftJustifyAction); item.setMnemonic("L"); item = formatMenu.add(rightJustifyAction); item.setMnemonic("R"); item = formatMenu.add(centerJustifyAction); item.setMnemonic("C"); item = formatMenu.add(fullJustifyAction); item.setMnemonic("F"); menuBar.add(formatMenu); menuBar.setBorder(new BevelBorder(BevelBorder.RAISED)); } class MenuAction extends AbstractAction { public MenuAction(String text, Icon icon) { super(text,icon); } public void actionPerformed(ActionEvent e) { try { pane.getStyledDocument( ).insertString(0 , "Action ["+e.getActionCommand( )+"] performed!\n", null); } catch (Exception ex) { ex.printStackTrace( ); } } } public static void main(String s[ ]) { MenuExample example = new MenuExample( ); example.pane = new JTextPane( ); example.pane.setPreferredSize(new Dimension(250, 250)); example.pane.setBorder(new BevelBorder(BevelBorder.LOWERED)); JFrame frame = new JFrame("Menu Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setJMenuBar(example.menuBar); frame.getContentPane( ).add(example.pane, BorderLayout.CENTER); frame.pack( ); frame.setVisible(true); } }모든 Action은 내부 클래스의 MenuAction 인스턴스이다. 메뉴에 해당하는 각각의 Action을 추가하기 때문에 이미지가 왼쪽에 오는 적당한 JMenuItem을 생성한다. 이것은 원하는 방법으로 메뉴의 결과를 조절할 수 있게 해주며, 메뉴 아이템의 밑줄 단축키를 만들 수 있다. 플랫폼이 밑줄 단축키를 지원하면 다양한 플랫폼 위에서 이 프로그램을 사용할 수 있는 장점이 있다. 그렇지만 단순히 다양한 플랫폼 지원을 위해 사용자 인터페이스 부분에 밑줄 단축키를 의지하는 것은 좋지 않다(사실 모든 플랫폼이 지원하지 않는다면 사용하지 않는 것이 더 좋다).
[그림 14-13] 밑줄 단축키와 아이콘이 있는 메뉴 아이템
public MenuEvent(Object source)생성자는 이벤트를 발생시키는 객체의 참조자를 가지고 있다.
public abstract void menuCanceled(MenuEvent e)메뉴가 취소되거나 화면으로부터 사라졌을 때 발생한다.
public abstract void menuDeselected(MenuEvent e)특정 메뉴의 타이틀 버튼이 선택해제 되었을 때 발생한다.
public abstract void menuSelected(MenuEvent e)특정 메뉴의 타이틀 버튼이 선택되었을 때 발생한다.
최신 콘텐츠