2015-11-29 2 views
1

У меня есть простое приложение, которое состоит из JButton и JColorChooser. Когда я нажимаю кнопку 2 появляются JColorChoosers. Позволяет выбрать цвет фона, а второй - выбрать цвет переднего плана. сохраняю каждый цвет в отдельной variable.Here мой код:Установить цвет переднего плана и фона JButton с JColorChooser

public class Slide extends JFrame{ 

     Color bgColor; 
     JButton colorButton=new JButton(); 
     JColorChooser colorPicker=new JColorChooser(); 
     public Slide(){ 
      JPanel panel=new JPanel(); 
      panel.setLayout(new MigLayout("", "[][][][][]", "[][][][][][]")); 
      this.setContentPane(panel); 
      colorButton.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent arg0) { 
        //1st color chooser for background color 
        bgColor=JColorChooser.showDialog(null, "Background color", null); 
//2nd colorchooser appears for foreground 
        Color fgColor=JColorChooser.showDialog(null, "Foreground color", null); 
        colorButton.setBackground(bgColor); 
        colorButton.setForeground(fgColor); 
       } 
      }); 
      colorButton.setText("Pick a color"); 
      panel.add(colorButton, "cell 0 5"); 
      this.setSize(400, 400); 
      this.setVisible(true); 
      this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     } 

     public static void main(String args[]){ 
      new Slide(); 
     } 
    } 

Теперь мой вопрос: Можно ли свести к минимуму часть JColorChooser.I означает, что я хочу показать JColorChooser только один раз и получить цвета переднего и заднего плана от пользователя

+0

Если вы хотите, чтобы показать его один раз - тогда только называют это один раз. Почему бы просто не проверить, установлены ли цвета, и если да, не вызывайте выбор цвета? –

+0

Можете ли вы привести пример, основанный на этом коде? –

+1

Вы можете добавить два 'JColorChoosers' в' JTabbedPane' и показать его в 'JOptionPane' – MadProgrammer

ответ

4

Не думаю, что вы можете использовать JOptionPane для этого, так как диалог исчезнет сразу же после нажатия кнопки, содержащей опцию.


Вы можете сделать свой собственный JDialog, который имеет JColorChooser в центре и некоторые кнопки, как Set Foreground и Set Background на дне; Таким образом, вы не должны вызывать 2 JColorChooser S:

enter image description here

Код:

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JColorChooser; 
import javax.swing.JComponent; 
import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Example { 

    public Example() { 

     JButton button = new JButton("Button"); 
     button.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       CustomColorChooserDialog dialog = new CustomColorChooserDialog(button); 
       dialog.setVisible(true); 
      } 
     }); 

     JFrame frame = new JFrame(); 
     frame.getContentPane().setLayout(new FlowLayout()); 
     frame.getContentPane().add(button); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String args[]) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new Example(); 
      } 
     }); 
    } 
} 

class CustomColorChooserDialog extends JDialog { 

    JComponent targetComponent; 
    JColorChooser colorChooser; 
    JButton backgroundButton; 
    JButton foregroundButton; 
    JButton okButton; 

    public CustomColorChooserDialog(JComponent targetComponent) { 

     this.targetComponent = targetComponent; 

     colorChooser = new JColorChooser(); 

     ButtonActionListener listener = new ButtonActionListener(); 

     backgroundButton = new JButton("Set Background"); 
     backgroundButton.addActionListener(listener); 

     foregroundButton = new JButton("Set Foreground"); 
     foregroundButton.addActionListener(listener); 

     okButton = new JButton("OK"); 
     okButton.addActionListener(listener); 

     JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); 
     buttonPanel.add(backgroundButton); 
     buttonPanel.add(foregroundButton); 
     buttonPanel.add(okButton); 

     getContentPane().add(colorChooser, BorderLayout.CENTER); 
     getContentPane().add(buttonPanel, BorderLayout.PAGE_END); 

     pack(); 
     setModal(true); 
     setLocationRelativeTo(targetComponent); 

    } 

    private class ButtonActionListener implements ActionListener { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      if (e.getSource().equals(backgroundButton)) { 
       targetComponent.setBackground(colorChooser.getColor()); 
      } else if (e.getSource().equals(foregroundButton)) { 
       targetComponent.setForeground(colorChooser.getColor()); 
      } else if (e.getSource().equals(okButton)) { 
       dispose(); 
      } 
     } 
    } 

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