Hallo an die Community
Ich programmiere jetzt seid drei Jahren Java, hab mich jedoch auf funktionale Programmierung beschränkt und bin jetzt mit den Oberflächen etwas überfordert.
Mein Ziel ist es, dass sich eine beliebige Anzahl an Buttons (In meinem Fall Grafiken, hier hab ich schon mal gegooglet und etwas code mit trial und error in meinen einbauen können) an der Mitte des jeweiligen Panels auf dem sie sich befinden einmal rundherum drehen und damit quasi einen Stern bilden.
Vor Nutzung der Klasse muss ein JFrame mit einem JPanel erstellt werden, eine for schleife ermöglicht dann die übergabe der jeweiligen buttonnummer anhand der der winkel berechnet wird.
Nach vielem weiteren Trial und Error (und versuchen die API zu durchschauen) hier also mein Ergebnis:
Ich danke für alle Vorschlage, fragen bitte einfach stellen ^^
Ich programmiere jetzt seid drei Jahren Java, hab mich jedoch auf funktionale Programmierung beschränkt und bin jetzt mit den Oberflächen etwas überfordert.
Mein Ziel ist es, dass sich eine beliebige Anzahl an Buttons (In meinem Fall Grafiken, hier hab ich schon mal gegooglet und etwas code mit trial und error in meinen einbauen können) an der Mitte des jeweiligen Panels auf dem sie sich befinden einmal rundherum drehen und damit quasi einen Stern bilden.
Vor Nutzung der Klasse muss ein JFrame mit einem JPanel erstellt werden, eine for schleife ermöglicht dann die übergabe der jeweiligen buttonnummer anhand der der winkel berechnet wird.
Nach vielem weiteren Trial und Error (und versuchen die API zu durchschauen) hier also mein Ergebnis:
Ich danke für alle Vorschlage, fragen bitte einfach stellen ^^
Java:
package de.jotility.gui;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import javax.swing.JButton;
import javax.swing.border.Border;
import de.jotility.beans.ISettings;
public class Leaf extends JButton
{
int leafNumber;
private int angle;
int length = ISettings.getLeafLength();
int width = ISettings.getLeafWidth();
public Leaf(int leafNr)
{
this.setLocation(ISettings.getFlowerSize()/2, ISettings.getFlowerSize()/2);
this.setLeafNumber(leafNr);
this.setVisible(true);
this.angle = (360 / ISettings.getNumberOfLeaves()) * this.getLeafNumber();
}
public void paint(Graphics g)
{
Point oldCenter = new Point(super.getPreferredSize().width / 2, super.getPreferredSize().height / 2);
Point bigCenter = new Point(getLargest() / 2, getLargest() / 2);
Point newCenter = new Point(bigCenter.x - oldCenter.x, bigCenter.y - oldCenter.y);
Image oldImage = createImage(getLargest(), getLargest());
Graphics oldG = oldImage.getGraphics();
oldG.setClip(newCenter.x, newCenter.y, super.getPreferredSize().width, super.getPreferredSize().height);
Image newImage = createImage(getLargest(), getLargest());
Graphics newG = newImage.getGraphics();
super.paint(oldG);
newG.drawImage(oldImage, 0, 0, this);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(getParent().getBackground());
g2.fillRect(0, 0, getLargest(), getLargest());
g2.rotate(angle, getPreferredSize().width / 2, getPreferredSize().height / 2);
g2.drawImage(newImage, 0, 0, this);
}
protected void paintBorder(Graphics g)
{
if (isBorderPainted())
{
Border border = getBorder();
if (border != null)
{
Point oldCenter = new Point(super.getPreferredSize().width / 2, super.getPreferredSize().height / 2);
Point bigCenter = new Point(getLargest() / 2, getLargest() / 2);
Point newCenter = new Point(bigCenter.x - oldCenter.x, bigCenter.y - oldCenter.y);
border.paintBorder(this, g, newCenter.x, newCenter.y, super.getPreferredSize().width, super.getPreferredSize().height);
}
}
}
public Dimension getPreferredSize()
{
Dimension d = new Dimension(getLargest(), getLargest());
return d;
}
protected int getLargest()
{
int w = super.getPreferredSize().width;
int h = super.getPreferredSize().height;
if (w > h)
{
return w;
}
else
{
return h;
}
}
public int getLeafNumber()
{
return leafNumber;
}
public void setLeafNumber(int leafNumber)
{
this.leafNumber = leafNumber;
}
}