Próbuję prawoklikiem zmieniać kolor pól tekstowych poprzez ustawianie ich widoczności. Początkowo pola żółte są "na wierzchu", a pola czerwone pod nimi. Aktualny stan widoczności pól (listę pól widocznych oraz listę pól niewidocznych) zapisuję do XMLa. Niestety po odczycie list z XMLa nie ustawia się prawidłowa widoczność.
Gdzie popełniam błąd?
import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.swing.BorderFactory;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTextArea;
import javax.swing.border.Border;
public class Testy implements ActionListener
{
JFrame ramka;
JMenuBar menuBar;
JMenu menuPlik;
JMenuItem mOtworz, mZapiszJako;
JPopupMenu popupPolaZolte, popupPolaCzerwone;
JMenuItem zmienKolorPolaNaCzerwony, zmienKolorPolaNaZolty;
JTextArea pole1_zolte, pole2_zolte, pole3_zolte, pole4_zolte,
pole1_czerwone, pole2_czerwone, pole3_czerwone, pole4_czerwone;
ArrayList<JTextArea> listaPolWidocznych, listaPolNiewidocznych;
Map<String, JTextArea> mapaNazwPol;
WidocznoscPol widocznoscPol;
public static void main(String[] args)
{
Testy testy = new Testy();
testy.zbudujGUI();
}
public void zbudujGUI()
{
ramka = new JFrame();
ramka.setSize(1000,500);
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ramka.setExtendedState(JFrame.MAXIMIZED_BOTH);
ramka.setLayout(null);
widocznoscPol = new WidocznoscPol(this);
menuBar = new JMenuBar();
ramka.setJMenuBar(menuBar);
menuPlik = new JMenu("Plik");
menuBar.add(menuPlik);
mOtworz = new JMenuItem("Otwórz");
menuPlik.add(mOtworz);
mOtworz.addActionListener(this);
mZapiszJako = new JMenuItem("Zapisz jako");
menuPlik.add(mZapiszJako);
mZapiszJako.addActionListener(this);
listaPolWidocznych = new ArrayList<JTextArea>();
listaPolNiewidocznych = new ArrayList<JTextArea>();
mapaNazwPol = new HashMap<String, JTextArea>();
JTextArea[] polaZolte = {pole1_zolte= new JTextArea(), pole2_zolte = new JTextArea(), pole3_zolte = new JTextArea(), pole4_zolte = new JTextArea()};
JTextArea[] polaCzerwone = {pole1_czerwone= new JTextArea(), pole2_czerwone = new JTextArea(), pole3_czerwone = new JTextArea(), pole4_czerwone = new JTextArea()};
pole1_zolte.setBounds(500,100,200,50);
pole2_zolte.setBounds(500,200,200,50);
pole3_zolte.setBounds(500,300,200,50);
pole4_zolte.setBounds(500,400,200,50);
pole1_czerwone.setBounds(500,100,200,50);
pole2_czerwone.setBounds(500,200,200,50);
pole3_czerwone.setBounds(500,300,200,50);
pole4_czerwone.setBounds(500,400,200,50);
pole1_zolte.setName("pole1_zolte");
pole2_zolte.setName("pole2_zolte");
pole3_zolte.setName("pole3_zolte");
pole4_zolte.setName("pole4_zolte");
pole1_czerwone.setName("pole1_czerwone");
pole2_czerwone.setName("pole2_czerwone");
pole3_czerwone.setName("pole3_czerwone");
pole4_czerwone.setName("pole4_czerwone");
mapaNazwPol.put("pole1_zolte", pole1_zolte);
mapaNazwPol.put("pole2_zolte", pole2_zolte);
mapaNazwPol.put("pole3_zolte", pole3_zolte);
mapaNazwPol.put("pole4_zolte", pole4_zolte);
mapaNazwPol.put("pole1_czerwone", pole1_czerwone);
mapaNazwPol.put("pole2_czerwone", pole2_czerwone);
mapaNazwPol.put("pole3_czerwone", pole3_czerwone);
mapaNazwPol.put("pole4_czerwone", pole4_czerwone);
popupPolaZolte= new JPopupMenu();
popupPolaCzerwone = new JPopupMenu();
zmienKolorPolaNaCzerwony = new JMenuItem("Zmień kolor pola na czerwony");
zmienKolorPolaNaZolty= new JMenuItem("Zmień kolor pola na żółty");
zmienKolorPolaNaCzerwony.addActionListener(this);
zmienKolorPolaNaZolty.addActionListener(this);
popupPolaZolte.add(zmienKolorPolaNaCzerwony);
popupPolaCzerwone.add(zmienKolorPolaNaZolty);
Border border = BorderFactory.createLineBorder(Color.BLACK);
for (JTextArea pZ : polaZolte)
{
pZ.setBackground(Color.YELLOW);
pZ.setBorder(border);
pZ.setComponentPopupMenu(popupPolaZolte);
ramka.add(pZ);
listaPolWidocznych.add(pZ);
}
for (JTextArea pC : polaCzerwone)
{
pC.setBackground(Color.RED);
pC.setBorder(border);
pC.setComponentPopupMenu(popupPolaCzerwone);
ramka.add(pC);
listaPolNiewidocznych.add(pC);
}
widocznoscPol.start();
ramka.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
Component invokerZ = popupPolaZolte.getInvoker();
Component invokerC = popupPolaCzerwone.getInvoker();
if (source == zmienKolorPolaNaCzerwony)
{
String nazwaPolaZoltego = invokerZ.getName();
JTextArea poleZolte = mapaNazwPol.get(nazwaPolaZoltego);
String nazwaPolaCzerwonego = nazwaPolaZoltego.replace("_zolte", "_czerwone");
JTextArea poleCzerwone = mapaNazwPol.get(nazwaPolaCzerwonego);
listaPolWidocznych.remove(poleZolte);
listaPolNiewidocznych.remove(poleCzerwone);
listaPolWidocznych.add(poleCzerwone);
listaPolNiewidocznych.add(poleZolte);
widocznoscPol.start();
}
else if (source == zmienKolorPolaNaZolty)
{
String nazwaPolaCzerwonego = invokerC.getName();
JTextArea poleCzerwone = mapaNazwPol.get(nazwaPolaCzerwonego);
String nazwaPolaZoltego = nazwaPolaCzerwonego.replace("_czerwone", "_zolte");
JTextArea poleZolte = mapaNazwPol.get(nazwaPolaZoltego);
listaPolWidocznych.remove(poleCzerwone);
listaPolNiewidocznych.remove(poleZolte);
listaPolWidocznych.add(poleZolte);
listaPolNiewidocznych.add(poleCzerwone);
widocznoscPol.start();
}
else if (source == mZapiszJako)
{
JFileChooser fileCh = new JFileChooser();
if (fileCh.showSaveDialog(null)==JFileChooser.APPROVE_OPTION)
{
File nazwaPliku = fileCh.getSelectedFile();
try
{
XMLEncoder enc = new XMLEncoder(
new BufferedOutputStream(
new FileOutputStream(nazwaPliku)));
enc.writeObject(listaPolWidocznych);
enc.writeObject(listaPolNiewidocznych);
enc.close();
}
catch (FileNotFoundException e1)
{
e1.printStackTrace();
}
}
}
else if (source == mOtworz)
{
listaPolWidocznych.clear();
listaPolNiewidocznych.clear();
JFileChooser fileCh = new JFileChooser();
if (fileCh.showOpenDialog(null)==JFileChooser.APPROVE_OPTION)
{
File nazwaPliku = fileCh.getSelectedFile();
try
{
XMLDecoder dec = new XMLDecoder(
new BufferedInputStream(
new FileInputStream(nazwaPliku)));
listaPolWidocznych = (ArrayList<JTextArea>) dec.readObject();
listaPolNiewidocznych = (ArrayList<JTextArea>) dec.readObject();
dec.close();
widocznoscPol.start();
}
catch (FileNotFoundException e1)
{
e1.printStackTrace();
}
}
}
}
I klasa WidocznoscPol:
import javax.swing.JTextArea;
public class WidocznoscPol
{
Testy testy;
public WidocznoscPol(Testy testy)
{
this.testy = testy;
}
public void start()
{
for (JTextArea pW : testy.listaPolWidocznych)
{
pW.setVisible(true);
}
for (JTextArea pN : testy.listaPolNiewidocznych)
{
pN.setVisible(false);
}
return;
}
}