In meiner Anwendung möchte ich gerne eine Mausbedienung einbauen. Ich kann ein panelAnzeige mit Neu erzeugen auf einem Gridlayout 4x6. In den einzelnen Feldern können Bilder oder leere Felder angezeigt werden (zufällig). Jetzt sollen die Namen der Bilddateien angezeigt werden, wenn mit der Maus darüber gefahren wird. Da ich bisher sehr wenig Erfahrung in grafischer Oberfläche habe, bin ich über jeden Tipp (wenn möglich mit Code) dankbar. Ich hoffe in meinem bisherigen Code ist eine Implementierung überhaupt möglich.
Java:
public class Simcity2 extends JFrame {
private JButton buttonNeu, buttonSpeichern, buttonLaden;
private JPanel panelButton, panelAnzeige;
private int[] bilder;
private String[] bildSpeicher;
private JTextArea ta = new JTextArea();
public Simcity2(){
panelButton = new JPanel(new GridLayout(1,3,30,1));
setTitle(" Simcity ");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(10, 5, 1000, 700);
buttonNeu = new JButton("Neu");
add(buttonNeu);
buttonSpeichern = new JButton("Speichern");
add(buttonSpeichern);
buttonLaden = new JButton("Laden");
add(buttonLaden);
panelButton.add(buttonNeu);
panelButton.add(buttonSpeichern);
panelButton.add(buttonLaden);
getContentPane().add(BorderLayout.NORTH, panelButton);
setVisible(true);
ta = new JTextArea();
buttonNeu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
File dir = new File("images128");
gebaeudeInit();
gebaeudeAnzeigen(dir);
}
});
buttonSpeichern.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
gebaeudeSpeichern();
}
});
buttonLaden.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
gebaeudeLaden();
}
});
if (ta != null)
add(ta);
}
public void gebaeudeInit() {
bilder = new int[24];
bildSpeicher = new String[24];
vorbelegen(bilder);
}
public void gebaeudeAnzeigen(File dir) {
int count = 0;
panelAnzeige = new JPanel(new GridLayout(4,6,1,1));
while (true) {
for (File file : dir.listFiles()) {
if (file.isFile()) {
String name = file.getName();
ImageIcon icon = new ImageIcon("images128/" + name);
JLabel jicon = new JLabel(icon);
if (bilder[count] == 0) {
panelAnzeige.add(new JPanel());
bildSpeicher[count] = "Leer";
}
else {
panelAnzeige.add(jicon);
bildSpeicher[count] = file.getName();
}
count++;
if (count == 24) break;
}
}
if (count == 24) break;
}
getContentPane().add(BorderLayout.CENTER, panelAnzeige);
validate();
}
public void vorbelegen(int[] bilder) {
Random rm = new Random();
int zzahl = rm.nextInt(23) + 1;
int zzahl1 = zzahl;
for (;;) {
if (zzahl1 == 0)
break;
else {
zzahl = rm.nextInt(23) + 1;
if (bilder[zzahl] == 0) {
bilder[zzahl] = 1;
zzahl1--;
}
}
}
}
public void gebaeudeSpeichern() {
ta.setText("");
if (panelAnzeige != null) {
try {
ObjectOutputStream stream = new ObjectOutputStream(new FileOutputStream("simcity.stadt"));
stream.writeObject(bildSpeicher);
stream.close();
ta.setText("Speichern von simcity.stadt erfolgreich.");
} catch (Exception e) {
ta.setText("Speichern nicht möglich. " + e.getMessage());
}
}
else
ta.setText("Kein Inhalt, daher speichern nicht möglich.");
}
public void gebaeudeLaden() {
try {
ObjectInputStream stream = new ObjectInputStream(new FileInputStream("simcity.stadt"));
bildSpeicher = (String[])stream.readObject();
stream.close();
panelAnzeige = new JPanel(new GridLayout(4,6,1,1));
panelAnzeige = aufbauBilder(panelAnzeige, bildSpeicher);
getContentPane().add(BorderLayout.CENTER, panelAnzeige);
validate();
}
catch (Exception e) {
ta.setText("Laden nicht möglich. " + e.getMessage());
}
}
public JPanel aufbauBilder(JPanel panel, String[] bilder) {
for (int i = 0; i < bilder.length; i++) {
ImageIcon icon = new ImageIcon("images128/" + bilder[i]);
JLabel jicon = new JLabel(icon);
if (bilder[i] == "Leer") {
panelAnzeige.add(new JPanel());
}
else {
panelAnzeige.add(jicon);
}
}
return panelAnzeige;
}
public static void main(String[] args) {
Simcity2 sc = new Simcity2();
}
}