Hallo Leute, ich habe ein kleines Problem.
Und zwar folgendes: Wir beschäftigen uns in der Schule mit einem Projekt ("interner Wettbewerb") das einen Ski-Lauf verwalten soll.
Ich habe es zwar hinbekommen, dass ich zwischen 2 JPanels hin und her wechseln kann, und dann auch mein Bild gezeichnet wird, jedoch wird dieses Startbild nicht beim aller ersten Aufruf des Programms gezeichnet (wie ich es gerne hätte) 🙁
Wäre schön, wenn ihr mir helfen könntet 🙂
Hier der Starter (da wir mit BlueJ arbeiten):
Und hier die GUI:
Im Anhang noch das zu ladende Startbild -- wie gesagt, es klappt schon, jedoch erst, wenn ich 1-mal hin und her geschaltet habe 🙁
Und zwar folgendes: Wir beschäftigen uns in der Schule mit einem Projekt ("interner Wettbewerb") das einen Ski-Lauf verwalten soll.
Ich habe es zwar hinbekommen, dass ich zwischen 2 JPanels hin und her wechseln kann, und dann auch mein Bild gezeichnet wird, jedoch wird dieses Startbild nicht beim aller ersten Aufruf des Programms gezeichnet (wie ich es gerne hätte) 🙁
Wäre schön, wenn ihr mir helfen könntet 🙂
Hier der Starter (da wir mit BlueJ arbeiten):
Java:
import java.awt.Toolkit;
import java.awt.Window;
import java.awt.Dimension;
public class Starter
{
private Spiel meinSpiel;
public static void main(String[] args)
{
new Starter();
}
public Starter()
{
meinSpiel = new Spiel();
meinSpiel.setSize(1000, 800);
centerWindow(meinSpiel);
meinSpiel.setVisible(true);
meinSpiel.setAnfangsPanel();
}
public void centerWindow(Window window)
{
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = window.getSize();
if (frameSize.height > screenSize.height)
{
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width)
{
frameSize.width = screenSize.width;
}
window.setLocation( (screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2
);
}
}
Und hier die GUI:
Java:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.awt.BorderLayout;
public class Spiel extends JFrame
{
private AnfangsPanel anfangsPanel = new AnfangsPanel(Toolkit.getDefaultToolkit().getImage("Bilder\\schnee.jpg"));
private JPanel spielerPanel = new JPanel();
private BorderLayout myBorderLayout = new BorderLayout();
private JMenuBar meineMenuBar = new JMenuBar();
private JMenu SpielMenu = new JMenu("Spiel");
private JMenu SpielerMenu = new JMenu("Spieler");
private JMenu RanglisteMenu = new JMenu("Rangliste");
private JMenuItem startMenuItem = new JMenuItem("Lauf starten"); //Spiel-Menu
private JMenuItem neustartMenuItem = new JMenuItem("Neustart"); //Spiel-Menu
private JMenuItem beendenMenuItem = new JMenuItem("Beenden"); //Spiel-Menu
private JMenuItem anmeldenMenuItem = new JMenuItem("anmelden"); //Spieler-Menu
private JMenuItem abmeldenMenuItem = new JMenuItem("abmelden"); //Spieler-Menu
private JMenuItem nextRunMenuItem = new JMenuItem("nächster Lauf"); //Rangliste-Menu
private JMenuItem gesamtMenuItem = new JMenuItem("Platzierung"); //Rangliste-Menu
private JLabel jLabelName = new JLabel();
private JTextField nameTF = new JTextField();
private JButton anmelden = new JButton();
public Spiel()
{
Controller myController = new Controller(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(myBorderLayout);
anfangsPanel.setLayout(null);
spielerPanel.setLayout(null);
setJMenuBar(meineMenuBar);
meineMenuBar.add(SpielMenu);
meineMenuBar.add(SpielerMenu);
meineMenuBar.add(RanglisteMenu);
SpielMenu.add(startMenuItem);
SpielMenu.add(neustartMenuItem);
SpielMenu.add(beendenMenuItem);
SpielerMenu.add(anmeldenMenuItem);
SpielerMenu.add(abmeldenMenuItem);
RanglisteMenu.add(nextRunMenuItem);
RanglisteMenu.add(gesamtMenuItem);
startMenuItem.setActionCommand("start"); //Action Command
startMenuItem.addActionListener(myController);
neustartMenuItem.setActionCommand("neustart"); //Action Command
neustartMenuItem.addActionListener(myController);
beendenMenuItem.setActionCommand("beenden"); //Action Command
beendenMenuItem.addActionListener(myController);
anmeldenMenuItem.setActionCommand("switch anmelden"); //Action-Command
anmeldenMenuItem.addActionListener(myController);
abmeldenMenuItem.setActionCommand("abmelden"); //Action-Command
abmeldenMenuItem.addActionListener(myController);
nextRunMenuItem.setActionCommand("Liste next"); //Action-Command
nextRunMenuItem.addActionListener(myController);
gesamtMenuItem.setActionCommand("Liste gesamt"); //Action-Command
gesamtMenuItem.addActionListener(myController);
jLabelName.setText("Name");
jLabelName.setBounds(new Rectangle(10, 80, 50, 20));
nameTF.setBounds(new Rectangle(55, 75, 150, 30));
anmelden.setBounds(new Rectangle(270, 75, 150, 30));
anmelden.setText("Spieler anmelden");
anmelden.setActionCommand("spieler anmelden"); //Action-Command
anmelden.addActionListener(myController);
spielerPanel.setBackground(Color.gray);
spielerPanel.add(jLabelName, null);
spielerPanel.add(nameTF, null);
spielerPanel.add(anmelden, null);
}
public JTextField getNameTF()
{
return nameTF;
}
public void setAnfangsPanel()
{
this.getContentPane().add(anfangsPanel, BorderLayout.CENTER);
spielerPanel.setVisible(false);
anfangsPanel.setVisible(true);
}
public void setSpielerPanel()
{
this.getContentPane().add(spielerPanel, BorderLayout.CENTER);
anfangsPanel.setVisible(false);
spielerPanel.setVisible(true);
}
class AnfangsPanel extends JPanel
{
private Image image;
AnfangsPanel(Image image)
{
this.image = image;
repaint();
}
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(image, -100, -100, null);
}
}
}
Im Anhang noch das zu ladende Startbild -- wie gesagt, es klappt schon, jedoch erst, wenn ich 1-mal hin und her geschaltet habe 🙁