import javax.swing.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;public class my extends JLabel
{
private int tracking;
public my (String text,int tracking){
super(text);
this.tracking=tracking;
}
private int left_x,left_y,right_x,right_y;
private Color left_color,right_color; public void setLeftShadow(int x, int y, Color color)
{
left_x = x;
left_y = y;
left_color = color;
}
public void setRightShadow(int x, int y, Color color)
{
right_x = x;
right_y = y;
right_color = color;
}
public Dimension getPreferredSize()
{
String text = getText();
FontMetrics fm = this.getFontMetrics(getFont());
int w = fm.stringWidth(text);
w += (text.length() - 1) * tracking;
w += left_x + right_x;
int h = fm.getHeight();
h += left_y + right_y;
return new Dimension(w, h);
}
public void paintComponent(Graphics g)
{
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
char[] chars = getText().toCharArray();
FontMetrics fm = this.getFontMetrics(getFont());
int h = fm.getAscent();
g.setFont(getFont());
int x = 0;
for (int i = 0; i < chars.length; i++)
{
char ch = chars[i];
int w = fm.charWidth(ch) + tracking;
g.setColor(left_color);
g.drawString("" + chars[i], x - left_x, h - left_y);
g.setColor(right_color);
g.drawString("" + chars[i], x + right_x, h + right_y);
g.setColor(getForeground());
g.drawString("" + chars[i], x, h);
x += w;
((Graphics2D) g).setRenderingHint(
RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
p(Character.toString(ch) + ":" + x);
}
}
public static void main(String[] args)
{
my label = new my("Magic", 0);
label.setLeftShadow(1, 1, Color.white);
label.setRightShadow(2, 3, Color.black);
label.setForeground(Color.gray);
label.setFont(label.getFont().deriveFont(140f));
JFrame frame = new JFrame("JFC/Swing:JLabel魔法");
frame.getContentPane().add(label);
frame.pack();
frame.setVisible(true);
}
}
出错是在p(Character.toString(ch) + ":" + x);这里,提示是cannot resolve symbol method p (java.lang.String)
先谢谢了
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;public class my extends JLabel
{
private int tracking;
public my (String text,int tracking){
super(text);
this.tracking=tracking;
}
private int left_x,left_y,right_x,right_y;
private Color left_color,right_color; public void setLeftShadow(int x, int y, Color color)
{
left_x = x;
left_y = y;
left_color = color;
}
public void setRightShadow(int x, int y, Color color)
{
right_x = x;
right_y = y;
right_color = color;
}
public Dimension getPreferredSize()
{
String text = getText();
FontMetrics fm = this.getFontMetrics(getFont());
int w = fm.stringWidth(text);
w += (text.length() - 1) * tracking;
w += left_x + right_x;
int h = fm.getHeight();
h += left_y + right_y;
return new Dimension(w, h);
}
public void paintComponent(Graphics g)
{
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
char[] chars = getText().toCharArray();
FontMetrics fm = this.getFontMetrics(getFont());
int h = fm.getAscent();
g.setFont(getFont());
int x = 0;
for (int i = 0; i < chars.length; i++)
{
char ch = chars[i];
int w = fm.charWidth(ch) + tracking;
g.setColor(left_color);
g.drawString("" + chars[i], x - left_x, h - left_y);
g.setColor(right_color);
g.drawString("" + chars[i], x + right_x, h + right_y);
g.setColor(getForeground());
g.drawString("" + chars[i], x, h);
x += w;
((Graphics2D) g).setRenderingHint(
RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
p(Character.toString(ch) + ":" + x);
}
}
public static void main(String[] args)
{
my label = new my("Magic", 0);
label.setLeftShadow(1, 1, Color.white);
label.setRightShadow(2, 3, Color.black);
label.setForeground(Color.gray);
label.setFont(label.getFont().deriveFont(140f));
JFrame frame = new JFrame("JFC/Swing:JLabel魔法");
frame.getContentPane().add(label);
frame.pack();
frame.setVisible(true);
}
}
出错是在p(Character.toString(ch) + ":" + x);这里,提示是cannot resolve symbol method p (java.lang.String)
先谢谢了
这里应该是自己定义的方法吧,你都没有给出定义。
比如
public void p(String a){
System.out.println(a);
}