먼저 웹 개발자이자 초보 자바 프로그래머입니다. 내 상사는 응용 프로그램에서이 버튼을하라고 요구하고있다 :Java에서 라운드 JButton을 만드는 방법
내 사용자 정의 버튼 클래스는 재사용 할 수 있도록 JButton
또는 BasicButtonUI
를 확장해야합니다.
스택 오버플로에 대한 연구를했는데, 특히 상사의 시간 제한에 대한 답변을 이해하지 못했습니다.
먼저 웹 개발자이자 초보 자바 프로그래머입니다. 내 상사는 응용 프로그램에서이 버튼을하라고 요구하고있다 :Java에서 라운드 JButton을 만드는 방법
내 사용자 정의 버튼 클래스는 재사용 할 수 있도록 JButton
또는 BasicButtonUI
를 확장해야합니다.
스택 오버플로에 대한 연구를했는데, 특히 상사의 시간 제한에 대한 답변을 이해하지 못했습니다.
자신 만의 구성 요소를 만들어야합니다.
오버라이드 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()을 색상을 변경합니다.
참고 : 색 객체은 마우스 오버를 통해 변경할 수 있도록 클래스의 클래스 수준 필드로 유지되어야합니다.
희망이 도움이됩니다.
을 확인하실 수 있습니다. –
내가 추가 할 수있는 것들이 더 있습니다. 그러나 내 대답에 충분하지 않은지 알려주십시오. –
다른 것들이 무엇인지 알려주세요. 내가 더 잘 만들 수 있습니다. 감사합니다 –
할 수있는 방법이 있습니다.
1) JButton에는 inbuilt API setIcon이 있습니다. 여기에 ImageIcon을 설정할 수 있습니다.
2) 마우스 수신기 (마우스 입력, 마우스 종료)를 추가하여 아이콘을 필요한 것으로 바꿀 수 있습니다.
3) Make a button round - 매력적인 버튼 만들기를 참조하십시오.
+1 SSCCE/MCVE 형식의 올바른 코드 링크 – mKorbel
는 그래픽 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);
}
}
이미지 파일을 클래스 경로에 넣기 만하면됩니다.
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);
}
}
http://java-swing-tips.blogspot.com/2008/11/rounded-corner-jbutton.html –
'첫째, 웹 Developer'입니다 - 가난한 연구를하기 전에, 어떤 아이디어를 whos는 upvoted 없습니다 이 질문은, 어떤 그래픽, 그냥 테두리 및 ButtonModel에서 이벤트를 재정의 할 필요가 없습니다 – mKorbel
무엇 ... 누가 이것을 upvoted? : D 당신이 있는지 [여기에 아무것도 당신을 위해 ??] (http://stackoverflow.com/search?q=round+jbutton) StackOverflow 당신을 위해 일을 끝낼 곳이 아니란 것을 기억하십시오. 지금까지 시도한 것과 중단 된 부분에 대한 개요를 제공해주십시오. 또한 왜 JButton을 확장하고 뻔뻔스럽지 않은지 추론을 제공하려고 시도하면 여기에 서두르지 않을 것입니다. – avalancha