Witam niemoge skompilowac tego programiku bo kompilator pokazuje mi blad:"local variable k is accessed from within inner class; needs to be declared final"
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
public class grafa extends JFrame
{
public static void main(String argv[])
{
grafa p=new grafa();
p.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
p.setVisible(true);
}
public grafa()
{
setSize(200,300);
setTitle("zmiana tla");
Container zawartosc=getContentPane();
tlo k=new tlo();
JButton pierwszy=new JButton("1");
JButton drugi=new JButton("2");
zawartosc.add(k,BorderLayout.EAST);
zawartosc.add(pierwszy,BorderLayout.WEST);
zawartosc.add(drugi,BorderLayout.CENTER);
pierwszy.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent zdarzenie)
{
JOptionPane.showMessageDialog(null,"cos tu 1");
k.spr=false;
//k.repaint();
}
});
drugi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent zdarzenie)
{
JOptionPane.showMessageDialog(null,"cos tu 2");
k.spr=true;
//k.repaint();
}
});
}
private class tlo extends JPanel
{
boolean spr=false;
public void paintComponent(Graphics g)
{
if(spr)
{
g.setColor(Color.RED);
g.fillRect(50,5,50,50);
}
else
{
g.setColor(Color.BLUE);
g.fillOval(50,3,50,50);
}
}
}
}
zmienilem i dziala ale niewiem dlaczego tak powinienem zmienic?
tlo k;
public grafa()
{
setSize(200,300);
setTitle("zmiana tla");
Container zawartosc=getContentPane();
k=new tlo();
JButton pierwszy=new JButton("1");
JButton drugi=new JButton("2");
zawartosc.add(k,BorderLayout.CENTER);
zawartosc.add(pierwszy,BorderLayout.NORTH);
zawartosc.add(drugi,BorderLayout.SOUTH);
pierwszy.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent zdarzenie)
{
k.spr=true;
k.repaint();
}
});
drugi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent zdarzenie)
{
k.spr=false;
k.repaint();
}
});
}
chodzi o to tlo k;