2012-02-21 9 views
1

私は一番下のバーのいくつかのボタンでフレームを作る必要があります。私のすべてのボタンは、色の付いた画像を表示します。黒、灰色、白など。私は、私が選んだ色で描くことができるパネルを持っています。問題は、ボタンを押したときにその色をつかむ方法を知らないことです。私のJButtonsから色を取得

private JToolBar barreOutils; 

// 
private JToggleButton[] btnTab = new JToggleButton[9]; 

// 
private String[] btnName = { "Couleur noire", "Couleur grise", 
     "Couleur blanche", "Couleur rouge", "Couleur orange", 
     "Couleur jaune", "Couleur verte", "Couleur cyan", "Couleur bleue" }; 

// 
private String[] btnColor = { "dark.gif", "gray.gif", "white.gif", 
     "rouge.gif", "orange.gif", "yellow.gif", "vert.gif", "cyan.gif", 
     "blue.gif" }; 

String[] colorTab = { "Color.DARK", "Color.GRAY", "Color.WHITE", 
     "Color.RED", "Color.ORANGE", "Color.YELLOW", "Color.GREEN", 
     "Color.CYAN", "Color.BLUE" }; 

// buttonGroup 
private ButtonGroup groupeCouleurs; 
// Notre panneau principal 
private JPanel panneau; 

public Fenetre() { 

    // Organization 
    setTitle("Application"); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(600, 600); 
    setLocationRelativeTo(null); 

    // Organization 
    panneau = new JPanel(); 
    panneau.setBackground(Color.white); 
    panneau.addMouseListener(new Dessiner()); 
    panneau.addMouseMotionListener(new Dessiner()); 
    getContentPane().add(panneau); 

    // 
    barreOutils = createToolbar(); 
    getContentPane().add(barreOutils, BorderLayout.SOUTH); 

} 

private JToolBar createToolbar() { 

    JLabel couleur = new JLabel("Couleurs : "); 
    barreOutils = new JToolBar(); 


    groupeCouleurs = new ButtonGroup(); 
    barreOutils.add(couleur); 


    createButton(btnTab, btnName, btnColor); 

    return barreOutils; 
} 

private void createButton(JToggleButton[] btnTab, String[] btnName, 
     String[] btnColor) { 
    // TODO Auto-generated method stub 

    // add the buttons on the bar at the bottom 
    for (int indBtn = 0; indBtn < btnTab.length; indBtn++) { 
     btnTab[indBtn] = new JToggleButton(new ImageIcon(
       Fenetre.class.getResource(btnColor[indBtn]))); 
     btnTab[indBtn].setToolTipText(btnName[indBtn]); 
     groupeCouleurs.add(btnTab[indBtn]); 
     barreOutils.add(btnTab[indBtn]); 
    } 
} 

private class Dessiner extends MouseAdapter { 

    public void mouseDragged(MouseEvent e) { 
     // TODO Auto-generated method stub 
     Graphics g = ((JComponent) e.getSource()).getGraphics(); 
     g.setColor(**???????????????????????**); 
     g.drawOval(e.getX(), e.getY(), 1, 1); 

    } 

答えて

2

JToggleButtonを拡張して、そのクラスに必要な情報を含めることができます。

class ColorButton extends JToggleButton { 

    private Color color; 

    public ColorButton(Color c) { 
    super(); 
    this.color = c; 
    } 

    public Color getColor() { 
    return color; 
    } 
} 
+0

これはうまくいくかもしれません - 1+。または、JToggleButtonのactionCommand StringとColorを一致させたHashMap を使用する方法もあります。 –

4

提案:ボタンのアクションコマンドを設定し

  • ButtonGroupを、選択が行われた場合ButtonModel対象となります選択またはnullを取得することにより、選択されたボタンを伝えることができますbtnTab[indBtn].setActionCommand(btnName[indBtn]);
  • 経由選択がない場合
  • 上記のButtonModelから選択されたボタンのactionCommand Stringを、getActionCommand()メソッドを呼び出して取得します。
  • HashMap<String, Color>を使用して、actionCommand Stringとその関連色をリンクすることを検討してください。

また

  • いるgetGraphicsを経由して、コンポーネントのGrahpicsを取得しないでください。代わりにBufferedImageで図面を作成し、JComponent(またはJPanelなどのJComponentを拡張するクラス)のpaintComponentメソッドにBufferedImageを描画します。
  • BufferedImageからGraphicsオブジェクトを取得するには、getGraphics()を呼び出しますが、Graphicsオブジェクトは必ず削除してください。
  • MouseListenerで、クラスフィールドを変更してオブジェクトの状態を変更し、repaintを呼び出します。
0

私はあなたがボタンの画像名に色の名前を持っていることに気づきました、なぜそこからそれをつかんでください。

+0

クリックしたボタンから色をキャッチするためにアクションイベントを実行しようとしましたが、失敗しました。知りません :( – MTHeadss