비슷한가요....역시 코딩보다 디자인이 너무 힘드네요. 하~!
WindowBuilder로는 뭐랄까.....대략 짜고나면 코드가 뒤죽박죽이라 그냥 코딩으로 레이아웃 짰습니다.
메뉴바에 단축키도 다 설정을 해놨습니다.
import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.KeyStroke; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; @SuppressWarnings("serial") // Warnning 무시 public class Calculator extends JFrame implements ActionListener { JPanel jpButton, jpResult; // 패널 초기화 JMenuBar jmb; // 메뉴바 초기화 JMenu jmEdit, jmHelp; // 메뉴 초기화 JMenuItem mCopy, mPaste, mHelp, mInfo; // 메뉴 아이템 초기화 JLabel jlbResult1, jlbResult2; // 레이블 초기화 JButton[] jbButton = null; // 버튼배열 초기화 String[] numStr = { "←", "CE", "C", "/", "7", "8", "9", "*", "4", "5", "6", "-", "1", "2", "3", "+", "0", "00", ".", "=" }; // 버튼에 들어갈 값 public Calculator(){ super("계산기 by 세이나린"); // 타이틀 바 getContentPane().setLayout(new BorderLayout()); // 전체 레이아웃을 BorderLayout /** 메뉴바 시작*/ jmb = new JMenuBar(); jmEdit = new JMenu("편집(E)"); jmHelp = new JMenu("도움말(H)"); mCopy = new JMenuItem("복사"); mPaste = new JMenuItem("붙여넣기"); mHelp = new JMenuItem("도움말 보기"); mInfo = new JMenuItem("계산기 정보"); jmEdit.add(mCopy); // jmEdit라는 메뉴에 mCopy라는 메뉴아이템 추가 jmEdit.add(mPaste); // jmEdit라는 메뉴에 mPaste라는 메뉴아이템 추가 jmHelp.add(mHelp); // jmHelp라는 메뉴에 mHelp라는 메뉴아이템 추가 jmHelp.add(mInfo); // jmHelp라는 메뉴에 mInfo라는 메뉴아이템 추가 jmb.add(jmEdit); // jmb라는 메뉴바에 jmEdit라는 메뉴 추가 jmb.add(jmHelp); // jmb라는 메뉴바에 jmHelp라는 메뉴 추가 setJMenuBar(jmb); // jmb메뉴바 추가 /** 메뉴바 끝 */ /** 레이블 시작 */ jpResult = new JPanel(new GridLayout(2,1)); // jpResult라는 패널에 GrideLayot을 적용, 2 x 1 jpResult.setBackground(Color.WHITE); // jpResult라는 패널에 흰색 배경적용 jlbResult1 = new JLabel("", JLabel.RIGHT); // jlbResult1라는 값 없는 레이블, 우측정렬 jlbResult2 = new JLabel("0", JLabel.RIGHT); // jlbResult2라는 기본값 0인 레이블, 우측정렬 jlbResult2.setFont(new Font("굴림", Font.BOLD, 20)); // jlbResult2 레이블에 폰트는 굴림, 진하게, 크게20 적용 jpResult.add(jlbResult1); // jpResult 패널에 jlbResult1 레이블 추가 jpResult.add(jlbResult2); // jpResult 패널에 jlbResult2 레이블 추가 /** 레이블 끝 */ /** 버튼 시작 */ jpButton = new JPanel(new GridLayout(5, 4, 2, 2)); // jpButton라는 패널, GridLayout적용, 5 x 4, 간격은 가로세로 2씩 jpButton.setBackground(Color.WHITE); // jpButton 패널 배경은 흰색 jbButton = new JButton[numStr.length]; // jbButton 버튼 배열 초기화 // jbButton에 표기할 값들 적용 for(int i=0; i<numStr.length; i++) { jbButton[i] = new JButton(numStr[i]); jbButton[i].setFont(new Font("굴림", Font.BOLD, 20)); jpButton.add(jbButton[i]); jbButton[i].addActionListener(this); } /** 버튼 색 시작 */ for(int j=0; j<numStr.length; j++) { if(j < 3) { jbButton[j].setForeground(Color.RED); }else if(j==3 || j==7 || j==11 || j==15 || j==19) { jbButton[j].setForeground(Color.BLUE); } } jbButton[0].setForeground(Color.RED); /** 버튼 색 끝 */ /** 버튼 단축키 시작 */ jmEdit.setMnemonic('E'); jmHelp.setMnemonic('H'); mCopy.setAccelerator(KeyStroke.getKeyStroke('C', InputEvent.CTRL_MASK)); mPaste.setAccelerator(KeyStroke.getKeyStroke('V', InputEvent.CTRL_MASK)); mHelp.setAccelerator(KeyStroke.getKeyStroke('H', InputEvent.CTRL_MASK)); mInfo.setAccelerator(KeyStroke.getKeyStroke('I', InputEvent.CTRL_MASK)); /** 버튼 단축키 끝 */ mCopy.addActionListener(this); mPaste.addActionListener(this); mHelp.addActionListener(this); mInfo.addActionListener(this); /** 버튼 끝 */ getContentPane().add("North", jpResult); getContentPane().add("Center", jpButton); setSize(300, 400); getContentPane().setBackground(Color.WHITE); setResizable(false); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } /** 버튼 이벤트 시작 */ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub } /** 버튼 이벤트 끝 */ public static void main(String[] args) { new Calculator(); }
}
'Programming > JAVA - 계산기만들기' 카테고리의 다른 글
[Swing] 계산기 만들기 - 완성 (1) | 2013.03.03 |
---|---|
[Swing] 계산기 만들기(1. 구상) (0) | 2013.03.01 |