수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

GUI부분인데.. 거의다 했는데 마지막 한군데서막히내요..

하람

2023.04.01

스윙에서 먼저 콤보 박스에서 사각형,원,타원중 하나를 선택해서 ok버튼을 누르면

그에 해당하는 도형이 밑에 그려지게 만든건데요..

ok버튼은 제대로 작동을 하는데

콤보밖스에 감시자를 달지 않았는데도 콤보밖스에 마우스를 클릭할때마다 패널의 paint함수가 계속 호출되는 현상이

일어나고 있습니다.. 간단한거일줄 알고 고쳐볼려고 했는데 도저히 안되네요...

어떻게 수정해야 할지 알려주세요..
그리고 이너클래스를 처음으로사용해 봤는데 이런식으로 사용하는게 맞는지도 알려주시면 감사합니다.^^

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

public class Choose extends JFrame{
private JPanel cp;
private Container c;
private JLabel label;
private JPanel p;
private JButton ok;
private JComboBox combo;
private Vector vecCombo;
private ActionListener buttonlistener = new Listener();

public Choose(){
super(도형 그리기);
setData();
setGUI();
setListener();
}

public void setData(){
c = getContentPane();
label = new JLabel(만든이 : 유영남);
ok = new JButton(ok);
vecCombo = new Vector();
vecCombo.add(선택);
vecCombo.add(사각형);
vecCombo.add(원);
vecCombo.add(타원);

combo = new JComboBox(vecCombo);
p = new JPanel(new FlowLayout());
cp = new CPanel();
}
public void setGUI(){
p.add(combo);
p.add(ok);

c.add(North,p);
c.add(Center,cp);
c.add(South,label);

setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300,300);
setVisible(true);
}
public void setListener(){
ok.addActionListener(buttonlistener);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
setVisible(false);
dispose();
System.exit(0);
}
});
}

public class Rect{
int x,y,w,h;
public Rect(){
this(0,0,0,0);
}
public Rect(int x, int y, int w, int h){
this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
public void paint(Graphics g){
g.drawRect(x,y,w,h);
}
}
public class Circle{
int x,y,w,h;
public Circle(){
this(0,0,0,0);
}
public Circle(int x, int y, int w, int h){
this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
public void paint(Graphics g){
g.drawOval(x,y,w,h);
}
}

public class CPanel extends JPanel{
public CPanel(){
}
public void paint(Graphics g){
System.out.println(1);
String str = (String)combo.getSelectedItem();

if(str.equals(사각형)){
Rect r = new Rect(50,50,100,100);
r.paint(g);

}else if(str.equals(원)){
Circle c = new Circle(100,100,50,50);
c.paint(g);

}else if(str.equals(타원)){
Circle c = new Circle(100,100,100,50);
c.paint(g);

}else{
}cp.setVisible(true);
}
}

public class Listener implements ActionListener{
public void actionPerformed(ActionEvent e){
Graphics g = cp.getGraphics();
cp.setVisible(false);
cp.paint(g);
}
}
public static void main(String args[]){
new Choose();
}
}

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

  • 참이

    현재 combo의 선택과 좌표를 저장하는 것을 만들어서 OK눌렀을때 갱신되고 그 외에는 같은 좌표에 같은 모양을 반복적으로 그리도록 하면 안될까용?

  • 환찬

    아..원래 그런거였구나..-ㅁ-.. 그럼 혹시 그걸 막을수 있는 방법이 있나요? 버튼을 눌렀을때만 화면이 바뀌도록
    하는게 목적인데 if문을 이용하면 될려나..ㅋ

  • 사과

    콤보밖스에 감시자를 달지 않았는데도 콤보밖스에 마우스를 클릭할때마다 패널의 paint함수가 계속 호출되는 현상이 일어나고 있습니다 --- 원래 그런겁니다. ㅡ ㅡ

    콤보박스가 열였다고 닫히면서 자신이 속해 있는 컴포넌트를 내부적으로 repaint() 호출하게끔 되어 있습니다.
    만약, 이렇게 안된다면, 콤보박스가 열였다 닫히면 흔적이 남아있겠죠..

번호 제 목 글쓴이 날짜
2701748 아이피 변경 부분이요... 날애 2025-07-17
2701665 자바스크립트 // 왜 if 두개를 쓰면 오류가 나죠? (2) 글리슨 2025-07-16
2701636 모바일웹 게시판 만들기 조언좀 부탁드려요 ㅜㅜ (2) 정훈 2025-07-16
2701610 [질문] AS3 액션으로 스테이지 사이즈를 조절할 수 있는 방법이 있을까요? (1) 앵겨쪼 2025-07-15
2701556 input text에 한글을 default 하려면.. (3) 히나 2025-07-15
2701528 apmsetup 접속이.... (5) 곰돌이 2025-07-15
2701506 암호를 *로 (6) 도도한 2025-07-14
2701475 배열최대값 찾기인데; 소스좀 해석해주세요; Orange 2025-07-14
2701397 세로 100% 푸터부분이 바닥에 안붙어요(세로 100% 되는 소스를 썼거든요) 꽃겨울 2025-07-13
2701369 [긴급]로드해온 swf가 갑자기 사라지는 현상..(익스10) (2) 곰돌이 2025-07-13
2701340 [c++]학교 과제 질문이요...... (3) 기쁨해 2025-07-13
2701311 구글 뉴스검색최적화 작업은 누구의 영역인가요? 많은 조언 부탁드려요! 리나 2025-07-13
2701285 아이폰이나 안드로이드 폰 인터넷으로 볼때 배꽃 2025-07-12
2701230 테마 설정하면 밑에 뜨는 글 삭제 (1) 창의적 2025-07-12
2701177 css적용이 안되요~ (6) 다니엘 2025-07-11
2701151 사이트작업시 inputbox 가 readonly 형태표시 어떻게 하시나요? (1) 찬내 2025-07-11
2701123 간단한 select 질문입니다 (3) 천사의눈물 2025-07-11
2701061 비베질문.. 똘끼 2025-07-10
2701034 메일폼 내 script 삽입가능한 방법 없을까요.. (2) 마음새 2025-07-10
2701008 분명히 버튼을 만들었는데 액션이 안걸립니다. (3) 재찬 2025-07-10
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com