Hey liebe Community,
Ich bin gerade dabei ein JFrame zu programmieren, welches aus 4 verschiedenen Tielen besteht.
Oben soll linke ein JMenu sein, daneben ein JLabel.
darunter soll ein Bildausschnitt sein, welcher sich mit den Pfeiltasten Bewegen lässt.
Unten soll wieder sein JLabel sein.
Hier mal eine Grobe Skizze:
Das JManu und JLabels klappen auch ohne Probleme. Probleme bereitet mit der Bidlausschnitt.
Habe schon etwas rechachiert, und ein Ansatz war, das Bild per JLabel dort hinzuplazieren. Das funktioniert auch, allerdings nicht als Bildausschnitt, sondern als ganzes Bild.
Kann man nicht direkt das Image auf den JFrame ausgeben?
Hier mal eine grobe Codeübersicht: (Habe JMenu und die JLabels noch nicht drin, nur das Bild)
Ich hoffe mein Problem wurde verstanden.
Habe dennoch nochmal ein Bild gezeichnet:
(Der Rote Rahmen soll das eigentliche Bild darstellen, gezeigt wird aber natürlich nur der Bereich auf dem Frame)
Ich bin gerade dabei ein JFrame zu programmieren, welches aus 4 verschiedenen Tielen besteht.
Oben soll linke ein JMenu sein, daneben ein JLabel.
darunter soll ein Bildausschnitt sein, welcher sich mit den Pfeiltasten Bewegen lässt.
Unten soll wieder sein JLabel sein.
Hier mal eine Grobe Skizze:
Das JManu und JLabels klappen auch ohne Probleme. Probleme bereitet mit der Bidlausschnitt.
Habe schon etwas rechachiert, und ein Ansatz war, das Bild per JLabel dort hinzuplazieren. Das funktioniert auch, allerdings nicht als Bildausschnitt, sondern als ganzes Bild.
Kann man nicht direkt das Image auf den JFrame ausgeben?
Hier mal eine grobe Codeübersicht: (Habe JMenu und die JLabels noch nicht drin, nur das Bild)
Java:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.*;
public class SpielWelt extends JFrame implements KeyListener, ActionListener{
Timer time;
private String Name;
private JFrame frame;
// die Laufvariable, falls eine Pfeiltaste gedrückt wurde
int lauf;
// Bild soll sich in X-Richtung bewegen, analog würde aus y_Bild dazu kommen..
int x_Bild;
private JLabel lab;
private Image img;
// Konstruktor
public SpielWelt(String name){
super();
Name = name;
initGui();
}
// JFrame erzeugen
private void initGui() {
frame = new JFrame("Name");
frame.setSize(1000, 800);
frame.setLocationRelativeTo(frame);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Layout würde ich gerne bei null lassen, da ich so flexibler und eigenständiger meine
// Objekte anordnen kann..
frame.setLayout(null);
// Leider bekomme ich nur ein Bild über den absoluten Pfadnamen, würde ihn natürlich
// lieber direkt aus Eclipse holen.. aber alle Versuche scheiterten.. habt ihr vielleicht
// auch hier einen hilfreichen Tipp übrig?
ImageIcon u = new ImageIcon("C:\\.....\\InselSouth.JPG");
img = u.getImage();
// Die Lösung per JLabel, funktioniert, allerdings kann ich mit den
// Pfeiltasten das Bild nicht bewegen
lab = new JLabel(new ImageIcon(img));
lab.setBounds(0, 30, 1000, 600);
// soll alle 5 Millisekunden eine Änderung prüfen..
time = new Timer(5,this);
time.start();
// Add to frame
frame.add(lab);
frame.addKeyListener(this);
frame.setVisible(true);
}
// Habe ich aus dem Internet, aber leider kann ich es nicht wirklich verwenden
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(img,x_Bild,0,null);
}
// KeyListener.. wenn nach Links gedrückt wird, dann soll der Wert
// auf 2 gesetzt werden, sodass der Bildausschnitt 2 Pixel nach links
// wandert.
@Override
public void keyPressed(KeyEvent e) {
int myKey = e.getKeyCode();
if(myKey == KeyEvent.VK_LEFT){
lauf += 2;
// zum Prüfen, ob sich was tut..
System.out.println(lauf);
}
}
// Wenn die Taste losgelassen wird soll folgendes ausgeführt werden:
// - die Laufvariable soll nicht weiter erhöht werden
// - x_Bild, soll neu beschrieben werden
// - Das Bild soll neu gezeichnet werden
@Override
public void keyReleased(KeyEvent e) {
int myKey = e.getKeyCode();
if(myKey == KeyEvent.VK_LEFT){
lauf += 0;
System.out.println(lauf);
bewegen();
repaint();
}
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
// war nur zu Testzwecken, glaube der ActionListener ist hierbei
// überflüssig.
@Override
public void actionPerformed(ActionEvent arg0) {
bewegen();
repaint();
}
public void bewegen() {
x_Bild += lauf;
}
}
Ich hoffe mein Problem wurde verstanden.
Habe dennoch nochmal ein Bild gezeichnet:
(Der Rote Rahmen soll das eigentliche Bild darstellen, gezeigt wird aber natürlich nur der Bereich auf dem Frame)