java - 구현 - 자바 gui 종류




Java에서 사용자 정의 JButton 만들기 (4)

버튼 내부의 이미지뿐만 아니라 버튼 그래픽으로 JButton 을 만드는 방법이 있습니까?

그렇지 않은 경우 Java에서 사용자 정의 JButton 을 만드는 다른 방법이 있습니까?


Java를 처음 배울 때는 Yahtzee를 만들어야했고 하나의 JPanel 모든 것을 그리는 대신 사용자 정의 Swing 구성 요소 및 컨테이너를 만드는 것이 멋지다고 생각했습니다. 물론 Swing 구성 요소를 확장하면 paint() 메서드를 사용하여 예쁜 그림을 인쇄하는 것만으로는 수행 할 수없는 키보드 단축키 및 기타 내게 필요한 옵션 기능을 추가 할 수 있습니다. 그러나 가장 좋은 방법은 아니지만 좋은 출발점이 될 수 있습니다.

편집 8/6-이미지에서 분명하지 않은 경우 각 다이는 클릭 할 수있는 버튼입니다. 아래의 DiceContainer 로 이동합니다. 소스 코드를 보면 각 다이 버튼이 값에 따라 동적으로 그려지는 것을 볼 수 있습니다.



기본 단계는 다음과 같습니다.

  1. JComponent 를 확장하는 클래스를 만듭니다.
  2. 생성자에서 부모 생성자 super() 호출
  3. 클래스가 MouseListener 구현하는지 확인하십시오.
  4. 이것을 생성자에 넣으십시오.

    enableInputMethods(true);   
    addMouseListener(this);
  5. 다음 방법을 재정의하십시오.

    public Dimension getPreferredSize()  
    public Dimension getMinimumSize()  
    public Dimension getMaximumSize()
  6. 이 방법을 재정의하십시오.

    public void paintComponent(Graphics g)

getMinimumSize()getMaximumSize() 가 동일한 값을 리턴한다고 가정하여 단추를 그릴 때 작업해야하는 공간의 양은 getPreferredSize() 의해 정의됩니다. 나는 이것을 많이 실험하지 않았지만 GUI에 사용하는 레이아웃에 따라 버튼이 완전히 다르게 보일 수 있습니다.

그리고 마지막으로 소스 코드 입니다. 내가 아무것도 놓친 경우


나는 아마 잘못된 직접으로 백만 마일을 가고있을 것입니다 (그러나 나는 젊습니다 : P). 그래픽에 사용자가 그래픽을 표시 할 때 패널에 그래픽을 추가 한 다음 마우스 리스터를 그래픽 객체에 추가 할 수 없었습니다.


초기 CS 클래스 이후로 SWING 개발을 수행하지 않았지만 내장되지 않은 경우 javax.swing.AbstractButton 상속하고 직접 만들 수 있습니다. 기존 프레임 워크와 함께 무언가를 연결하는 것은 매우 간단해야합니다.


항상 Synth 모양과 느낌을 시도 할 수 있습니다. 사용하려는 이미지와 함께 일종의 스타일 시트 역할을하는 xml 파일을 제공합니다. 코드는 다음과 같습니다.

try {
    SynthLookAndFeel synth = new SynthLookAndFeel();
    Class aClass = MainFrame.class;
    InputStream stream = aClass.getResourceAsStream("\\default.xml");

    if (stream == null) {
        System.err.println("Missing configuration file");
        System.exit(-1);                
    }

    synth.load(stream, aClass);

    UIManager.setLookAndFeel(synth);
} catch (ParseException pe) {
    System.err.println("Bad configuration file");
    pe.printStackTrace();
    System.exit(-2);
} catch (UnsupportedLookAndFeelException ulfe) {
    System.err.println("Old JRE in use. Get a new one");
    System.exit(-3);
}

거기에서 평소와 같이 JButton을 추가하십시오. 유일한 변경 사항은 setName (string) 메소드를 사용하여 xml 파일에서 단추를 맵핑 할 내용을 식별하는 것입니다.

xml 파일은 다음과 같습니다.

<synth>
    <style id="button">
        <font name="DIALOG" size="12" style="BOLD"/>
        <state value="MOUSE_OVER">
            <imagePainter method="buttonBackground" path="dirt.png" sourceInsets="2 2 2 2"/>
            <insets top="2" botton="2" right="2" left="2"/>
        </state>
        <state value="ENABLED">
            <imagePainter method="buttonBackground" path="dirt.png" sourceInsets="2 2 2 2"/>
            <insets top="2" botton="2" right="2" left="2"/>
        </state>
    </style>
    <bind style="button" type="name" key="dirt"/>
</synth>

바인드 요소는 매핑 할 대상을 지정합니다 (이 예제에서는 해당 스타일을 name 속성이 "dirt"로 설정된 모든 버튼에 적용 함).

그리고 몇 가지 유용한 링크 :

http://javadesktop.org/articles/synth/

http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/synth.html





jbutton