Java 从我的按钮中获取颜色

Java 从我的按钮中获取颜色,java,swing,events,colors,get,Java,Swing,Events,Colors,Get,我需要在底部的一个酒吧里用一些按钮做一个框架。我所有的按钮都会显示带有颜色的图像,例如黑色、灰色、白色等。我有一个面板,我可以用我选择的颜色来画。问题是,当我按下按钮时,我不知道如何制作捕捉该颜色的方法 private JToolBar barreOutils; // private JToggleButton[] btnTab = new JToggleButton[9]; // private String[] btnName = { "Couleur noire", "Couleu

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

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

    }
私人JToolBar barroutils;
// 
私有JToggleButton[]btnTab=新JToggleButton[9];
// 
私有字符串[]btnName={“黑色古鲁尔”,“灰色古鲁尔”,
“库勒布兰奇”、“库勒胭脂”、“库勒橙”,
“Couleur jaune”、“Couleur verte”、“Couleur cyan”、“Couleur blue”};
// 
私有字符串[]btnColor={“dark.gif”、“gray.gif”、“white.gif”,
“rouge.gif”、“orange.gif”、“yellow.gif”、“vert.gif”、“cyan.gif”,
“blue.gif”};
字符串[]colorTab={“Color.DARK”、“Color.GRAY”、“Color.WHITE”,
“颜色.红色”,“颜色.橙色”,“颜色.黄色”,“颜色.绿色”,
“Color.CYAN”,“Color.BLUE”};
//按钮组
私人按钮组组规则;
//诺特帕诺校长
私人JPanel panneau;
公共场所(){
//组织机构
设定所有权(“申请”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
设置大小(600600);
setLocationRelativeTo(空);
//组织机构
panneau=新的JPanel();
panneau.背景(颜色:白色);
panneau.addMouseListener(新Desiner());
panneau.addMouseMotionListener(新的Dessiner());
getContentPane().add(panneau);
// 
barreOutils=createToolbar();
getContentPane().add(barreOutils,BorderLayout.SOUTH);
}
私有JToolBar createToolbar(){
JLabel-couleur=新的JLabel(“couleur:”);
barreOutils=新的JToolBar();
GroupeCours=新按钮组();
添加(couleur);
创建按钮(btnTab、btnName、btnColor);
回程枪管;
}
私有void createButton(JToggleButton[]btnTab,String[]btnName,
字符串[]btnColor){
//TODO自动生成的方法存根
//在底部的栏上添加按钮
对于(int indBtn=0;indBtn
您可以扩展JToggleButton,让该类包含您想要的任何信息

class ColorButton extends JToggleButton {

  private Color color;

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

  public Color getColor() {
    return color;
  }
}

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

class ColorButton extends JToggleButton {

  private Color color;

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

  public Color getColor() {
    return color;
  }
}
建议:

  • 通过
    btnTab[indBtn].setActionCommand(btnName[indBtn]);
  • ButtonGroup可以通过获取选择来告诉您选择了哪个按钮,如果进行了选择,该选择将是ButtonModel对象;如果没有选择,则为null
  • 通过调用按钮模型的
    getActionCommand()
    方法,从上面的按钮模型获取所选按钮的actionCommand字符串
  • 考虑使用
    HashMap
    将actionCommand字符串与其关联的颜色链接起来

  • 不要通过getGraphics获取组件的Grahpic。而是在BuffereImage中绘制,然后在JComponent(或扩展JComponent的类,如JPanel)的paintComponent方法中绘制BuffereImage
  • 您可以通过对BuffereImage调用getGraphics()从它获取图形对象,但只需确保在使用完图形对象后将其删除即可
  • 在MouseListener中,通过更改类字段来更改对象的状态,然后调用repaint
建议:

  • 通过
    btnTab[indBtn].setActionCommand(btnName[indBtn]);
  • ButtonGroup可以通过获取选择来告诉您选择了哪个按钮,如果进行了选择,该选择将是ButtonModel对象;如果没有选择,则为null
  • 通过调用按钮模型的
    getActionCommand()
    方法,从上面的按钮模型获取所选按钮的actionCommand字符串
  • 考虑使用
    HashMap
    将actionCommand字符串与其关联的颜色链接起来

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

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

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

这也可以工作--1+。或者另一个解决方案是使用哈希映射将JToggleButton的actionCommand字符串与颜色匹配。这也可以工作--1+。或者另一种解决方案是使用哈希映射将JToggleButton的actionCommand字符串与颜色匹配。因为我尝试执行操作事件以捕获单击按钮的颜色,但失败。我不知道:(因为我尝试执行操作事件以捕获单击按钮的颜色,但失败。我不知道:(