2014-05-16 3 views
1

내 프로젝트의 경우 사용자 지정 단추를 만들어야합니다. 나는 문제가 있고 그것을 해결하는 방법을 모른다. 내 단추에 대한 배경 이미지가 있으며 품질 저하없이 끝날 텍스트에 따라 X 및 Y로 확장 가능해야합니다. 아이디어가 있으십니까?자바에서 디자인 단추 (CSS에서와 같이)

background image example

+2

당신은 자바 FX CSS의 문서에 눈 http://docs.oracle를 제공해야합니다. com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html – diegoaguilar

답변

5

스윙 플러그 봐 ComponentUI에 의해 그 위젯의 모양을 변경할 수 있습니다 & 느낌이있다. 귀하의 버튼에 대한

예 : 테스트를위한

enter image description here

class StyledButtonUI extends BasicButtonUI { 

    @Override 
    public void installUI (JComponent c) { 
     super.installUI(c); 
     AbstractButton button = (AbstractButton) c; 
     button.setOpaque(false); 
     button.setBorder(new EmptyBorder(5, 15, 5, 15)); 
    } 

    @Override 
    public void paint (Graphics g, JComponent c) { 
     AbstractButton b = (AbstractButton) c; 
     paintBackground(g, b, b.getModel().isPressed() ? 2 : 0); 
     super.paint(g, c); 
    } 

    private void paintBackground (Graphics g, JComponent c, int yOffset) { 
     Dimension size = c.getSize(); 
     Graphics2D g2 = (Graphics2D) g; 
     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
     g.setColor(c.getBackground().darker()); 
     g.fillRoundRect(0, yOffset, size.width, size.height - yOffset, 10, 10); 
     g.setColor(c.getBackground()); 
     g.fillRoundRect(0, yOffset, size.width, size.height + yOffset - 5, 10, 10); 
    } 
} 

홈페이지 방법 :

public static void main (String[] args) { 
    JFrame f = new JFrame("Button UI Test"); 
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    JPanel p = new JPanel(); 
    p.setBackground(Color.white); 
    f.setContentPane(p); 
    p.setLayout(new FlowLayout(5, 5)); 
    p.setBorder(new EmptyBorder(10, 10, 10, 10)); 

    for (int i = 1; i <= 5; i++) { 
     final JButton button = new JButton("Button #" + i); 
     button.setFont(new Font("Calibri", Font.PLAIN, 14)); 
     button.setBackground(new Color(0x2dce98)); 
     button.setForeground(Color.white); 
     // customize the button with your own look 
     button.setUI(new StyledButtonUI()); 
     p.add(button); 
    } 

    f.pack(); 
    f.setLocation(500, 500); 
    f.setVisible(true); 
} 
+1

정말 고맙습니다. 당신은 내 문제를 가능한 한 가장 단순하게 해결했습니다. 다시, 고마워요 :) 죄수로, 어떻게이 [디자인] (http://speckycdn.sdm.netdna-cdn.com/wp-content/uploads/2012/)과 같이 더 정교하게 같은 일을 할 수 있습니까? 01/preview640.jpg)? – TheNawaKer

1

당신은 이미지를 확장하고 이미지 아이콘을 생성 할 수 있습니다. 이런 식으로 뭔가 : (하십시오 ButtonUI이 경우)

ImageIcon icon = new ImageIcon("img.png"); 
Image scaledImg = icon.getImage().getScaledInstance(newWidth, newHeight, java.awt.Image.SCALE_SMOOTH); 
icon = new ImageIcon(scaledImg); 
JButton button = new JButton(icon); 
button.setHorizontalTextPosition(JButton.CENTER); 
button.setVerticalTextPosition(JButton.CENTER); 
관련 문제