Oglądałem kurs dotyczący Swinga(lekcja 13),napisałem podobny kod.Zdziwiła mnie jednak jedna rzecz.
Klasa zewnętrzna Main ma dostęp do prywatnych pól klasy wewnętrznej ColorHandler.
Prawdopodobnie czegoś nie widzę w kodzie,ale bardzo proszę o pomoc.
Chodzi o tą linijkę:
Code: Zaznacz cały
((JComboBox)e.getSource()).setBackground(((ColorHandler)((JComboBox)e.getSource()).getSelectedItem()).kolor);
Pozdrawiam
Adam
Code: Zaznacz cały
package listykombinowane;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Main extends JFrame
{
public Main()
{
initComponents();
}
public void initComponents()
{
this.setTitle("Listy kombinowane");
this.setBounds(300, 300, 300, 200);
kombinacja.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
//ColorHandler handler = (ColorHandler)((JComboBox)e.getSource()).getSelectedItem();
((JComboBox)e.getSource()).setBackground(((ColorHandler)((JComboBox)e.getSource()).getSelectedItem()).kolor);
}
});
panel.add(kombinacja);
kombinacja.addItem(new ColorHandler("Czarny", Color.BLACK));
kombinacja.addItem(new ColorHandler("Zielony", Color.GREEN));
kombinacja.addItem(new ColorHandler("Niebieski", Color.BLUE));
kombinacja.addItem(new ColorHandler("Żółty", Color.YELLOW));
this.getContentPane().add(panel);
this.setDefaultCloseOperation(3);
}
private class ColorHandler
{
public ColorHandler(String colorName, Color kolor)
{
this.kolor = kolor;
this.colorName = colorName;
}
@Override
public String toString()
{
return this.colorName;
}
private Color kolor;
private String colorName;
}
private JPanel panel = new JPanel();
private JComboBox kombinacja = new JComboBox();
public static void main(String[] args)
{
new Main().setVisible(true);
}
}