Получить цвет из моих кнопок J - PullRequest
1 голос
/ 22 февраля 2012

Мне нужно сделать рамку с несколькими кнопками в панели внизу. Все мои кнопки показывают изображение с цветом, например, черный, серый, белый и тд. У меня есть панель, которую я могу нарисовать выбранным цветом. Проблема в том, что я не знаю, как сделать метод, чтобы поймать этот цвет, когда я нажимаю кнопку.

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 ]

4 голосов
/ 22 февраля 2012

Предложения:

  • Установите команду действия команды с помощью btnTab[indBtn].setActionCommand(btnName[indBtn]);
  • ButtonGroup может сообщить вам, какая кнопка была выбрана, получив выделение, которое будет объектом ButtonModel, если выделение было выполнено, или ноль, если выделение отсутствует.
  • Получите строку actionCommand выбранных кнопок из описанной выше модели ButtonModel, вызвав ее метод getActionCommand().
  • Попробуйте использовать HashMap<String, Color>, чтобы связать строку actionCommand со связанным с ней цветом.

Также

  • Не получайте Grahpics компонента через getGraphics. Вместо этого сделайте ваше рисование в BufferedImage, а затем нарисуйте BufferedImage в JComponent (или классе, который расширяет JComponent, такой как JPanel) метод paintComponent.
  • Вы бы получили объект Graphics из BufferedImage, вызвав для него функцию getGraphics (), но обязательно удалите объект Graphics, когда закончите с ним.
  • В вашем MouseListener измените состояние объекта, изменив поля класса, затем вызовите repaint.
2 голосов
/ 22 февраля 2012

Вы можете расширить JToggleButton, и этот класс будет содержать любую информацию, которую вы хотите.

class ColorButton extends JToggleButton {

  private Color color;

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

  public Color getColor() {
    return color;
  }
}
0 голосов
/ 22 февраля 2012

Я заметил, что у вас есть названия цветов в названии изображения кнопок, почему бы не взять его оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...