2012-02-21 3 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+. Или другое решение - использовать HashMap , соответствующий строкам actionCommand JToggleButton с цветом. –

4

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

  • Установите actionCommand баттона через btnTab[indBtn].setActionCommand(btnName[indBtn]);
  • ButtonGroup может сказать, какая кнопка была выбрана, получив выбор, который будет объектом ButtonModel, если выбор был сделан или нулевой если выбор отсутствует.
  • Получите выделенное действие кнопки ActionCommand String из ButtonModel выше, вызвав его метод getActionCommand().
  • Рассмотрите возможность использования строки 0C, чтобы связать строку ActionCommand со связанным с ней цветом.

Также

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

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

+0

Потому что я попытался сделать действия, чтобы поймать цвет с моей кнопки, но это не удалось. Я не знаю :( – MTHeadss

Смежные вопросы