Hey Leute,
ich habe mal auf die schnelle eine GUI zusammengestellt. Meine Frage ist folgende:
Warum werden, wenn eine Maustaste zum Malen gedrückt wird, oben im Frame zwei Buttons angezeigt? Bzw. der untere Button verhält sich wie ein JLabel.
Ich habe es im Frame bereits mit repaint(), revalidate() und updateUI() sowohl für den Frame als auch für das buttons Panel versucht. Dies führte zu keiner Verbesserung.
Weiß jemand zufällig woran dies liegt?
Code: Klasse Gui:
Klasse paint:
Falls hier jemand Bescheid weiß, wäre eine Antwort super
ich habe mal auf die schnelle eine GUI zusammengestellt. Meine Frage ist folgende:
Warum werden, wenn eine Maustaste zum Malen gedrückt wird, oben im Frame zwei Buttons angezeigt? Bzw. der untere Button verhält sich wie ein JLabel.
Ich habe es im Frame bereits mit repaint(), revalidate() und updateUI() sowohl für den Frame als auch für das buttons Panel versucht. Dies führte zu keiner Verbesserung.
Weiß jemand zufällig woran dies liegt?
Code: Klasse Gui:
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Hauptpanel implements ActionListener
{
JButton clear,exit;
static JPanel buttons;
Zeichenoberflaeche zo=new Zeichenoberflaeche();
JFrame frame=new JFrame();
public Hauptpanel()
{
clear=new JButton("clear");
exit=new JButton("exit");
buttons=new JPanel();
buttons.setLayout(new BorderLayout());
frame.setSize(500, 500);
clear.addActionListener(this);
exit.addActionListener(this);
buttons.add(clear,BorderLayout.NORTH);
buttons.add(exit,BorderLayout.SOUTH);
buttons.add(zo,BorderLayout.CENTER);
// buttons.revalidate();
// buttons.updateUI();//paint();
frame.getContentPane().add(buttons);
frame.add(buttons);
frame.setVisible(true);
frame.repaint();
}
public static void main(String[] args) {
new Hauptpanel();
}
@Override
public void actionPerformed(ActionEvent e) {
JButton button=(JButton)e.getSource();
if(button==clear)
{
frame.getContentPane().setBackground(Color.WHITE);
}
if(button==exit)System.exit(0);
}
}
Klasse paint:
Java:
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
class Zeichenoberflaeche extends JPanel implements MouseListener, MouseMotionListener
{
private static final long serialVersionUID = 1L;
private int startX,startY,tempX,tempY;
private Graphics2D g2;
public Zeichenoberflaeche()
{
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
private Container getContentPane()
{
return null;
}
public void paintComponent(Graphics g)
{
g2=(Graphics2D) g;
g2.setPaintMode();
g2.drawLine(startX, startY, tempX, tempY);
startX=tempX;
startY=tempY;
//tempX wird hier der variablen startX zugewiesen, da der endpunkt der einen linie ja wieder als anfangspunkt fuer die neue Linie gilt
//ebenso wie tempY startY zugewiesen wird, denn die Endposition der einen Linie ist wieder der anfangspunkt der neuen linie
//man uebergibt der drawLine methode die vier geforderten werte
//zum einen den anfangsstart und endpunkt der x achse und zum anderen den anfangsstart und endpunkt der y achse
}
@Override
public void mouseDragged(MouseEvent me)
{
tempX=me.getX();
tempY=me.getY();
repaint();
//die variablen temp gelten hierbei nur als Platzhalter fuer den end und anfangspunkt
//denn wenn die Maus bewegt wird, bekommt die variable tempX den endwert der Mausbewegung in X richtung zugewiesen
// und die tempY variable bekommt den endwert der Mausbewegung in Y Richtung zugewiesen.
//Diese Werte gelten aber auch wieder als Anfangspunkt, nachdem die repaint Methode ausgefuehrt wurde
}
@Override
public void mouseMoved(MouseEvent arg0)
{
}
@Override
public void mouseClicked(MouseEvent arg0)
{
}
@Override
public void mouseEntered(MouseEvent arg0)
{
}
@Override
public void mouseExited(MouseEvent arg0)
{
}
@Override
public void mousePressed(MouseEvent me)
{
startX=me.getX();
startY=me.getY();
//Hier wird als erstes der gedrueckten Maustaste die x und die y position zugewiesen
//und diese in der jeweiligen Variable gespeichert startX und startY
//die variable startX bekommt die Startposition X der gedrueckten Maustaste zugewiesen
//die variable startY bekommt die Startposition Y der gedrueckten Maustaste zugewiesen
}
@Override
public void mouseReleased(MouseEvent arg0)
{
}
}
Falls hier jemand Bescheid weiß, wäre eine Antwort super