Hallo zusammen. Ich bin derzeit an einem Projekt dran, an dem ich mir wünsche, dass der User durch Drücken des JButtons die Grafik in der Mitte des Fensters austauschen kann. Sprich: Die vorherige Grafik soll verschwinden und die gewünschte andere Grafik soll erscheinen. Im Prinzip klingt dies ja nicht schwer, jedoch bekomme ich es leider mit meinen anfängerischen Kentnissen nicht hin. Mein Lösungsansatz war folgender: Ich habe in einer ImageLoader-Klasse die Grafiken als BufferedImage laden lassen und diese auch in meiner Draw-Klasse zeichnen können. Dieses Zeichnen meiner Grafik wollte ich in eine Methode packen und diese Methode in den ActionListener meines JButtons einbringen. Naja, daraufhin wurde ich von Fehlermeldungen bombardiert. Der andere irrelevante Code sowie die Kommentare können ignoriert werden, diese sind aufgrund des Aspekts dass es ein Schulprojekt ist Pflicht.
Wäre sehr nett wenn mir jemand weiterhelfen könnte.
[CODE lang="java" title="Meine ImageLoader Klasse"]import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageLoader {
BufferedImage logo;
BufferedImage TabelleGewicht;
public ImageLoader() {
try {
logo = ImageIO.read(getClass().getResourceAsStream("img/logo.png"));
} catch (IOException e) {
e.printStackTrace();
}
try {
TabelleGewicht = ImageIO.read(getClass().getResourceAsStream("img/TabelleGewicht.png"));
} catch (IOException e) {
}
}
}[/CODE]
[CODE lang="java" title="Meine Draw Klasse"]import java.awt.*;
import javax.swing.JLabel;
public class Draw extends JLabel{
/**
*
*/
private static final long serialVersionUID = 1L;
static ImageLoader il = new ImageLoader();
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setColor(Color.WHITE);
g.fillRect(0, 70, Var.fensterbreite, 3); // obere weiße Linie
g.fillRect(0, 520, 695, 3); // untere weiße LInie
g.fillRect(168, 0, 3, 70);
g.fillRect(328, 0, 3, 70);
g.fillRect(488, 0, 3, 70);
g.fillRect(648, 0, 3, 70);
g.fillRect(168, 520, 3, 70);
g.fillRect(328, 520, 3, 70);
g.drawImage(il.logo, Var.logox, Var.logoy, Var.logobr, Var.logoho, this);
g.drawImage(il.TabelleGewicht, Var.tabellex, Var.tabelley, 600, 105, this);
/*
* Logo selbst im Internet erstellt: https://de.freelogodesign.org/
*/
repaint();
/*
* g2d-Graphics Teile aus vorherigem Projekt kopiert.
*
*/
}
}[/CODE]
[CODE lang="java" title="Meine Button Klasse"]import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class ButtonLeiste extends JFrame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
// Erstellen der Button und Beschriftung
static JButton jbut1 = new JButton("Umrechnen");
static JButton jbut2 = new JButton("Zurücksetzen");
static JButton jbut3 = new JButton("Gewicht");
static JButton jbut4 = new JButton("Länge");
static JButton jbut5 = new JButton("Zeit");
static JButton jbut6 = new JButton("Geschwindigkeit");
static JButton jbut7 = new JButton("Währung");
public ButtonLeiste() {
// Setzen der Größe und der Lokation der Buttons
jbut1.setBounds(20, 535, Var.jbuttonbreite, Var.jbuttonhoehe);
jbut2.setBounds(180, 535, Var.jbuttonbreite, Var.jbuttonhoehe);
jbut3.setBounds(20, 20, Var.jbuttonbreite, Var.jbuttonhoehe);
jbut4.setBounds(180, 20, Var.jbuttonbreite, Var.jbuttonhoehe);
jbut5.setBounds(340, 20, Var.jbuttonbreite, Var.jbuttonhoehe);
jbut6.setBounds(500, 20, Var.jbuttonbreite, Var.jbuttonhoehe);
jbut7.setBounds(660, 20, Var.jbuttonbreite, Var.jbuttonhoehe);
/*
* Idee für die setBounds-Methode aus dem Internet
*
* Anleitung für die addActionListener-Methode aus dem Internet
*/
// Button bekommt seine Funktion / Methode wird dem Button zugeordnet mit einem
// ActionListener
jbut1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
InputTextfields.rechnen1();
Textfields.jtf2.setForeground(Color.BLACK); // Fixen eines Fehlers, dass die Textfarbe des 2. Feldes
// nicht aktualisiert wird
}
});
jbut2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Textfields.clearTextfields();
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}[/CODE]
Wäre sehr nett wenn mir jemand weiterhelfen könnte.
[CODE lang="java" title="Meine ImageLoader Klasse"]import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageLoader {
BufferedImage logo;
BufferedImage TabelleGewicht;
public ImageLoader() {
try {
logo = ImageIO.read(getClass().getResourceAsStream("img/logo.png"));
} catch (IOException e) {
e.printStackTrace();
}
try {
TabelleGewicht = ImageIO.read(getClass().getResourceAsStream("img/TabelleGewicht.png"));
} catch (IOException e) {
}
}
}[/CODE]
[CODE lang="java" title="Meine Draw Klasse"]import java.awt.*;
import javax.swing.JLabel;
public class Draw extends JLabel{
/**
*
*/
private static final long serialVersionUID = 1L;
static ImageLoader il = new ImageLoader();
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setColor(Color.WHITE);
g.fillRect(0, 70, Var.fensterbreite, 3); // obere weiße Linie
g.fillRect(0, 520, 695, 3); // untere weiße LInie
g.fillRect(168, 0, 3, 70);
g.fillRect(328, 0, 3, 70);
g.fillRect(488, 0, 3, 70);
g.fillRect(648, 0, 3, 70);
g.fillRect(168, 520, 3, 70);
g.fillRect(328, 520, 3, 70);
g.drawImage(il.logo, Var.logox, Var.logoy, Var.logobr, Var.logoho, this);
g.drawImage(il.TabelleGewicht, Var.tabellex, Var.tabelley, 600, 105, this);
/*
* Logo selbst im Internet erstellt: https://de.freelogodesign.org/
*/
repaint();
/*
* g2d-Graphics Teile aus vorherigem Projekt kopiert.
*
*/
}
}[/CODE]
[CODE lang="java" title="Meine Button Klasse"]import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class ButtonLeiste extends JFrame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
// Erstellen der Button und Beschriftung
static JButton jbut1 = new JButton("Umrechnen");
static JButton jbut2 = new JButton("Zurücksetzen");
static JButton jbut3 = new JButton("Gewicht");
static JButton jbut4 = new JButton("Länge");
static JButton jbut5 = new JButton("Zeit");
static JButton jbut6 = new JButton("Geschwindigkeit");
static JButton jbut7 = new JButton("Währung");
public ButtonLeiste() {
// Setzen der Größe und der Lokation der Buttons
jbut1.setBounds(20, 535, Var.jbuttonbreite, Var.jbuttonhoehe);
jbut2.setBounds(180, 535, Var.jbuttonbreite, Var.jbuttonhoehe);
jbut3.setBounds(20, 20, Var.jbuttonbreite, Var.jbuttonhoehe);
jbut4.setBounds(180, 20, Var.jbuttonbreite, Var.jbuttonhoehe);
jbut5.setBounds(340, 20, Var.jbuttonbreite, Var.jbuttonhoehe);
jbut6.setBounds(500, 20, Var.jbuttonbreite, Var.jbuttonhoehe);
jbut7.setBounds(660, 20, Var.jbuttonbreite, Var.jbuttonhoehe);
/*
* Idee für die setBounds-Methode aus dem Internet
*
* Anleitung für die addActionListener-Methode aus dem Internet
*/
// Button bekommt seine Funktion / Methode wird dem Button zugeordnet mit einem
// ActionListener
jbut1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
InputTextfields.rechnen1();
Textfields.jtf2.setForeground(Color.BLACK); // Fixen eines Fehlers, dass die Textfarbe des 2. Feldes
// nicht aktualisiert wird
}
});
jbut2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Textfields.clearTextfields();
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}[/CODE]