2012-02-15 5 views
0

JButtonのスタイルを、NetBeansのツールバーボタンのように見せた人は誰ですか?それはちょうど写真を表示し、あなたがその上にマウスカーソルを合わせると、1ピクセルの丸みを帯びたcorrenerの灰色の境界線が表示され、ボタンの一番上と下に異なる背景が...そのようなJButtonをスタイルすることはできないようです.... 助言がありますか?ありがとう!

enter image description here
左:ノーマル
ミドル:私は半分も半背景は本当に、たださえホバー...Java JButtonスタイリング

をペイントするために国境を得ることができないことをする必要はありません

を集中:
右ホバー
+0

"*任意の提案?" *スクリーンショットを投稿する(***高解像度画面のエディタ全体のサイズではなく、ちょうど1つまたは2つのボタンに***を切り取る)。 –

+0

これはnetbeansで開発する人のための質問です。したがって、ツールバーのボタンがどのように表示されるかを知ることができます。これらのボタンのスタイルに近くできないので、私のボタンのスクリーンショットはありません。 –

+0

Netbeansをスクリーンに持って行くことができたら、そのボタンのスクリーンショットを手に入れてください! –

答えて

1

この実装についてはどうですか?私は別のquestionを参照して、googleから見つけたnetbeans.pngという小さな緑の三角形を追加しました。しかし、ボタンがフォーカスを取得すると、異なる背景でボーダーをペイントするところには、小さなTODOパートがあります。私はあなたにこの答えが欲しいと思います。

import java.awt.Color; 
import java.awt.FlowLayout; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 
import java.awt.Shape; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.geom.Area; 
import java.awt.geom.RoundRectangle2D; 
import java.net.URL; 

import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 

public class StylistButton extends JButton implements MouseListener 
{ 
    boolean mouseIn = false; 

    public StylistButton(String s) 
    { 
     addMouseListener(this); 
     setBorderPainted(false); 
     setContentAreaFilled(false);   
    } 

    protected static ImageIcon createImageIcon(String path) 
    { 
     URL imgURL = TextSamplerDemo.class.getResource(path); 
     if (imgURL != null) 
     { 
      return new ImageIcon(imgURL); 
     } 
     else 
     { 
      System.err.println("Couldn't find file: " + path); 
      return null; 
     } 
    } 


    protected void paintComponent(Graphics g) 
    { 
     // set button big enough so we can see the rounding curve. 
     setSize(60, 40); 
     ImageIcon netbeans = createImageIcon("netbeans.png"); 

     if (netbeans != null) 
     { 
      setIcon(netbeans); 
     } 

     setIcon(netbeans); 
     Color[] gradients; 
     Graphics2D g2 = (Graphics2D) g; 
     super.paintComponent(g2); 

     if(getModel().isRollover()) 
     { 
      g2.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)); 
      Shape firstClip = g.getClip(); 
      RoundRectangle2D rect = new RoundRectangle2D.Double(); 
      double arc = Math.ceil(getSize().getHeight()/3); 
      rect.setRoundRect(0, 0, Math.ceil(getSize().getWidth()), Math.ceil(getSize().getHeight()), arc, arc); 
      Area secondClip = new Area(getBounds()); 
      secondClip.subtract(new Area(rect)); 
      Area finalClip = new Area(firstClip); 
      finalClip.subtract(secondClip); 
      g2.setClip(finalClip); 
      super.paintComponent(g2);   

      gradients = new Color[] { new Color(184, 207, 229), new Color(122, 138, 153), new Color(184, 207, 229) }; 

      for(int i = 0; i < gradients.length; i++) 
      { 
       arc -= 2; 
       g2.setColor(gradients[i]);   
       g2.drawRoundRect(i+1, i+1, (int)Math.ceil(getSize().getWidth()-2)-(i*2), (int)Math.ceil(getSize().getHeight()-2)-(i*2), (int)arc, (int)arc); 
      } 
     } 
     else if (getModel().isSelected()) 
     { 
      // TODO, leave a permanent focus mark here. 
     } 
    } 

    public static void main(String[] args) 
    { 
     JFrame frame = new JFrame(); 
     frame.getContentPane().setLayout(new FlowLayout()); 

     StylistButton sButton = new StylistButton("stylistButton"); 

     frame.getContentPane().add(sButton); 

     frame.setSize(250, 250); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 


    @Override 
    public void mouseClicked(MouseEvent e) 
    { 

    } 

    @Override 
    public void mousePressed(MouseEvent e) 
    { 

    } 

    @Override 
    public void mouseReleased(MouseEvent e) 
    { 

    } 

    @Override 
    public void mouseEntered(MouseEvent e) 
    { 

    } 

    @Override 
    public void mouseExited(MouseEvent e) 
    { 

    } 

} 
2
JButton.setRolloverEnabled(true); 

あなたが欲しいものを行う必要があります。

「ロールオーバー」に別のアイコンが必要な場合は、setRolloverIcon()setRolloverSelectedIcon()の方法を使用してそのアイコンを割り当てることができます。