비슷한가요....역시 코딩보다 디자인이 너무 힘드네요. 하~!

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();
	}
 

}




Posted by 세이나린
,

계산기에 필요한 레이아웃이나 버튼, 텍스트필드는 포스팅했고, 메뉴쪽은 포스팅 안했지만 

계산기를 만들면서 포스팅하면 되겠죠.

일단 디자인은


윈도우 계산기의 디자인을 기반으로 만들어보겠습니다. 몇가지 기능은 좀 빼야겠네요.

Posted by 세이나린
,

FlowLayout은 왼쪽에서 오른쪽으로 배치를 합니다.

우측에 더이상 공간이 없으면 다음줄로 내려와서 또 왼쪽부터 배치를 하고

FlowLayout은 기본적으로 가운데 정렬입니다. 

그리고 상하좌우 5픽셀씩의 간격이 있습니다.


import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class Test extends JFrame{ JPanel jp = new JPanel(); // 패널 초기화 JButton jb1 = new JButton("버튼1"); // 버튼 초기화 JButton jb2 = new JButton("버튼2"); // 버튼 초기화 JButton jb3 = new JButton("버튼3"); // 버튼 초기화 JButton jb4 = new JButton("버튼4"); // 버튼 초기화 JButton jb5 = new JButton("버튼5"); // 버튼 초기화 JButton jb6 = new JButton("버튼6"); // 버튼 초기화 public Test(){ super("Test"); // JFrame의 생성자에 값을 입력하면 윈도창에 해당 값이 입력됩니다. jp.add(jb1); // jp라는 패널에 jb1라는 버튼 추가 jp.add(jb2); // jp라는 패널에 jb2라는 버튼 추가 jp.add(jb3); // jp라는 패널에 jb3라는 버튼 추가 jp.add(jb4); // jp라는 패널에 jb4라는 버튼 추가 jp.add(jb5); // jp라는 패널에 jb5라는 버튼 추가 jp.add(jb6); // jp라는 패널에 jb6라는 버튼 추가 jp.setLayout(new FlowLayout()); // FlowLayout add(jp); // JFrame에 jp라는 패널 추가 setSize(400, 300); // 윈도우의 크기 가로x세로 setVisible(true); // 창을 보여줄떄 true, 숨길때 false setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // x 버튼을 눌렀을때 종료 } public static void main(String[] args){ new Test(); } 

}


GridLayout



import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class Test extends JFrame{ JPanel jp = new JPanel(); // 패널 초기화 JButton jb1 = new JButton("버튼1"); // 버튼 초기화 JButton jb2 = new JButton("버튼2"); // 버튼 초기화 JButton jb3 = new JButton("버튼3"); // 버튼 초기화 JButton jb4 = new JButton("버튼4"); // 버튼 초기화 JButton jb5 = new JButton("버튼5"); // 버튼 초기화 JButton jb6 = new JButton("버튼6"); // 버튼 초기화 public Test(){ super("Test"); // JFrame의 생성자에 값을 입력하면 윈도창에 해당 값이 입력됩니다. jp.add(jb1); // jp라는 패널에 jb라는 버튼 추가 jp.add(jb2); // jp라는 패널에 jb라는 버튼 추가 jp.add(jb3); // jp라는 패널에 jb라는 버튼 추가 jp.add(jb4); // jp라는 패널에 jb라는 버튼 추가 jp.add(jb5); // jp라는 패널에 jb라는 버튼 추가 jp.add(jb6); // jp라는 패널에 jb라는 버튼 추가 jp.setLayout(new GridLayout(3,2)); // GridLayout add(jp); // JFrame에 jp라는 패널 추가 setSize(400, 300); // 윈도우의 크기 가로x세로 setVisible(true); // 창을 보여줄떄 true, 숨길때 false setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // x 버튼을 눌렀을때 종료 } public static void main(String[] args){ new Test(); } 

}



BorderLayout

import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Test extends JFrame{
	JPanel jp = new JPanel(); // 패널 초기화
	JButton jb1 = new JButton("버튼1"); // 버튼 초기화
	JButton jb2 = new JButton("버튼2"); // 버튼 초기화
	JButton jb3 = new JButton("버튼3"); // 버튼 초기화
	JButton jb4 = new JButton("버튼4"); // 버튼 초기화
	JButton jb5 = new JButton("버튼5"); // 버튼 초기화
	JButton jb6 = new JButton("버튼6"); // 버튼 초기화
	
	public Test(){
		super("Test"); // JFrame의 생성자에 값을 입력하면 윈도창에 해당 값이 입력됩니다.
		
		jp.setLayout(new BorderLayout()); // BorderLayout
		
		jp.add(jb1, "North"); // jp라는 패널에 jb라는 버튼 추가
		jp.add(jb2, "West"); // jp라는 패널에 jb라는 버튼 추가
		jp.add(jb3, "Center"); // jp라는 패널에 jb라는 버튼 추가
		jp.add(jb4, "East"); // jp라는 패널에 jb라는 버튼 추가
		jp.add(jb5, "South"); // jp라는 패널에 jb라는 버튼 추가
		
		add(jp); // JFrame에 jp라는 패널 추가
		
		setSize(400, 300); // 윈도우의 크기 가로x세로
		setVisible(true); // 창을 보여줄떄 true, 숨길때 false
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // x 버튼을 눌렀을때 종료
	}

	public static void main(String[] args){
		new Test();
	}
}


'Programming > JAVA - AWT/SWING' 카테고리의 다른 글

[Swing] 텍스트에어리어 만들기  (0) 2013.03.01
[Swing] 텍스트필드 만들기  (0) 2013.03.01
[Swing] 레이블 만들기  (0) 2013.03.01
[Swing] 버튼 만들기  (0) 2013.03.01
[Swing] 자바 윈도우 생성  (0) 2013.03.01
Posted by 세이나린
,