2012-11-03 1 views
3

임의의 삼각형을 그리는 프로그램이 있습니다. 클릭 할 때 다른 임의의 삼각형을 지우고 재생성하는 버튼을 추가하고 싶습니다. 나는 다른 프로그램에서 버튼을 만들 수 있는지 테스트했다. SwingButtonTest.java (이것은 내가 어떻게 굴리는가, 나는 배우 다) 성공했다.AWT로 그려주는 프로그램에 스윙 버튼 추가

그런 다음 프로그램에서 버튼을 내 삼각형 프로그램에 표시하는 데 필요한 모든 코드를 복사했습니다. 불행히도이 프로그램은 버튼을 표시하지 않습니다 ...

다시 한 번 도움을 주시면 감사하겠습니다. 버튼이 표시되지 않는

import javax.swing.*; 

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 


@SuppressWarnings({ "serial" }) 
public class TriangleApplet extends JApplet implements ActionListener { 

    int width, height; 
    int[] coords = new int[6]; 
    JButton refresh; 

    public void init() { 
     //This stuff was added from SwingButtonTest.java 
     Container container = getContentPane(); 
     container.setLayout(null); 

     container.setLayout(null); 

     refresh= new JButton("I like trains"); 
     refresh.setBackground(Color.yellow); 
     refresh.setSize(140, 20); 
     refresh.addActionListener(this); 

     container.add(refresh); 
     //End of SwingButtonTest.java stuff 

     coords = randomTri(); 
    } 


    public static int[] randomTri() { 
     int[] pointArray = new int[6]; 
     int x; 
     for (int i = 0; i < 6; i++) { 
      x = ((int)(Math.random()*40)*10); 
      pointArray[i] = x; 
     } 
     return pointArray; 
    } 


    public void paint(Graphics g) { 
     g.setColor(Color.BLUE); 

     g.drawLine(coords[0], coords[1], coords[2], coords[3]); 
     g.drawString("A: " + coords[0]/10 + ", " + coords[1]/10, coords[0], coords[1]); 
     g.drawLine(coords[2], coords[3], coords[4], coords[5]); 
     g.drawString("B: " + coords[2]/10 + ", " + coords[3]/10, coords[2], coords[3]); 
     g.drawLine(coords[4], coords[5], coords[0], coords[1]); 
     g.drawString("C: " + coords[4]/10 + ", " + coords[5]/10, coords[4], coords[5]); 
     //Math for AB 
     int abXDif = Math.abs(coords[0]/10 - coords[2]/10); 
     int abYDif = Math.abs(coords[1]/10 - coords[3]/10); 
     int abLength = (abXDif*abXDif) + (abYDif*abYDif); 
     g.drawString("AB: Sqrt of "+ abLength, 0, 10); 
     //Math for BC 
     int bcXDif = Math.abs(coords[2]/10 - coords[4]/10); 
     int bcYDif = Math.abs(coords[3]/10 - coords[5]/10); 
     int bcLength = (bcXDif*bcXDif) + (bcYDif*bcYDif); 
     g.drawString("BC: Sqrt of "+ bcLength, 0, 20); 
     //Math for AC 
     int acXDif = Math.abs(coords[4]/10 - coords[0]/10); 
     int acYDif = Math.abs(coords[5]/10 - coords[1]/10); 
     int acLength = (acXDif*acXDif) + (acYDif*acYDif); 
     g.drawString("AC: Sqrt of "+ acLength, 0, 30); 


    } 

@Override 
public void actionPerformed(ActionEvent e) { 
    // TODO Auto-generated method stub 

} 
} 

답변

6

이유는 당신이 전화를하지 않는 경우 : paint() 방법

super.paint(g); 

. 이 호출은 버튼과 다른 추가 된 구성 요소가 그려지게합니다.

custom painting in Swing에 대한 더 나은 접근 방법은 JComponent으로 확장되고 paintComponent으로 확장되는 구성 요소에 사용자 지정 그림을 배치하여 Swing의 최적화 된 페인팅 모델을 활용하는 것입니다.

layout manager을 사용하여 크기를 &으로 지정하는 것도 고려하십시오. 절대 위치 지정을 사용하지 마십시오 (null 레이아웃). Doing Without a Layout Manager :

가능하지만 레이아웃 관리자가 없어도 가능하지만 가능한 경우 레이아웃 관리자를 사용해야합니다. 레이아웃 관리자를 사용하면 모양 및 느낌에 종속적 인 구성 요소 모양, 다양한 글꼴 크기, 컨테이너의 크기 변경 및 각기 다른 로케일에보다 쉽게 ​​조정할 수 있습니다.

+0

웹 사이트에서는 작동하지 않으며 Eclipse 애플릿 뷰어에서만 작동합니다. 비록 내가 JComponent를 가지고 그것을 수행하는 방법에 대해 궁금해하고 있었지만, 누군가가 나에게 walkthrough를 줄 수 있을까? 감사! – liboan1997

+1

1) 이것은 브라우저 태그/플러그인 문제이며 새로운 게시물이 필요합니다. 2)'JComponent' 접근 방식을 사용하고 특정 질문으로 되돌아 가십시오. 위의 사용자 정의 그림 링크를 사용하십시오. 3)이 질문에 만족하고 [다른 질문] (http://stackoverflow.com/questions/13168078/java-applet-displays-itself-multiple-times) 나는 당신을 위해 대답했다, 그 다음 ' 대답의 왼쪽에있는 '수락'눈금 표시. :) – Reimeus

+0

나는 튜토리얼을 따라 갔고 예제 중 하나는 AWT 버튼을 사용하여 이벤트를 만들었고, 클릭하면 무언가를 출력했다. 이 버튼은 올바르게 표시되었으므로 버튼을 AWT 버튼에서 JButton으로 전환했습니다. 버튼이 더 이상 표시되지 않습니다. 아무도 이유를 아나요? – liboan1997