Hi Leutz.
Da ich leider noch nicht das nötige Know How habe um mir meine eigenen JButtons zu erzeugen habe ich mich im Netz umgeschaut und ne Super Klasse gefunden..
Jetzt kann man hier aber die Methode setHorizontalAlignment() nicht verwenden und die bräuchte ich unbedingt.
Ich weiss Ehrlich gesagt nicht wie man das anstellt..
Kann ich sie in dieser Klasse irgendwie einfügen.. leider ist mir diese art von Programmierung(noch) viel zu hoch.
Kann mir wer helfen
Ausserdem wird hier awt verwendet.. kann das Probleme geben
denn überall schreibt man das swing und awt nicht gemischt werden soll!!
hier mal der aufruf
und jetzt die Klasse VectorButton
Da ich leider noch nicht das nötige Know How habe um mir meine eigenen JButtons zu erzeugen habe ich mich im Netz umgeschaut und ne Super Klasse gefunden..
Jetzt kann man hier aber die Methode setHorizontalAlignment() nicht verwenden und die bräuchte ich unbedingt.
Ich weiss Ehrlich gesagt nicht wie man das anstellt..
Kann ich sie in dieser Klasse irgendwie einfügen.. leider ist mir diese art von Programmierung(noch) viel zu hoch.
Kann mir wer helfen
Ausserdem wird hier awt verwendet.. kann das Probleme geben
denn überall schreibt man das swing und awt nicht gemischt werden soll!!
hier mal der aufruf
Code:
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class VectorButtonTest {
public static void main(String[] args) {
JFrame frame = new JFrame();
JButton vb = new VectorButton();
vb.setFont(new Font("Dialog",Font.PLAIN,22));
vb.setForeground(new Color(50,50,255));
vb.setBackground(Color.white);
vb.setForeground(new Color(50,255,0));
vb.setText("OK");
// vb.setMargin(new Insets(0,30,0,30));
vb.setBorderPainted(false);
frame.getContentPane().add(vb);
frame.pack();
frame.show();
}
}
und jetzt die Klasse VectorButton
Code:
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
public class VectorButton extends JButton implements MouseListener {
public VectorButton() {
this.addMouseListener(this);
}
public Dimension getPreferredSize() {
String text = getText();
FontMetrics fm = this.getFontMetrics(getFont());
float scale = (50f/30f)*this.getFont().getSize2D();
int w = fm.stringWidth(text);
w += (int)(scale*1.4f);
int h = fm.getHeight();
h += (int)(scale*.3f);
return new Dimension(w,h);
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(this.getBackground());
g2.fillRect(0,0,this.getWidth(),this.getHeight());
float scale = (50f/30f)*this.getFont().getSize2D();
drawLiquidButton(this.getForeground(),
this.getWidth(), this.getHeight(),
getText(), scale,
g2);
}
protected void drawLiquidButton(Color base,
int width, int height,
String text, float scale,
Graphics2D g2) {
// calculate inset
int inset = (int)(scale*0.04f);
int w = width - inset*2 - 1;
int h = height - (int)(scale*0.1f) - 1;
g2.translate(inset,0);
drawDropShadow(w,h,scale,g2);
if(pressed) {
g2.translate(0, 0.04f*scale);
}
drawButtonBody(w,h,scale,base,g2);
drawText(w,h,scale,text,g2);
drawHighlight(w,h,scale,base,g2);
drawBorder(w,h,scale,g2);
if(pressed) {
g2.translate(0, 0.04f*scale);
}
g2.translate(-inset,0);
}
protected void drawDropShadow(int w, int h, float scale, Graphics2D g2) {
// draw the outer drop shadow
g2.setColor(new Color(0,0,0,50));
this.fillRoundRect(g2,
(-.04f)*scale,
(.02f)*scale,
w+.08f*scale, h+0.08f*scale,
scale*1.04f, scale*1.04f);
g2.setColor(new Color(0,0,0,100));
this.fillRoundRect(g2,0,0.06f*scale,w,h,scale,scale);
}
protected void drawButtonBody(int w, int h, float scale,
Color base, Graphics2D g2) {
// draw the button body
Color grad_top = base.brighter();
Color grad_bot = base.darker();
GradientPaint bg = new GradientPaint(
new Point(0,0), grad_top,
new Point(0,h), grad_bot);
g2.setPaint(bg);
this.fillRoundRect(g2,
(0)*scale,
(0)*scale,
w,h,1*scale,1*scale);
// draw the inner color
Color inner = base.brighter();
inner = alphaColor(inner,75);
g2.setColor(inner);
this.fillRoundRect(g2,
scale*(.4f),
scale*(.4f),
w-scale*.8f, h-scale*.5f,
scale*.6f,scale*.4f);
}
protected void drawText(int w, int h, float scale,
String text, Graphics2D g2) {
// calculate the width and height
int fw = g2.getFontMetrics().stringWidth(text);
int fh = g2.getFontMetrics().getAscent() -
g2.getFontMetrics().getDescent();
int textx = (w-fw)/2;
int texty = h/2 + fh/2;
// draw the text
g2.setColor(new Color(0,0,0,70));
g2.drawString(text,(int)((float)textx+scale*(0.04f)),
(int)((float)texty + scale*(0.04f)));
g2.setColor(Color.black);
g2.drawString(text, textx, texty);
}
protected void drawHighlight(int w, int h, float scale,
Color base, Graphics2D g2) {
// create the highlight
GradientPaint highlight = new GradientPaint(
new Point2D.Float(scale*0.2f,scale*0.2f),
new Color(255,255,255,175),
new Point2D.Float(scale*0.2f,scale*0.55f),
new Color(255,255,255,0)
);
g2.setPaint(highlight);
this.fillRoundRect(g2, scale*0.2f, scale*0.1f,
w-scale*0.4f, scale*0.4f, scale*0.8f, scale*0.4f);
this.drawRoundRect(g2, scale*0.2f, scale*0.1f,
w-scale*0.4f, scale*0.4f, scale*0.8f, scale*0.4f);
}
protected void drawBorder(int w, int h,
float scale, Graphics2D g2) {
// draw the border
g2.setColor(new Color(0,0,0,150));
this.drawRoundRect(g2,
scale*(0f),
scale*(0f),
w,h,scale,scale);
}
// float version of fill round rect
protected static void fillRoundRect(Graphics2D g2,
float x, float y,
float w, float h,
float ax, float ay) {
g2.fillRoundRect(
(int)x, (int)y,
(int)w, (int)h,
(int)ax, (int)ay
);
}
// float version of draw round rect
protected static void drawRoundRect(Graphics2D g2,
float x, float y,
float w, float h,
float ax, float ay) {
g2.drawRoundRect(
(int)x, (int)y,
(int)w, (int)h,
(int)ax, (int)ay
);
}
// generate the alpha version of this color
protected static Color alphaColor(Color color, int alpha) {
return new Color(color.getRed(), color.getGreen(),
color.getBlue(), alpha);
}
/* mouse listener implementation */
protected boolean pressed = false;
public void mouseExited(MouseEvent evt) { }
public void mouseEntered(MouseEvent evt) { }
public void mouseClicked(MouseEvent evt) { }
public void mouseReleased(MouseEvent evt) {
pressed = false;
}
public void mousePressed(MouseEvent evt) {
pressed = true;
}
public static void p(String s) {
System.out.println(s);
}
}