버튼을 클릭 한 후 패널을 반복해서 다시 칠합니다.

mlh

첫 번째 버튼을 누를 때마다 사각형이 계속해서 다시 그려지고 두 번째 버튼을 누르면 색상이 변경되는 2 개의 버튼이있는 프로그램을 작성하려고합니다. 그러나 그것은 한 번만 다시 칠합니다 :( 누구나 도울 수 있다면 감사하겠습니다.

class Squre {
JFrame frame;
JButton button1;
JButton button2;
MyPanel panel;

public static void main(String[] args){
    Squre s= new Squre ();
    s.go();

}
public void go(){
    frame = new JFrame();
    panel= new MyPanel();
    button1= new JButton();
    button2= new JButton();

    button1.setText("START");
    //button1.setSize(30, 20);
    frame.setVisible(true);
    frame.setSize(700,700);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(BorderLayout.CENTER ,panel);// add panel
    frame .getContentPane().add(BorderLayout.WEST, button1);// add the west button
    frame .getContentPane().add(BorderLayout.EAST, button2);//ADD THE EAST BUTTON
    button1.addActionListener(new StrListener());
    button2.setText("EXPLOSION");
    button2.addActionListener(new ExpListener());
}
private class StrListener implements ActionListener{

    public void actionPerformed(ActionEvent e){
        do{
            frame.repaint();

        }
        while(e.equals(button2)==true);
}
}
private class ExpListener implements ActionListener{
  //  @Override
    public void actionPerformed(ActionEvent e) {
        System.exit(0);
    }
}class MyPanel extends JPanel{
public void paintComponent(Graphics g){
     g.fillRect(0,0,this.getWidth(),this.getHeight());

     int red = (int) (Math.random() * 255);  
     int green = (int) (Math.random() * 255);   
     int blue = (int) (Math.random() * 255); 
     Color rn=new Color(red, green, blue);
     g.setColor(rn);
     g.fillRect(250, 250, 50, 50);



}
}}
마다와 프리 야 샨타
e.equals(button1) // event not equal to a button

e.equals(button1).but event과 같지 않기 때문에 결코 참이 되지 않습니다. button하지만 repaintdo while 루프이기 때문에 한 번 실행됩니다.

당신은 사용해야합니다

e.getSource().equals(button1);

클릭 한 버튼의 유무를 확인합니다 button1.

하지만 사용하더라도 e.getSource().equals(button1)예상대로 색상이 변경되는 것을 볼 수 없습니다. EDT 내에서이 시간이 많이 걸리는 while 루프를 실행 하면 EDT스레드 를 차단 하므로 색상이 변경되지 않지만을 넣으면 sout루프가 계속 실행되는 것을 볼 수 있습니다. 이를 위해 스윙 타이머사용할 수 있습니다 . 스윙 타이머는 EDT를 차단하지 않습니다.

스윙 타이머 사용 ....

swing timer// 가져와야합니다.import javax.swing.Timer;

private class StrListener implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(button1)) {
            Timer t = new Timer(100, new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent ae) {
                    frame.repaint();
                }
            });
            t.start();
        }
    }
}

여기에 이미지 설명 입력

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

뒤로 버튼을 클릭 한 후 앱을 종료합니다.

분류에서Dev

다른 버튼을 클릭 한 후 버튼 활성화

분류에서Dev

버튼을 클릭 한 후 Meteor 다시 렌더링 템플릿

분류에서Dev

로드시 버튼 # 1을 클릭 한 다음 버튼 # 2를 두 번 클릭해야합니다. 버튼 # 1도 두 번 클릭해야합니다.

분류에서Dev

Android는 FragmentActivity에서 뒤로 버튼을 클릭 한 후 활동을 유지합니다.

분류에서Dev

다른 버튼을 클릭 한 후 버튼 색상을 변경하는 방법

분류에서Dev

다른 버튼을 클릭 한 후 버튼 색상을 변경하는 방법

분류에서Dev

버튼을 클릭 한 후 다른 활동에서 편집 텍스트 변경

분류에서Dev

Svelte에서 버튼을 클릭 한 후 다시 입력에 집중하는 방법은 무엇입니까?

분류에서Dev

클릭 한 후 버튼을 제거 하시겠습니까?

분류에서Dev

SharedPreferences는 버튼을 클릭 한 후 보이지 않는 버튼 변경을 저장하고 다른 버튼을 표시합니다.

분류에서Dev

버튼 클릭시 배열을 반복합니다.

분류에서Dev

신속하게 tableview 셀 중 하나에있는 버튼을 클릭 한 후 tableview를 다시로드합니다.

분류에서Dev

SharedPreferences는 버튼을 클릭 한 후 보이지 않는 버튼 변경을 저장합니다.

분류에서Dev

버튼을 클릭 한 후 HTML 테이블을 구문 분석하여 표시합니다.

분류에서Dev

adf 쿼리에서 검색 버튼을 클릭 한 후 양식을 어떻게 표시합니까?

분류에서Dev

클릭 리스너의 라디오 버튼은 토글 버튼을 선택한 후에 만 작동합니다.

분류에서Dev

NSAttributedString을 클릭 한 후 시각적 상태를 복원합니다.

분류에서Dev

다른 버튼을 잠금 해제 한 후 버튼이 다시 잠 깁니다.

분류에서Dev

Flask로 버튼을 클릭 한 후 HTML을 열 수 없습니다.

분류에서Dev

브라우저 또는 키보드에서 뒤로 버튼을 클릭 한 후 자바 스크립트에서 시간을 계속합니다.

분류에서Dev

뒤로 버튼을 클릭 한 후 드릴 다운 할 수 없습니다.

분류에서Dev

odoo 8에서 메뉴 버튼을 클릭 한 후 기존 ID의 양식보기를 표시합니까?

분류에서Dev

그리드보기에서 편집 버튼을 클릭 한 후 드롭 다운의 이전 값을 동일한 드롭 다운에 할당합니다.

분류에서Dev

버튼을 클릭 한 후 다음 시트로 이동 한 후 데이터 추가

분류에서Dev

간단한 작업 : 실제로 버튼을 클릭 할 필요없이 "시도"를 클릭 한 후 발생하는 작업을 원합니다.

분류에서Dev

html 버튼을 클릭 한 후 아무것도 에코 할 수 없습니다.

분류에서Dev

"쓰기"버튼을 클릭 한 후 Thunderbird 60이 응답하지 않습니다.

분류에서Dev

JavaFX에서 fxml을 사용하여 버튼을 클릭 한 후 BorderPane의 한 부분을 다시로드하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    뒤로 버튼을 클릭 한 후 앱을 종료합니다.

  2. 2

    다른 버튼을 클릭 한 후 버튼 활성화

  3. 3

    버튼을 클릭 한 후 Meteor 다시 렌더링 템플릿

  4. 4

    로드시 버튼 # 1을 클릭 한 다음 버튼 # 2를 두 번 클릭해야합니다. 버튼 # 1도 두 번 클릭해야합니다.

  5. 5

    Android는 FragmentActivity에서 뒤로 버튼을 클릭 한 후 활동을 유지합니다.

  6. 6

    다른 버튼을 클릭 한 후 버튼 색상을 변경하는 방법

  7. 7

    다른 버튼을 클릭 한 후 버튼 색상을 변경하는 방법

  8. 8

    버튼을 클릭 한 후 다른 활동에서 편집 텍스트 변경

  9. 9

    Svelte에서 버튼을 클릭 한 후 다시 입력에 집중하는 방법은 무엇입니까?

  10. 10

    클릭 한 후 버튼을 제거 하시겠습니까?

  11. 11

    SharedPreferences는 버튼을 클릭 한 후 보이지 않는 버튼 변경을 저장하고 다른 버튼을 표시합니다.

  12. 12

    버튼 클릭시 배열을 반복합니다.

  13. 13

    신속하게 tableview 셀 중 하나에있는 버튼을 클릭 한 후 tableview를 다시로드합니다.

  14. 14

    SharedPreferences는 버튼을 클릭 한 후 보이지 않는 버튼 변경을 저장합니다.

  15. 15

    버튼을 클릭 한 후 HTML 테이블을 구문 분석하여 표시합니다.

  16. 16

    adf 쿼리에서 검색 버튼을 클릭 한 후 양식을 어떻게 표시합니까?

  17. 17

    클릭 리스너의 라디오 버튼은 토글 버튼을 선택한 후에 만 작동합니다.

  18. 18

    NSAttributedString을 클릭 한 후 시각적 상태를 복원합니다.

  19. 19

    다른 버튼을 잠금 해제 한 후 버튼이 다시 잠 깁니다.

  20. 20

    Flask로 버튼을 클릭 한 후 HTML을 열 수 없습니다.

  21. 21

    브라우저 또는 키보드에서 뒤로 버튼을 클릭 한 후 자바 스크립트에서 시간을 계속합니다.

  22. 22

    뒤로 버튼을 클릭 한 후 드릴 다운 할 수 없습니다.

  23. 23

    odoo 8에서 메뉴 버튼을 클릭 한 후 기존 ID의 양식보기를 표시합니까?

  24. 24

    그리드보기에서 편집 버튼을 클릭 한 후 드롭 다운의 이전 값을 동일한 드롭 다운에 할당합니다.

  25. 25

    버튼을 클릭 한 후 다음 시트로 이동 한 후 데이터 추가

  26. 26

    간단한 작업 : 실제로 버튼을 클릭 할 필요없이 "시도"를 클릭 한 후 발생하는 작업을 원합니다.

  27. 27

    html 버튼을 클릭 한 후 아무것도 에코 할 수 없습니다.

  28. 28

    "쓰기"버튼을 클릭 한 후 Thunderbird 60이 응답하지 않습니다.

  29. 29

    JavaFX에서 fxml을 사용하여 버튼을 클릭 한 후 BorderPane의 한 부분을 다시로드하는 방법은 무엇입니까?

뜨겁다태그

보관