2014-10-25 4 views
2

Я делаю программу, которая рисует некоторые фигуры и наполняет их цветом. Мне нужно изменить цвет «линии» и хотите, чтобы пользователь мог выбрать цвет.Как отображать селектор цветов при нажатии кнопки?

Как я могу, нажав кнопку «Выбрать цвет», под кнопкой появится набор цветов? Возможно ли, чтобы селектор был встроен в пользовательский интерфейс под кнопкой (а не всплывал в окне)?

Я хочу показать селектор цвета, как в Paint.

+2

jColorChosser ?? –

+0

Да! Мне нужно, чтобы это отображалось при нажатии кнопки. Как я могу это сделать, вы знаете? Возможно ли «не» всплывающее окно выбрать? Я имею в виду, что ниже кнопки уже есть jColorChooser. – Tito

+0

Посмотрите это http://www.javatpoint.com/JColorChooser-class –

ответ

4

Здесь есть кнопка выбора цвета Класс:

  • показывает текущий выбранный цвет
  • открывает диалоговое окно JColorChooser при нажатии
  • пожаров события, когда цвет выбран

Используйте его таким образом:

ColorChooserButton colorChooser = new ColorChooserButton(Color.WHITE); 
colorChooser.addColorChangedListener(new ColorChangedListener() { 
    @Override 
    public void colorChanged(Color newColor) { 
      // do something with newColor ... 
    } 
}); 

enter image description here

import java.awt.Color; 
    import java.awt.Graphics2D; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import java.awt.image.BufferedImage; 
    import java.util.ArrayList; 
    import java.util.List; 

    import javax.swing.ImageIcon; 
    import javax.swing.JButton; 
    import javax.swing.JColorChooser; 

    public class ColorChooserButton extends JButton { 

     private Color current; 

     public ColorChooserButton(Color c) { 
      setSelectedColor(c); 
      addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent arg0) { 
        Color newColor = JColorChooser.showDialog(null, "Choose a color", current); 
        setSelectedColor(newColor); 
       } 
      }); 
     } 

     public Color getSelectedColor() { 
      return current; 
     } 

     public void setSelectedColor(Color newColor) { 
      setSelectedColor(newColor, true); 
     } 

     public void setSelectedColor(Color newColor, boolean notify) { 

      if (newColor == null) return; 

      current = newColor; 
      setIcon(createIcon(current, 16, 16)); 
      repaint(); 

      if (notify) { 
       // Notify everybody that may be interested. 
       for (ColorChangedListener l : listeners) { 
        l.colorChanged(newColor); 
       } 
      } 
     } 

     public static interface ColorChangedListener { 
      public void colorChanged(Color newColor); 
     } 

     private List<ColorChangedListener> listeners = new ArrayList<ColorChangedListener>(); 

     public void addColorChangedListener(ColorChangedListener toAdd) { 
      listeners.add(toAdd); 
     } 

     public static ImageIcon createIcon(Color main, int width, int height) { 
      BufferedImage image = new BufferedImage(width, height, java.awt.image.BufferedImage.TYPE_INT_RGB); 
      Graphics2D graphics = image.createGraphics(); 
      graphics.setColor(main); 
      graphics.fillRect(0, 0, width, height); 
      graphics.setXORMode(Color.DARK_GRAY); 
      graphics.drawRect(0, 0, width-1, height-1); 
      image.flush(); 
      ImageIcon icon = new ImageIcon(image); 
      return icon; 
     } 
    } 
6

Вы можете использовать JColorChooser так:

Color newColor = JColorChooser.showDialog(null, "Choose a color", Color.RED); 
  • Первый аргумент является родительским java.awt.Component экземпляра. Также может быть null.
  • Второй аргумент - это название для диалога.
  • Третий аргумент - это цвет, который он должен выбрать по умолчанию.

Диалог возвращает выбранный цвет, если пользователь нажимает ok или null, если он нажал на cancel.

Дополнительная информация: http://docs.oracle.com/javase/tutorial/uiswing/components/colorchooser.html.

Edit: включить ColorChooser в существующую ContentPane

Приведенный выше код показывает, как создать всплывающее с для JColorChooser, но также можно «включить» его в существующую ContentPane.

Это код для инициализации обоих компонентов (JButton и JColorChooser):

button = new JButton("Choose color"); 
button.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     toggleColorChooser(); // show and hide the color chooser 
    } 
}); 
button.setBounds(10, 11, 150, 23); 
contentPane.add(button); 

colorChooser = new JColorChooser(Color.BLACK); // default color is black 
colorChooser.setBorder(null); 
colorChooser.getSelectionModel().addChangeListener(new ChangeListener() { 
    public void stateChanged(ChangeEvent e) { 
     colorChanged(); // change background color of "button" 
    } 
}); 

Кнопка будет немедленно добавлены, но палитра цветов еще нет. Он будет добавлен в методе toggleColorChooser:

protected void toggleColorChooser() { 
    if (toggled) { 
     contentPane.remove(colorChooser); 
    } else { 
     colorChooser.setBounds(button.getX(), button.getY() + 20, 600, 300); 
     colorChooser.setVisible(true); 
     contentPane.add(colorChooser); 
    } 
    toggled = !toggled; 
    contentPane.validate(); 
    contentPane.repaint(); 
} 

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

Как вы можете видеть, вам понадобится переменная под названием toggled. Просто добавьте его как переменную класса:

private boolean toggled = false; 

Последний метод будет называться его, когда пользователь выбирает цвет в цветовом выборе.Это изменит цвет фона кнопки:

protected void colorChanged() { 
    button.setBackground(colorChooser.getSelectionModel().getSelectedColor()); 
} 
Смежные вопросы