자바를 처음 시작한다는 가정하에 사소한 것부터 하나하나 짚고 넘어가며 따라하기 쉽도록
예제를 중심으로 모든 설명이 사용자의 관점에서 자세하게 기술되어 있는것이 특징입니다.
"강이"의 자바 강좌는 본 블로그(alecture.blogspot.com)와 제휴를 통해
독점적으로 공급될 예정이며 내용의 수정은 공급자의 제한으로 불가하고
사이트 출처를 밝히는데 한해 어디서나 자유롭게 쓸수있도록 합의하였음을 알립니다.
2011년 7월 3일 일요일
스윙으로 라디오버튼 만들기(JRadioButton)
자바의 스윙을 이용해서 라디오버튼(JRadioButton)을 만들어 보겠다. 라디오버튼이 뭐냐고 물으신다면 위의 그림을 보기 바란다. 저렇게 버튼을 선택하는 것을 라디오버튼이라고 부른다. 뤠이디오버른~이라고도 한다.ㅎㅎ 이것이 끝이 아니다. 명령어 단 한줄의 마법(?)으로 아래와 같은 결과도 얻을수 있다. 일석이조라고나 할까? ^^
혹시나 위와같은 프레임을 구경해본적이 있을지 모르겠다. 가끔가다가 애플같은 아기자기한 소프트웨어를 보다보면 이쁘장하게 꾸민 이런 프레임을 만날수 있는데 이게 JFrame 클래스를 이용하면 명령어 단 한줄로 가능하다. 궁금하셨던 분들은 오늘 예제를 유심히 보시라~^^
위의 예제는 언제나 그렇듯 필자가 핵심내용만 아낌없이 집중적으로 쏟아부은 자바 스윙의 라디오버튼에 관한 소스이므로 그냥 보기만 해도 신기하게 이해가 될것이다.ㅎㅎ 간단히 설명하자면 라디오버튼을 만들기 위해 JRadioButton 클래스를 이용하고 각 항목에 따른 객체생성자를 항목이름과 함께 만든다. 각 항목을 열거하기 위해 역시 자바 스윙 패키지에 있는 ButtonGroup 클래스를 이용해 각 항목을 add( ) 메소드를 이용해 열거하고 다시 프레임안에다가 역시 add( ) 메소드를 이용해 아까 만들어놓은 버튼들을 다 집어넣으면 땡~이다. 여기서 ButtonGroup은 쓰지않아도 정상적으로 작동되는 것처럼 보이나 한번 선택하면 다시 고칠수 없는 치명적인 버그(?)가 생긴다. 무엇인지는 직접 실행해서 찾아보기 바란다.ㅎㅎ 그리고 예제의 메인메소드에 있는 첫줄이 바로 앞에서 소개한 명령어 단 한줄의 마법(?)이다. 넣느냐 안넣느냐에 따라서 결과물이 위처럼 바뀌니 직접 실행하면서 응용해보기 바란다.^^
피드 구독하기:
댓글 (Atom)
버튼 그룹은 안만들어도
답글삭제결과는 똑같네요???
버튼 그룹을 안만드시면 복수 선택이 가능하시게 됩니다
답글삭제import javax.swing.border.*;
답글삭제import java.awt.*;
import javax.swing.*;
import javax.swing.JRadioButton;
import javax.swing.ButtonGroup;
class Cal
{
JFrame frame;
JPanel panel, inPanel;
JMenu menu;
JMenuItem item;
JMenuBar menuBar;
JButton button;
JLabel label;
String[] mainMenu = {"파일(F)","편집(E)","도구(T)","도움말(H)"};
String[][] subMenu = {{"새파일(N)", "종료(X)"},{"복사(C)", "붙여넣기(V)"},
{"설정(P)", "정렬(O)"}, {"버전(L)", "도움말(A)"}};
String[][] buttnName = {{"Sta", "Ave", "Sum", "s", "Dat"},
{"F-E", "(", ")", "dms", "Exp", "In", "sin", "x^y", "log", "cos", "x^3", "n!", "tan", "x^2", "1/x"},
{"MC", "MR", "MS", "M+", "pi"},
{"7", "8", "9", "/", "Mod", "And", "4", "5", "6", "*",
"Or", "Xor", "1", "2", "3", "-", "Lsh", "Not", "0", "+/-",
".", "+", "=", "Int", "A", "B", "C", "D", "E", "F"}};
public Cal() {
frame = new JFrame("계산기");
menuBar = new JMenuBar();
panel = new JPanel(new FlowLayout(1, 10, 0));
}
// 서브 메뉴 생성
void createSubMenu(String strMenu, int menuCnt) {
menu = new JMenu(strMenu);
for(int cnt = 0; cnt < subMenu[menuCnt].length; cnt++) {
item = new JMenuItem(subMenu[menuCnt][cnt]);
menu.add(item);
}
menuBar.add(menu);
}
// 메인 메뉴 생성
void setMenu() {
for(int cnt = 0; cnt < mainMenu.length; cnt++)
createSubMenu(mainMenu[cnt], cnt);
frame.setJMenuBar(menuBar);
}
void mainLayout() {
// 프레임 북쪽에 텍스트 필드 부착
frame.add(new JTextField("0.", 20), "North");
// 프레임 센터에 라디오 버튼 등 부착
public class Cal
{
public static void main(String[] args)
{
JFrame frame = new JFrame("경훈이의 자바강좌");
frame.setDefaultCloseOperation(JFrame.EXIT ON CLOSE)
frame.setLayout(new flowLayout());
JRadioButton button1 = new JRadioButton("최고(100)");
JRadioButton button2 = new JRadioButton("최부(800)");
JRadioButton button3 = new JRadioButton("최ㅋ(600)");
ButtonGroup bg = new ButtonGroup()
bg.add(button1);
bg.add(button2);
bg.add(button3);
frame.add(new JLabel("소감:"));
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.setSize(400,100);
frame.setuisible(true);
}
};
public
// 프레임 하단에 패널 부착 후 버튼 부착
panel.add(addSouthButton(0, 5, 1, 3, 3));
panel.add(addSouthButton(1, 5, 3, 3, 3));
panel.add(addSouthButton(2, 5, 1, 3, 3));
panel.add(addSouthButton(3, 5, 6, 3, 3));
frame.add(panel, "South");
}
JPanel addSouthButton(int count, int xSize, int ySize, int xMargin, int yMargin) {
inPanel = new JPanel(new GridLayout(xSize, ySize, xMargin, yMargin));
for(int cnt = 0; cnt < buttnName[count].length; cnt++) {
button = new JButton(buttnName[count][cnt]);
inPanel.add(button);
}
return inPanel;
}
void setGUI() {
setMenu();
mainLayout();
frame.pack();
frame.show();
}
public static void main(String[] args)
{
Cal cal = new Cal();
cal.setGUI();
new RadioButton();
}
}
소스수ㅈ
소스 수정부탁드려요
답글삭제