2014-09-25 31 views
5

먼저 웹 개발자이자 초보 자바 프로그래머입니다. 내 상사는 응용 프로그램에서이 버튼을하라고 요구하고있다 :Java에서 라운드 JButton을 만드는 방법

enter image description here

내 사용자 정의 버튼 클래스는 재사용 할 수 있도록 JButton 또는 BasicButtonUI를 확장해야합니다.

스택 오버플로에 대한 연구를했는데, 특히 상사의 시간 제한에 대한 답변을 이해하지 못했습니다.

+7

http://java-swing-tips.blogspot.com/2008/11/rounded-corner-jbutton.html –

+2

'첫째, 웹 Developer'입니다 - 가난한 연구를하기 전에, 어떤 아이디어를 whos는 upvoted 없습니다 이 질문은, 어떤 그래픽, 그냥 테두리 및 ButtonModel에서 이벤트를 재정의 할 필요가 없습니다 – mKorbel

+0

무엇 ... 누가 이것을 upvoted? : D 당신이 있는지 [여기에 아무것도 당신을 위해 ??] (http://stackoverflow.com/search?q=round+jbutton) StackOverflow 당신을 위해 일을 끝낼 곳이 아니란 것을 기억하십시오. 지금까지 시도한 것과 중단 된 부분에 대한 개요를 제공해주십시오. 또한 왜 JButton을 확장하고 뻔뻔스럽지 않은지 추론을 제공하려고 시도하면 여기에 서두르지 않을 것입니다. – avalancha

답변

13

자신 만의 구성 요소를 만들어야합니다.

오버라이드 paintComponent에 JPanel과에있어서, 상기의 paintComponent 방법 연신 내부 (즉 기입) 컬러 회색 둥근 Rectangle2D를, :.

RoundRectangle2D roundedRectangle = new RoundRectangle2D.Float(x, y, w, h, 10, 10); 
g.fill(roundedRectangle); 

(마지막 두 값의 곡률을 결정 놀아 당신이) 당신이 원하는 것을 얻을 때까지

는 이제 X를 이동 Y하고 NE을 그릴 때 있도록 높이을 감소 xt 직사각형의 경우 회색 직사각형 안에 위치합니다. 그래픽 색상을 파란색으로 설정 한 다음 다음과 같이하십시오.

RoundRectangle2D roundedRectangle2 = new RoundRectangle2D.Float(x + 5, y + 5, w - 10, h - 10, 10, 10); 
g.fill(roundedRectangle2); 

텍스트를 추가해야합니다. 텍스트를 추가하려면 x 및 y 위치가 필요합니다. 정확한 x 위치와 y 위치는 계산하기 까다로울 수 있으므로 FontMetrics을 사용해야 직사각형 모양에 대한 자세한 정보를 얻을 수 있습니다. Fontmetrics에는 x와 y가 무엇인지 결정하는 데 도움이되는 stringWidth()와 getHeight()와 같은 메소드가 있습니다.

g.drawString("Click Me", x, y); 

마지막으로, 패널에 마우스 동작 수신기가 있어야합니다. 청취자는 마우스가 단추 위에있을 때이를 찾은 다음 구성 요소를 다시 그려야합니다.

사각형을 shape 개체로 캐스팅 할 수 있으며 마우스가 모양인지 여부를 계산할 수 있습니다. 예를 들면 :

가 포함되어있는 경우
shape.contains(x,y) 

패널에 다음 호출 칠하고() 또는 에 updateUI()을 색상을 변경합니다.

참고 : 색 객체은 마우스 오버를 통해 변경할 수 있도록 클래스의 클래스 수준 필드로 유지되어야합니다.

희망이 도움이됩니다.

+0

을 확인하실 수 있습니다. –

+0

내가 추가 할 수있는 것들이 더 있습니다. 그러나 내 대답에 충분하지 않은지 알려주십시오. –

+0

다른 것들이 무엇인지 알려주세요. 내가 더 잘 만들 수 있습니다. 감사합니다 –

2

할 수있는 방법이 있습니다.

1) JButton에는 inbuilt API setIcon이 있습니다. 여기에 ImageIcon을 설정할 수 있습니다.

2) 마우스 수신기 (마우스 입력, 마우스 종료)를 추가하여 아이콘을 필요한 것으로 바꿀 수 있습니다.

3) Make a button round - 매력적인 버튼 만들기를 참조하십시오.

+0

+1 SSCCE/MCVE 형식의 올바른 코드 링크 – mKorbel

4

는 그래픽 API를 사용하여 직접 이미지를 그리려하지 않거나 ImageIcon 객체로 사용하고 setRolloverIcon()setIcon()을 사용할 수있는 것보다 당신은 이미지, 그래픽 디자이너에서 올 수 becaue합니다.

이 경우에는 내가 이런 식
class ButtonRollover { 

    private String normalImagePath; 
    private String rolloverImagePath; 

    public ButtonRollover(String normalImagePath, String rolloverImagePath) { 
     this.normalImagePath = normalImagePath; 
     this.rolloverImagePath = rolloverImagePath; 
    } 

    public void apply(AbstractButton abstractButton) { 
     abstractButton.setBorderPainted(false); 
     abstractButton.setBackground(new Color(0, 0, 0, 0)); 
     abstractButton.setRolloverIcon(createImageIcon(rolloverImagePath)); 
     abstractButton.setIcon(createImageIcon(normalImagePath)); 
    } 

    private ImageIcon createImageIcon(String path) { 
     java.net.URL imgURL = getClass().getResource(path); 
     if (imgURL != null) { 
      return new ImageIcon(imgURL); 
     } else { 
      System.err.println("Couldn't find file: " + path); 
      return null; 
     } 
    } 
} 

그것을 사용하는 것보다

할 것입니다. 예 :

public class Main extends JFrame { 

    public static void main(String[] args) { 
     Main main = new Main(); 
     main.setBackground(Color.WHITE); 
     main.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     main.setSize(640, 480); 

     Container contentPane = main.getContentPane(); 

     ButtonRollover buttonRollover = new ButtonRollover("/bt_normal.png", 
       "/bt_hover.png"); 

     JButton btn = new JButton(); 
     buttonRollover.apply(btn); 

     contentPane.add(btn); 
     main.setVisible(true); 
    } 
} 

이미지 파일을 클래스 경로에 넣기 만하면됩니다.

0
public class Main extends JFrame { 

    public static void main(String[] args) { 
     Main main = new Main(); 
     main.setBackground(Color.WHITE); 
     main.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     main.setSize(640, 480); 

     Container contentPane = main.getContentPane(); 

     ButtonRollover buttonRollover = new ButtonRollover("/bt_normal.png", 
       "/bt_hover.png"); 

     JButton btn = new JButton(); 
     buttonRollover.apply(btn); 

     contentPane.add(btn); 
     main.setVisible(true); 
    } 
} 
관련 문제