Boa tarde galera,
Estou com uma dúvida, estava eu realizando alguns testes com swing quando resolvi criar uma janela que possua uma palheta de cores e apartir desta palheta trocar a cor do fundo da janela principal.
Porém está dando um erro de NullPointerExcepetion, mas eu não consigo ver onde está este NullPointerException.
(Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException)
segue o código fonte de como deve funcionar a janela.
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class FrameInicial extends JFrame {
public FrameInicial(){
setLayout(new BorderLayout());
setTitle("Tela Inicial");
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(new Dimension(500,500));
JButton btn = new JButton(">>>>>>>>>>>>>> Configurar Cor <<<<<<<<<<<<<<<");
btn.addActionListener(new FrameInicialListener(this));
add(btn,BorderLayout.PAGE_END);
}
public static void main(String[] args) {
FrameInicial f = new FrameInicial();
}
}
class FrameInicialListener implements ActionListener {
FrameInicial frameInicial;
public FrameInicialListener( FrameInicial f){
FrameInicial frameInicial = f;
}
@Override
public void actionPerformed(ActionEvent e) {
FrameExemplo frameExemplo = new FrameExemplo(frameInicial);
}
}
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class FrameExemplo extends JFrame{
JPanel panel = new JPanel(new FlowLayout());
PalhetaCores palhetaCores;
FrameInicial parent;
JLabel labelTexto = new JLabel("Cor de fundo: ");
JLabel labelCor = new JLabel(" ");
public FrameExemplo(FrameInicial parent){
this.parent = parent;
setTitle("Escolhe Cores");
setVisible(true);
setSize(new Dimension(250,250));
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
panel.add(labelTexto);
labelCor.setBackground(Color.red);
labelCor.setOpaque(true);
panel.add(labelCor);
JButton btnCor = new JButton("Cor");
btnCor.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
palhetaCores = new PalhetaCores(labelCor);
JFrame frame = new JFrame("Palheta de Cores");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
JComponent newContentPane = palhetaCores;
newContentPane.setOpaque(true);
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
}
});
panel.add(btnCor);
add(panel, BorderLayout.PAGE_START);
JButton btnOk = new JButton("OK");
btnOk.addActionListener(new PintaListener(parent, labelCor));
add(btnOk, BorderLayout.PAGE_END);
}
}
class PintaListener implements ActionListener{
FrameInicial frameInicial;
JLabel labelCor;
public PintaListener(FrameInicial frameInicial, JLabel labelCor) {
this.frameInicial = frameInicial;
this.labelCor = labelCor;
}
@Override
public void actionPerformed(ActionEvent e) {
frameInicial.setBackground(labelCor.getBackground());
}
}
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JColorChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class PalhetaCores extends JPanel implements ChangeListener{
private JColorChooser tcc;
private JLabel labelColor;
public PalhetaCores(JLabel labelColor){
super(new BorderLayout());
tcc = new JColorChooser(Color.red);
this.labelColor = labelColor;
tcc.getSelectionModel().addChangeListener(this);
add(tcc, BorderLayout.PAGE_END);
}
@Override
public void stateChanged(ChangeEvent e) {
Color newColor = tcc.getColor();
labelColor.setBackground(newColor);
}
}
Se alguém poder me ajudar a tirar esta dúvida, obrigado...