R
Random
Gast
Hi,
ich habe ein Problem beim positionieren eines JPanels, während ich eine Hintergrunggrafik geladen habe. Dieses JPanel besitzt ebenfalls ein Bild. Hier die Quelltexte:
EditorForm.java
Wrapper.java
ForegroundPic.java
Das Ergebnis:
Mein eigentliches Ziel ist es die Vordergrundgrafik (Java Logo) absolut mit den Koordinaten (x, y von ForegroundPic und Wrapper) auf dem Frame zu positionieren. Die Vordergrundgrafik wird jedoch immer mittig positioniert. Ich habe schon verdammt viel ausprobiert z.B. Layout ändern. Falls es interessiert: Ich nutze Netbeans.
ich habe ein Problem beim positionieren eines JPanels, während ich eine Hintergrunggrafik geladen habe. Dieses JPanel besitzt ebenfalls ein Bild. Hier die Quelltexte:
EditorForm.java
Java:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* EditorForm.java
*
* Created on 13.06.2011, 15:17:50
*/
package H_Game;
/**
*
* @author Carl Hamann
*/
public class EditorForm extends javax.swing.JFrame
{
/** Creates new form EditorForm */
public EditorForm()
{
initComponents();
setContentPane(new BackgroundPic("bg.jpg"));
ForegroundPic fp = new ForegroundPic(0, 0, "fp.jpg", this);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
MenuBar = new javax.swing.JMenuBar();
jMenuFile = new javax.swing.JMenu();
jMenuItemLoadImg = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("H_Editor");
setAlwaysOnTop(true);
getContentPane().setLayout(null);
jMenuFile.setText("Datei");
jMenuItemLoadImg.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_I, java.awt.event.InputEvent.CTRL_MASK));
jMenuItemLoadImg.setText("Bild laden");
jMenuFile.add(jMenuItemLoadImg);
MenuBar.add(jMenuFile);
setJMenuBar(MenuBar);
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-748)/2, (screenSize.height-396)/2, 748, 396);
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[])
{
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new EditorForm().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JMenuBar MenuBar;
private javax.swing.JMenu jMenuFile;
private javax.swing.JMenuItem jMenuItemLoadImg;
// End of variables declaration
}
Wrapper.java
Java:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package H_Game;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import javax.swing.JPanel;
/**
*
* @author Carl Hamann
*/
public class BackgroundPic extends JPanel
{
private Image img = null;
BackgroundPic (String path)
{
if (path != null)
{
MediaTracker mt = new MediaTracker(this);
img = Toolkit.getDefaultToolkit().getImage(path);
mt.addImage(img, 0);
try
{
mt.waitForAll();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
@Override protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
}
}
ForegroundPic.java
Java:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package H_Game;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.net.URL;
import javax.swing.JPanel;
/**
*
* @author Carl Hamann
*/
public class ForegroundPic extends JPanel
{
private Image img = null;
private Wrapper wrapper = null;
private int x, y;
ForegroundPic (int x, int y, String path, EditorForm eForm)
{
this.x = x;
this.y = y;
Toolkit toolkit = Toolkit.getDefaultToolkit();
MediaTracker mediatracker = new MediaTracker(this);
img = toolkit.getImage(path);
wrapper = new Wrapper(img, x, y);
mediatracker.addImage(img, 0);
try
{
mediatracker.waitForID(0);
}
catch (InterruptedException e)
{
img = null;
}
wrapper.repaint();
eForm.add(wrapper);
}
ForegroundPic (int x, int y, URL path, EditorForm eForm)
{
this.x = x;
this.y = y;
Toolkit toolkit = Toolkit.getDefaultToolkit();
MediaTracker mediatracker = new MediaTracker(this);
img = toolkit.createImage(path);
wrapper = new Wrapper(img, x, y);
mediatracker.addImage(img, 0);
try
{
mediatracker.waitForID(0);
}
catch (InterruptedException e)
{
img = null;
}
wrapper.repaint();
eForm.add(wrapper);
}
public Wrapper getWrapper ()
{
return wrapper;
}
}
Das Ergebnis:
Mein eigentliches Ziel ist es die Vordergrundgrafik (Java Logo) absolut mit den Koordinaten (x, y von ForegroundPic und Wrapper) auf dem Frame zu positionieren. Die Vordergrundgrafik wird jedoch immer mittig positioniert. Ich habe schon verdammt viel ausprobiert z.B. Layout ändern. Falls es interessiert: Ich nutze Netbeans.