2008년 8월 29일 금요일

자바 JComboBox




import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class GraphicTest extends JFrame implements ActionListener {

JLabel x1L, y1L, x2L, y2L, z1L, z2L;
JTextField x1T, y1T, x2T,y2T,z1T,z2T;
JCheckBox fill;
JRadioButton line, circle, rect, rectR, arc; // 선 원 사각형 둥근사각형 호
JButton draw; // 2개의 패널 생성 위,아래
DrCanvas can;
JComboBox combo;
////////////////////////////////////
//color 추가하세요
Color Color;
public GraphicTest(){
x1L = new JLabel("x1");
y1L = new JLabel("y1");
x2L = new JLabel("x2");
y2L = new JLabel("y2");
z1L = new JLabel("z1");
z2L = new JLabel("z2");

x1T = new JTextField("100",3);
y1T = new JTextField("50",3);
x2T = new JTextField("150",3);
y2T = new JTextField("130",3);
z1T = new JTextField("50",3);
z2T = new JTextField("50",3);

line = new JRadioButton("선");
circle = new JRadioButton("원");
rect = new JRadioButton("사각형",true);
rectR = new JRadioButton("둥근사각형");
arc = new JRadioButton("호");

ButtonGroup bg = new ButtonGroup(); // RadioButton은 항상 그룹으로 묶어줘야된다.
bg.add(line);
bg.add(circle);
bg.add(rect);
bg.add(rectR);
bg.add(arc);


draw = new JButton("그리기");

can = new DrCanvas();

fill = new JCheckBox("채우기", true);

String[] color = {"빨강","파랑","노랑","초록","흰색"};
combo = new JComboBox(color);

JPanel p = new JPanel();

p.add(x1L);
p.add(x1T);
p.add(y1L);
p.add(y1T);
p.add(x2L);
p.add(x2T);
p.add(y2L);
p.add(y2T);
p.add(z1L);
p.add(z1T);
p.add(z2L);
p.add(z2T);

p.add(fill);

JPanel p2 = new JPanel();

p2.add(line);
p2.add(circle);
p2.add(rect);
p2.add(rectR);
p2.add(arc);
p2.add(combo);
p2.add(draw);

this.add("South",p2);
this.add("North",p);
this.add("Center",can);


setSize(600,300);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);

//이벤트 처리
draw.addActionListener(this);
combo.addActionListener(this);
} // GraphicTest()

public void actionPerformed(ActionEvent e) {
////////////////////////////////////////////
// 이부분 추가하세요
if(e.getSource() == combo){

JComboBox cb = (JComboBox)e.getSource();
// cb.getSelectedIndex() 이것이 0,1,2.. 값을 리턴합니다.
// 의문점 쪽지주세요
switch (cb.getSelectedIndex()) {
case 0:
Color=Color.red;
break;
case 1:
Color=Color.blue;
break;
case 2:
Color=Color.yellow;
break;
case 3:
Color=Color.GREEN;
break;
case 4:
Color=Color.white;

}


}

can.repaint();

}// ActionEvent


class DrCanvas extends Canvas{



public DrCanvas(){

this.setBackground(new Color(140,60,80)); // 캔버스 색
this.setForeground(new Color(255,255,255)); // 도형 색상

} //DrCanvas()

public void paint(Graphics g){

//좌표 얻어오기
int x1 = Integer.parseInt(x1T.getText().trim());
int y1 = Integer.parseInt(y1T.getText().trim());
int x2 = Integer.parseInt(x2T.getText().trim());
int y2 = Integer.parseInt(y2T.getText().trim());
int z1 = Integer.parseInt(z1T.getText().trim());
int z2 = Integer.parseInt(z2T.getText().trim());

System.out.println();


System.out.println("그리기 시작" );

// 도형 그리자
if(fill.isSelected() ) { // 채우기 선택
/////////////////////////////////////////////
// 이부분 추가하세요
g.setColor(Color);

if( line.isSelected() )
g.drawLine(x1,y1,x2,y2);

else if( circle.isSelected() )
g.fillOval(x1,y1,x2,y2);

else if( rect.isSelected() )
g.fillRect(x1,y1,x2,y2);

else if( rectR.isSelected() )
g.fillRoundRect(x1,y1,x2,y2,z1,z2);

else if( arc.isSelected() )
g.fillArc(x1,y1,x2,y2,z1,z2);
} // if

else { // 채우기 해제
if(line.isSelected() ) {
g.drawLine(x1,y1,x2,y2);

} else if(circle.isSelected() ) {
g.drawOval(x1,y1,x2,y2);

} else if(rect.isSelected() ) {
g.drawRect(x1,y1,x2,y2);

} else if(rectR.isSelected() ) {
g.drawRoundRect(x1,y1,x2,y2,z1,z2);

} else if(arc.isSelected() ) {
g.drawArc(x1,y1,x2,y2,z1,z2);
}

} // else
} // paint()
} // DrCanvas()



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

/*
문]
String[] color = {"빨강","파랑","노랑","초록","흰색"};
combo = new JComboBox(color);
이렇게 넣어놓으면 선택된 박스의 값을 어떻게 가져오나요...
System.out.println(combo) 라고 하니까 아주 긴 여러가지가
저기 빨강이 color[0] 이자나용 그럼 이 0 을 가져오고싶습니다...
*/

댓글 2개:

Ishaya seon :
작성자가 댓글을 삭제했습니다.
Ishaya seon :

콤보박스에서 선택된 데이터 값을 가져오는 방법을 말씀하시는거 같은데요.
정석인지는 잘 모르겠지만 여러가지 방법이 있는거 같습니다.

1번째jComboBox.getSelectedItem.toString()

2번째
jComboBox.getItemAt(jComboBox.getSelectedIndex()).toString()

둘다 돌아가는건 똑같으리라 생각됩니다.
1번 내부로 돌아가면 2번과 같으리라 생각됩니다.

기본적으로 API로 제공되리라 생각햇는데 없는거 같더라구요..

문의사항 있으시면 http://pmguda.com
에 글 남겨주세요.^^ 즐프 하삼

댓글 쓰기

-


Sidewinder


World


FishMusic


LaughingBaby