Heyho, so ganz raff ichs in Java nicht, ab wann welche Variablen für wen oder was öffentlich und zugreifbar sind ......
In Pascal, Basic, C++ wars immer ganz leicht.. public hieß tatsächlich public für alles und jeden..
Und hier spiele ich dauernd mit private, final, public rum, ohne eigentlich den Sinn dahinter zu verstehen und stecke hier fest:
im sysList.MouseListener sagt er mir, "Cannot refer to a non-final variable galaxy inside an inner class defined in a different method"
Ist für euch sicher eindeutig, ich kapiers aber nicht.
Wenn ich dann ein final vor galaxy setze, spuckt er mir ja oben auch wieder eine Fehlermeldung aus.
Schließlich funktionierts ja weiter unten auch ähnlich in einer For-Schleife, die mir eine JLIst mit 10 Werten füllt. Und da ist galaxy auch nicht final. :shock:
Weiß jemand Rat?
Grüße!
In Pascal, Basic, C++ wars immer ganz leicht.. public hieß tatsächlich public für alles und jeden..
Und hier spiele ich dauernd mit private, final, public rum, ohne eigentlich den Sinn dahinter zu verstehen und stecke hier fest:
Java:
public class MainWindow extends JFrame {
private JPanel contentPane;
public MainWindow() {
List<SolarSystem> galaxy;
galaxy = new LinkedList<SolarSystem>();
final DefaultListModel systemListModel;
final DefaultListModel planetListModel;
systemListModel = new DefaultListModel();
planetListModel = new DefaultListModel();
final JList planetList = new JList(planetListModel);
planetList.setBorder(null);
final JList sysList = new JList(systemListModel);
sysList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 497, 387);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JDesktopPane desktopPane = new JDesktopPane();
contentPane.add(desktopPane);
JInternalFrame SystemFrame = new JInternalFrame("Bekannte Systeme");
SystemFrame.setBounds(0, 0, 200, 300);
desktopPane.add(SystemFrame);
JInternalFrame PlanetFrame = new JInternalFrame("Enthaltene Planeten");
PlanetFrame.setLocation(209, 0);
PlanetFrame.setSize(252, 328);
desktopPane.add(PlanetFrame);
sysList.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent arg0) {
int selected = sysList.getSelectedIndex();
for (int i=0; i<selected;i++){
planetListModel.addElement(galaxy.get(selected).getPlanet(1).getName());
}
}
});
ScrollPane scrollPane = new ScrollPane();
PlanetFrame.getContentPane().add(scrollPane, BorderLayout.CENTER);
scrollPane.add(planetList);
SystemFrame.getContentPane().add(sysList);
SystemFrame.show();
PlanetFrame.show();
////
Random iRandom = new Random();
// Systeme generieren
for (int i=0;i<10;i++){
galaxy.add(new SolarSystem(iRandom.nextInt(10)));
for (int z=0; z<iRandom.nextInt(10);z++)
{
galaxy.get(i).addPlanet(new Planet(iRandom.nextInt(10), iRandom.nextDouble()));
Planet p = galaxy.get(i).getPlanet(z);
System.out.println(p.getName() + ", mass: " + p.getMass() + ", type: " + p.getType() + ", distance: " + p.getDistance());
//planetListModel.addElement(galaxy.get(i).getPlanet(z).getName());
}
System.out.println(galaxy.get(i).getPlanetCount());
systemListModel.addElement(galaxy.get(i).getName());
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MainWindow frame = new MainWindow();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
im sysList.MouseListener sagt er mir, "Cannot refer to a non-final variable galaxy inside an inner class defined in a different method"
Ist für euch sicher eindeutig, ich kapiers aber nicht.
Wenn ich dann ein final vor galaxy setze, spuckt er mir ja oben auch wieder eine Fehlermeldung aus.
Schließlich funktionierts ja weiter unten auch ähnlich in einer For-Schleife, die mir eine JLIst mit 10 Werten füllt. Und da ist galaxy auch nicht final. :shock:
Weiß jemand Rat?
Grüße!