2017-12-02 17 views
-1

내가 뭘 하려는지 사각형을 그려야 버튼을 클릭하면됩니다.Java 그래픽을 이벤트 처리와 함께 어떻게 사용할 수 있습니까?

하지만 약간의 혼란이 있습니다. 문제는 지금

package painting; 
import java.awt.*; 
import javax.swing.*; 


public class Mainting extends JPanel { 

    @Override 
    public void paintComponent(Graphics g) 
      { 
     super.paintComponent(g); 
     g.fillRect(0,0,30,30); 

      }  
} 

나는 버튼이 화면 전체를 덮고 때 그 클릭 나타납니다이 코드를 실행하면 :

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

public class Painting { 

    JFrame jf ; 
    public static void main(String[] args) {  
     Painting p = new Painting(); 
     p.runn(); 
    } 
     public void runn(){ 

     jf = new JFrame("Try"); 
     jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jf.setLocationRelativeTo(null); 
     jf.setSize(400,400);  
     jf.setVisible(true); 

     JButton jb = new JButton("Click"); 
     jb.setBounds(200,200,100,60); 
     jf.add(jb); 
     //jf.add(jb,BorderLayout.SOUTH); 
     //jf.setLayout(null);  
     Handler handle = new Handler(); 
     jb.addActionListener(handle); 
     } 
     private class Handler implements ActionListener{ 
      @Override 
      public void actionPerformed(ActionEvent ae) 
      { 
      Mainting maint = new Mainting();  
      jf.add(maint); 
     }   


} 
} 

다른 클래스 : 다음은 코드입니다 아무 반응이 없습니다. 레이아웃 관리자가 정의되지 않았기 때문에 Layout Manger를 null로 설정하려고 시도했을 때 버튼이 제대로 표시되지만 사각형을 클릭하면 (즉, null 레이아웃 매니저를 사용해 그래픽을 묘화한다).

마지막으로, 레이아웃 관리자 (예 : 테두리 레이아웃)를 설정하려고 할 때 버튼이 나타나야하지만 컴파일러에서 방향을 그리지 않고 그려야 할 매개 변수는 int입니다.

도와주세요!

+0

1) 들여 쓰기 코드 행과 블록의 논리적이고 일관된 형식을 사용하십시오. 들여 쓰기는 코드의 흐름을 따라 가기 쉽도록 만들어졌습니다. 누군가는 친절하게도 마지막 질문에서 당신을 위해 그것을했지만, 다른 사람들이 당신을 위해 끊임없이하고 있다고 기대하지 않습니다. 코드를 읽는 누군가를 위해 무엇을해야합니다. 2) 귀하의 [마지막 질문]에 대한 답변으로 게시 한 것처럼 [MCVE] 또는 [Short, Self Contained, Correct Example] (http://www.sscce.org/)를 더 빨리 보내려면 https : //stackoverflow.com/a/47605791/418556). –

답변

0

JPanel을 사용하고 버튼을 추가하십시오. setBounds()가 Swing.Something과 잘 작동하지 않습니다.

JButton button = new JButton(...); 
JPanel wrapper = new JPanel(); 
wrapper.add(button); 
frame.add(wrapper, BorderLayout.PAGE_START);