Hallo,
ich habe folgenden Code mal programmiert:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class GlasFenster extends JFrame implements ActionListener, MouseMotionListener{
public JFrame frame;
public JPanel panel;
public JButton button;
public JLabel label;
public GlassPane glasspane;
public int xpos, ypos, höhe, breite;
public GlasFenster(){
glasspane = new GlassPane();
frame = new JFrame();
button = new JButton("test");
label = new JLabel();
panel = new JPanel();
BorderLayout borderlayout = new BorderLayout();
frame.setBounds(getMaximumWindowBounds());
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setLayout(borderlayout);
int höhe = frame.getHeight();
int breite = frame.getWidth();
label.setBounds(280,80,200,100); // setBounds wird nur mal für diesen Versuch eingesetzt!
label.addMouseMotionListener(this);
button.setBounds(20, 20, 100, 50); // setBounds wird nur mal für diesen Versuch eingesetzt!
button.addActionListener(this);
panel.setLayout(null);
panel.add(button);
panel.add(label);
frame.getWidth();
frame.getHeight();
glasspane.setBounds(0,0,breite,höhe);
frame.add(panel, BorderLayout.CENTER);
frame.setGlassPane(glasspane);
glasspane.setVisible(true);
frame.setVisible(true);
}
public static void main(String[] args){
GlasFenster pc = new GlasFenster();
}
// Unterklasse:
public class GlassPane extends JComponent{
public void paint(Graphics g){
g.setColor(Color.red);
g.fillRect(xpos,ypos,50,50);
}
}
@Override
public void mouseDragged(MouseEvent arg0){
}
@Override
public void mouseMoved(MouseEvent arg0){
xpos = arg0.getX();
ypos = arg0.getY();
glasspane.repaint();
}
@Override
public void actionPerformed(ActionEvent event) {
if(event.getSource() == this.button){
label.setText("Es hat funktioniert!");
}
}
private static Rectangle getMaximumWindowBounds(){
GraphicsEnvironment graphicsEnvironment =
GraphicsEnvironment.getLocalGraphicsEnvironment();
return graphicsEnvironment.getMaximumWindowBounds();
}
}
Leider bewegt sich das rote Quadrat nur in einem ganz kleinen Bereich.
Weiters ist es versetzt zum Mauszeiger, es sollte sich aber direkt bei der Maus befinden ohne einen Versatz.
Weiß leider nicht, was ich falsch mache?
Bitte euch um Hilfe!
SG