从我的JButtons获取颜色

时间:2012-02-21 22:22:38

标签: java swing events colors get

我需要在底部的栏中用一些按钮制作一个框架。我的所有按钮都显示带有颜色的图像,例如黑色,灰色,白色等。我有一个面板,我可以使用我选择的颜色绘制。问题是当我按下按钮时,我不知道如何制作一种方法来捕捉那种颜色。

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);

    }

3 个答案:

答案 0 :(得分:4)

建议:

  • 通过btnTab[indBtn].setActionCommand(btnName[indBtn]);
  • 设置按钮的actionCommand
  • 如果选择是ButtonModel对象,ButtonGroup可以通过获取选择来告诉您选择了哪个Button,如果没有选择则为null。
  • 通过调用getActionCommand()方法从上面的ButtonModel获取所选按钮的actionCommand String。
  • 考虑使用HashMap<String, Color>将actionCommand String与其关联的颜色相关联。

另外

  • 不要通过getGraphics获取组件的Grahpics。而是在BufferedImage中绘制,然后在JComponent(或扩展JComponent的类,如JPanel)的paintComponent方法中绘制BufferedImage。
  • 您可以通过调用getGraphics()从BufferedImage获取Graphics对象,但只需确保在使用它时删除Graphics对象。
  • 在MouseListener中,通过更改类字段来更改对象的状态,然后调用repaint。

答案 1 :(得分:2)

您可以扩展JToggleButton并让该类包含您想要的任何信息。

class ColorButton extends JToggleButton {

  private Color color;

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

  public Color getColor() {
    return color;
  }
}

答案 2 :(得分:0)

我注意到按钮图像名称中有颜色名称,为什么不从那里抓取它。