2012-03-26 6 views
2

У меня есть панель ColorChooser, как я могу это сделать, когда я нажимаю JButton в своей программе? EDIT: Я хочу, чтобы он отображался в новом кадре, который можно изменять, перемещать и закрывать.Как я могу создать JPanel, когда я нажимаю JButton?

+0

Нужна дополнительная информация. Появиться откуда? Это же окно из-за другой панели? Всплывающее окно в диалоговом окне? –

+0

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

+0

как вы получили ColorChooser? сделайте то же самое, что и с вашей собственной панелью. – Randy

ответ

1

Вам необходимо написать ActionListener для вашего JBu tton.

Что-то вроде этого:

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 

/** 
* 
* @author roger 
*/ 
public class MyActListener extends JFrame implements ActionListener{ 

    public MyActListener(){ 
     super("My Action Listener"); 

     JButton myButton = new JButton("DisplayAnything"); 
     myButton.addActionListener(this); 
     this.add(myButton); 


     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     this.pack(); 
     this.setVisible(true);   
    } 

    public static void main(String[] args) { 
     // TODO code application logic here 
     MyActListener ma = new MyActListener(); 
    } 

    @Override 
public void actionPerformed(ActionEvent e) { // YOur code for your button here 
    if("DisplayAnything".equals(e.getActionCommand())){ 
     Color c = JColorChooser.showDialog(this, "Color Chooser", Color.BLACK); 
     JButton displayAnything = (JButton)e.getSource(); 
     displayAnything.setBackground(c); 
    } 
} 

Посмотрите на Java tutorials из How to write an ActionListener. Посмотрите на действительно большой индекс, чтобы увидеть основные руководства по Java в целом.

+0

Могу ли я получить обратную связь от дальнейших читателей, если это правильный способ написать прослушиватель действий для JButton? когда количество кнопок начинает расти, лучше ли сделать класс для него, который реализует ActionListener? или вместо 'myButton.addActionListener (this);' make 'myButton.addActionListener (new MouseListener() {...})' – Roger

+1

Я лично предпочитаю использовать анонимные внутренние классы, как последний пример в вашем комментарии, и делать вызовы классам, которые реализуйте логику оттуда. Таким образом, нет необходимости определять команды действий, и, как вы заметили, ваш метод actionPerformed будет довольно длинным при добавлении новых кнопок. Все ваши примеры действительны и используются, конечно. – mort

+0

Спасибо! Еще один вопрос: как я могу заставить кнопку отображать цвет, который я выбираю? –

2

Вы можете посмотреть на Swing Tutorial Java - ColorChooserDemo2: http://docs.oracle.com/javase/tutorial/uiswing/components/colorchooser.html#advancedexample

В принципе, JColorChoose может быть показан в диалоге: http://docs.oracle.com/javase/6/docs/api/javax/swing/JColorChooser.html

Color newColor = JColorChooser.showDialog(
       ColorChooserDemo2.this, 
       "Choose Background Color", 
       banner.getBackground()); 

Для кнопки, чтобы активировать этот файл Chooser:

button.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e) { 
    //color is whatever the user choose 
     Color color = JColorChooser.showDialog(currentComponent, "Color Chooser", Color.WHITE); 

     JButton thisBtn = (JButton)e.getSource(); //or you can just use button if that's final or global 
     thisBtn.setBackground(color); 
    } 
}); 
+0

Спасибо :) Как я могу реализовать это в своем ActionPerformed от моего JButton? –

+0

Хорошо спасибо, еще один вопрос, как я могу заставить кнопку отображаться цветом, который я выбираю? –

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