Guten Abend,
ich hab ein Problem mit JSwing,
also ich versuche ein Bild in ein JPanel hinzuzufügen und zwar über eine verkettete Liste damit ich mehrere Bilder zeichnen kann. Das Problem ist das das Bild was ich hinzufügen will nicht angezeigt wird und das Programm nach dem repaint() aufgerufen abschirmt und nurnoch über den TaskManager geschlossen werden kann.
[Java]
//Forum: http://www.java-forum.org/java-basi...rexception-beim-laden-bildern.html#post910388
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.border.TitledBorder;
import java.io.*;
import javax.imageio.*;
import java.net.*;
interface Pictures
{
EinfachVerketteteListe list = new EinfachVerketteteListe();
}
/*
* Marcus Janiks Engine zur einfach Erstellung von einfachen Grafischen Anwendung unter Bentzung von Swing
*/
public class Leinwand extends JFrame
{
ShowCanvas Center, Left, Right, Top, Bot;
{}
Leinwand(String Titel, int breite, int hoehe)
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle(Titel);
setSize(breite, hoehe);
setResizable(false);
setVisible(true);
}
public void neueFlaeche(int height, int width, String position)
{
if(position.equals("Mitte"))
{
Center = new ShowCanvas(height, width);
add(Center, BorderLayout.CENTER);
}
else if(position.equals("Rechts"))
{
Right = new ShowCanvas(height, width);
add(Center, BorderLayout.LINE_END);
}
else if(position.equals("Links"))
{
Left = new ShowCanvas(height, width);
add(Center, BorderLayout.LINE_START);
}
else if(position.equals("Oben"))
{
Top = new ShowCanvas(height, width);
add(Center, BorderLayout.PAGE_START);
}
else if(position.equals("Unten"))
{
Bot = new ShowCanvas(height, width);
add(Center, BorderLayout.PAGE_END);
}
validate();
repaint();
}
public void ladeBild(String name, String pfad)
{
Pictures.list.addLast(new ImageManager(name, pfad));
}
public void bildDazu(String position, String bild, int x, int y)
{
if(position.equals("Mitte"))
{
Center.addImage(bild, x, y);
}
}
}
class ImageManager
{
String name;
Image icon;
int width, height;
int x, y;
ImageManager(String name, String path)
{
icon = new ImageIcon(this.getClass().getResource(path)).getImage();
this.name = name;
}
ImageManager(String bild, int nx, int ny)
{
icon = Pictures.list.findPic(bild);
x = nx;
y = ny;
this.name = "Bild";
}
public Image getImage()
{
return icon;
}
public String getName()
{
return name;
}
public int getY()
{
return y;
}
public int getX()
{
return x;
}
}
class ShowCanvas extends JPanel
{
EinfachVerketteteListe BilderReihenfolge;
int width, height;
ShowCanvas(int nwidth, int nheight) {
super(new BorderLayout());
width = nwidth;
height = nheight;
setSize(width, height);
BilderReihenfolge = new EinfachVerketteteListe();
setPreferredSize(new Dimension(width, height));
setBackground(Color.black);
//addMouseMotionListener(new MouseMotionHandler());
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2D = (Graphics2D) g;
ListElement le = BilderReihenfolge.getFirstElem();
while (le != null)
{
g2D.drawImage(le.getObj().getImage(), le.getObj().getX(),le.getObj().getY(), this);
//g2D.drawImage(background.getBufferedImage(),0,0, this);
}
}
class MouseMotionHandler extends MouseMotionAdapter {
public void mouseDragged(MouseEvent e) {
/*x = e.getX();
y = e.getY();
repaint();*/
}
public void mouseMoved(MouseEvent e) {
}
}
public void addImage(String name, int x, int y)
{
BilderReihenfolge.addLast(new ImageManager(name, x, y));
repaint();
}
}
class GameTimer
{
private final int NANOSECONDS = 1000000000;
private boolean timerStarted;
private long beginTime, time, timeDifference;
public GameTimer()
{
timerStarted = false;
beginTime = 0;
time = 0;
timeDifference = 0;
}
public void start()
{
timerStarted = true;
beginTime = System.nanoTime();
}
public void stop()
{
timerStarted = false;
beginTime = 0;
}
public int get()
{
time = System.nanoTime();
timeDifference = time - beginTime;
beginTime = time;
return (int)timeDifference;
}
}
class EinfachVerketteteListe {
ListElement startElem;
public EinfachVerketteteListe()
{
}
public void addLast(ImageManager o){
if(startElem == null)
startElem = new ListElement(o);
else
{
ListElement newElem = new ListElement(o);
ListElement lastElem = getLastElem();
lastElem.setNextElem(newElem);
}
}
public void insertAfter(ImageManager prevItem, ImageManager newItem) {
ListElement newElem, nextElem, pointerElem;
pointerElem = startElem.getNextElem();
while(pointerElem != null && !pointerElem.getObj().equals(prevItem)){
pointerElem = pointerElem.getNextElem();
}
newElem = new ListElement(newItem);
nextElem = pointerElem.getNextElem();
pointerElem.setNextElem(newElem);
newElem.setNextElem(nextElem);
}
public void delete(ImageManager o){
ListElement le = startElem;
while (le.getNextElem() != null && !le.getObj().equals(o)){
if(le.getNextElem().getObj().equals(o)){
if(le.getNextElem().getNextElem()!=null)
le.setNextElem(le.getNextElem().getNextElem());
else{
le.setNextElem(null);
break;
}
}
le = le.getNextElem();
}
}
public boolean find(ImageManager o){
ListElement le = startElem;
while (le != null){
if(le.getObj().equals(o))
return true;
le = le.nextElem;
}
return false;
}
public Image findPic(String bild)
{
ListElement le = startElem;
while (le != null)
{
if(le.getObj().getName().equals(bild))
{
return le.getObj().getImage();
}
le = le.nextElem;
}
return null;
}
public ListElement getFirstElem() {
return startElem;
}
public ListElement getLastElem() {
ListElement le = startElem;
while(le.getNextElem() != null){
le = le.getNextElem();
}
return le;
}
public void writeList() {
ListElement le = startElem;
while(le != null){
System.out.println(le.getObj());
le = le.getNextElem();
}
}
}
class ListElement {
ImageManager obj;
ListElement nextElem;
public ListElement(ImageManager obj) {
this.obj = obj;
nextElem = null;
}
public void setNextElem(ListElement nextElem) {
this.nextElem = nextElem;
}
public ListElement getNextElem() {
return nextElem;
}
public ImageManager getObj() {
return obj;
}
}
[/Java]
Die Klasse aus der aus alles gestartet wird:
[Java]
public class Win4
{
Leinwand canvas;
Win4()
{
canvas = new Leinwand("4 Gewinnt", 900, 400);
canvas.neueFlaeche(400, 200, "Mitte");
canvas.ladeBild("background", "images/sunw01.jpg");
canvas.bildDazu("Mitte", "background", 0, 0);
}
}
[/Java]
Ich weiß nicht genau was das Problem ist schätze aber das Graphics2D das Bild nicht zeichnen kann, wieso auch immer und das hängt sich dann auf.
Ich hoffe ihr wisst was das Problem ist und könnt mir bei der Lösung helfen.
ich hab ein Problem mit JSwing,
also ich versuche ein Bild in ein JPanel hinzuzufügen und zwar über eine verkettete Liste damit ich mehrere Bilder zeichnen kann. Das Problem ist das das Bild was ich hinzufügen will nicht angezeigt wird und das Programm nach dem repaint() aufgerufen abschirmt und nurnoch über den TaskManager geschlossen werden kann.
[Java]
//Forum: http://www.java-forum.org/java-basi...rexception-beim-laden-bildern.html#post910388
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.border.TitledBorder;
import java.io.*;
import javax.imageio.*;
import java.net.*;
interface Pictures
{
EinfachVerketteteListe list = new EinfachVerketteteListe();
}
/*
* Marcus Janiks Engine zur einfach Erstellung von einfachen Grafischen Anwendung unter Bentzung von Swing
*/
public class Leinwand extends JFrame
{
ShowCanvas Center, Left, Right, Top, Bot;
{}
Leinwand(String Titel, int breite, int hoehe)
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle(Titel);
setSize(breite, hoehe);
setResizable(false);
setVisible(true);
}
public void neueFlaeche(int height, int width, String position)
{
if(position.equals("Mitte"))
{
Center = new ShowCanvas(height, width);
add(Center, BorderLayout.CENTER);
}
else if(position.equals("Rechts"))
{
Right = new ShowCanvas(height, width);
add(Center, BorderLayout.LINE_END);
}
else if(position.equals("Links"))
{
Left = new ShowCanvas(height, width);
add(Center, BorderLayout.LINE_START);
}
else if(position.equals("Oben"))
{
Top = new ShowCanvas(height, width);
add(Center, BorderLayout.PAGE_START);
}
else if(position.equals("Unten"))
{
Bot = new ShowCanvas(height, width);
add(Center, BorderLayout.PAGE_END);
}
validate();
repaint();
}
public void ladeBild(String name, String pfad)
{
Pictures.list.addLast(new ImageManager(name, pfad));
}
public void bildDazu(String position, String bild, int x, int y)
{
if(position.equals("Mitte"))
{
Center.addImage(bild, x, y);
}
}
}
class ImageManager
{
String name;
Image icon;
int width, height;
int x, y;
ImageManager(String name, String path)
{
icon = new ImageIcon(this.getClass().getResource(path)).getImage();
this.name = name;
}
ImageManager(String bild, int nx, int ny)
{
icon = Pictures.list.findPic(bild);
x = nx;
y = ny;
this.name = "Bild";
}
public Image getImage()
{
return icon;
}
public String getName()
{
return name;
}
public int getY()
{
return y;
}
public int getX()
{
return x;
}
}
class ShowCanvas extends JPanel
{
EinfachVerketteteListe BilderReihenfolge;
int width, height;
ShowCanvas(int nwidth, int nheight) {
super(new BorderLayout());
width = nwidth;
height = nheight;
setSize(width, height);
BilderReihenfolge = new EinfachVerketteteListe();
setPreferredSize(new Dimension(width, height));
setBackground(Color.black);
//addMouseMotionListener(new MouseMotionHandler());
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2D = (Graphics2D) g;
ListElement le = BilderReihenfolge.getFirstElem();
while (le != null)
{
g2D.drawImage(le.getObj().getImage(), le.getObj().getX(),le.getObj().getY(), this);
//g2D.drawImage(background.getBufferedImage(),0,0, this);
}
}
class MouseMotionHandler extends MouseMotionAdapter {
public void mouseDragged(MouseEvent e) {
/*x = e.getX();
y = e.getY();
repaint();*/
}
public void mouseMoved(MouseEvent e) {
}
}
public void addImage(String name, int x, int y)
{
BilderReihenfolge.addLast(new ImageManager(name, x, y));
repaint();
}
}
class GameTimer
{
private final int NANOSECONDS = 1000000000;
private boolean timerStarted;
private long beginTime, time, timeDifference;
public GameTimer()
{
timerStarted = false;
beginTime = 0;
time = 0;
timeDifference = 0;
}
public void start()
{
timerStarted = true;
beginTime = System.nanoTime();
}
public void stop()
{
timerStarted = false;
beginTime = 0;
}
public int get()
{
time = System.nanoTime();
timeDifference = time - beginTime;
beginTime = time;
return (int)timeDifference;
}
}
class EinfachVerketteteListe {
ListElement startElem;
public EinfachVerketteteListe()
{
}
public void addLast(ImageManager o){
if(startElem == null)
startElem = new ListElement(o);
else
{
ListElement newElem = new ListElement(o);
ListElement lastElem = getLastElem();
lastElem.setNextElem(newElem);
}
}
public void insertAfter(ImageManager prevItem, ImageManager newItem) {
ListElement newElem, nextElem, pointerElem;
pointerElem = startElem.getNextElem();
while(pointerElem != null && !pointerElem.getObj().equals(prevItem)){
pointerElem = pointerElem.getNextElem();
}
newElem = new ListElement(newItem);
nextElem = pointerElem.getNextElem();
pointerElem.setNextElem(newElem);
newElem.setNextElem(nextElem);
}
public void delete(ImageManager o){
ListElement le = startElem;
while (le.getNextElem() != null && !le.getObj().equals(o)){
if(le.getNextElem().getObj().equals(o)){
if(le.getNextElem().getNextElem()!=null)
le.setNextElem(le.getNextElem().getNextElem());
else{
le.setNextElem(null);
break;
}
}
le = le.getNextElem();
}
}
public boolean find(ImageManager o){
ListElement le = startElem;
while (le != null){
if(le.getObj().equals(o))
return true;
le = le.nextElem;
}
return false;
}
public Image findPic(String bild)
{
ListElement le = startElem;
while (le != null)
{
if(le.getObj().getName().equals(bild))
{
return le.getObj().getImage();
}
le = le.nextElem;
}
return null;
}
public ListElement getFirstElem() {
return startElem;
}
public ListElement getLastElem() {
ListElement le = startElem;
while(le.getNextElem() != null){
le = le.getNextElem();
}
return le;
}
public void writeList() {
ListElement le = startElem;
while(le != null){
System.out.println(le.getObj());
le = le.getNextElem();
}
}
}
class ListElement {
ImageManager obj;
ListElement nextElem;
public ListElement(ImageManager obj) {
this.obj = obj;
nextElem = null;
}
public void setNextElem(ListElement nextElem) {
this.nextElem = nextElem;
}
public ListElement getNextElem() {
return nextElem;
}
public ImageManager getObj() {
return obj;
}
}
[/Java]
Die Klasse aus der aus alles gestartet wird:
[Java]
public class Win4
{
Leinwand canvas;
Win4()
{
canvas = new Leinwand("4 Gewinnt", 900, 400);
canvas.neueFlaeche(400, 200, "Mitte");
canvas.ladeBild("background", "images/sunw01.jpg");
canvas.bildDazu("Mitte", "background", 0, 0);
}
}
[/Java]
Ich weiß nicht genau was das Problem ist schätze aber das Graphics2D das Bild nicht zeichnen kann, wieso auch immer und das hängt sich dann auf.
Ich hoffe ihr wisst was das Problem ist und könnt mir bei der Lösung helfen.