Java 为什么没有';画一条动画曲线?
这是我在网上找到的班级。它最初是一个小程序,但我不想将其用作小程序,因此我更改了一些方法(例如Java 为什么没有';画一条动画曲线?,java,user-interface,Java,User Interface,这是我在网上找到的班级。它最初是一个小程序,但我不想将其用作小程序,因此我更改了一些方法(例如init()为构造函数) 但是,它不起作用。你能帮帮我吗 符号帧帧: public class SignInFrame extends javax.swing.JFrame { Panel panel; /** Creates new form SignInFrame */ public SignInFrame() { initComponents(); } public void in
init()
为构造函数)
但是,它不起作用。你能帮帮我吗
符号帧帧:
public class SignInFrame extends javax.swing.JFrame {
Panel panel;
/** Creates new form SignInFrame */
public SignInFrame() {
initComponents();
}
public void init() {
getContentPane().add(panel = new Panel());
}
public void start() {
panel.start();
}
public void stop() {
panel.stop();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new SignInFrame().setVisible(true);
}
});
}}
面板对话框:
package ClientGUI;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.RenderingHints;
import java.awt.geom.GeneralPath;
import java.awt.image.BufferedImage;
/**
*
* @author ICC
*/
public class Panel extends javax.swing.JPanel implements Runnable{
private Thread thread;
private BufferedImage bimg;
private static final int NUMPTS = 6;
// solid line stoke
protected BasicStroke solid = new BasicStroke(10.0f,
BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND);
// dashed line stroke
protected BasicStroke dashed = new BasicStroke(10.0f,
BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 10, new float[] {5}, 0);
private float animpts[] = new float[NUMPTS * 2];
private float deltas[] = new float[NUMPTS * 2];
protected Paint fillPaint, drawPaint;
// indicates whether or not to fill shape
protected boolean doFill = true;
// indicates whether or not to draw shape
protected boolean doDraw = true;
protected GradientPaint gradient;
protected BasicStroke stroke;
public Panel() {
setBackground(Color.white);
gradient = new GradientPaint(0,0,Color.red,200,200,Color.yellow);
fillPaint = gradient;
drawPaint = Color.blue;
stroke = solid;
}
// generates new points for the path
public void animate(float[] pts, float[] deltas, int i, int limit) {
float newpt = pts[i] + deltas[i];
if (newpt <= 0) {
newpt = -newpt;
deltas[i] = (float) (Math.random() * 4.0 + 2.0);
} else if (newpt >= (float) limit) {
newpt = 2.0f * limit - newpt;
deltas[i] = - (float) (Math.random() * 4.0 + 2.0);
}
pts[i] = newpt;
}
/*
* generates random points with the specified surface width
* and height for the path
*/
public void reset(int w, int h) {
for (int i = 0; i < animpts.length; i += 2) {
animpts[i + 0] = (float) (Math.random() * w);
animpts[i + 1] = (float) (Math.random() * h);
deltas[i + 0] = (float) (Math.random() * 6.0 + 4.0);
deltas[i + 1] = (float) (Math.random() * 6.0 + 4.0);
if (animpts[i + 0] > w / 2.0f) {
deltas[i + 0] = -deltas[i + 0];
}
if (animpts[i + 1] > h / 2.0f) {
deltas[i + 1] = -deltas[i + 1];
}
}
gradient = new GradientPaint(0,0,Color.red,w*.7f,h*.7f,Color.yellow);
}
// calls animate for every point in animpts
public void step(int w, int h) {
for (int i = 0; i < animpts.length; i += 2) {
animate(animpts, deltas, i + 0, w);
animate(animpts, deltas, i + 1, h);
}
}
// sets the points of the path and draws and fills the path
public void drawDemo(int w, int h, Graphics2D g2) {
float[] ctrlpts = animpts;
int len = ctrlpts.length;
float prevx = ctrlpts[len - 2];
float prevy = ctrlpts[len - 1];
float curx = ctrlpts[0];
float cury = ctrlpts[1];
float midx = (curx + prevx) / 2.0f;
float midy = (cury + prevy) / 2.0f;
GeneralPath gp = new GeneralPath(GeneralPath.WIND_NON_ZERO);
gp.moveTo(midx, midy);
for (int i = 2; i <= ctrlpts.length; i += 2) {
float x1 = (midx + curx) / 2.0f;
float y1 = (midy + cury) / 2.0f;
prevx = curx;
prevy = cury;
if (i < ctrlpts.length) {
curx = ctrlpts[i + 0];
cury = ctrlpts[i + 1];
} else {
curx = ctrlpts[0];
cury = ctrlpts[1];
}
midx = (curx + prevx) / 2.0f;
midy = (cury + prevy) / 2.0f;
float x2 = (prevx + midx) / 2.0f;
float y2 = (prevy + midy) / 2.0f;
gp.curveTo(x1, y1, x2, y2, midx, midy);
}
gp.closePath();
if (doDraw) {
g2.setPaint(drawPaint);
g2.setStroke(stroke);
g2.draw(gp);
}
if (doFill) {
if (fillPaint instanceof GradientPaint) {
fillPaint = gradient;
}
g2.setPaint(fillPaint);
g2.fill(gp);
}
}
public Graphics2D createGraphics2D(int w, int h) {
Graphics2D g2 = null;
if (bimg == null || bimg.getWidth() != w || bimg.getHeight() != h) {
bimg = (BufferedImage) createImage(w, h);
reset(w, h);
}
g2 = bimg.createGraphics();
g2.setBackground(getBackground());
g2.clearRect(0, 0, w, h);
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
return g2;
}
public void paint(Graphics g) {
Dimension d = getSize();
step(d.width, d.height);
Graphics2D g2 = createGraphics2D(d.width, d.height);
drawDemo(d.width, d.height, g2);
g2.dispose();
if (bimg != null) {
g.drawImage(bimg, 0, 0, this);
}
}
public void start() {
thread = new Thread(this);
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
}
public synchronized void stop() {
thread = null;
}
public void run() {
Thread me = Thread.currentThread();
while (thread == me) {
repaint();
try {
Thread.sleep(10);
} catch (Exception e) { break; }
}
thread = null;
}
public static void main(String argv[]) {
SignInFrame n = new SignInFrame();
n.start();
}}
packageclientgui;
导入java.awt.BasicStroke;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.GradientPaint;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.Paint;
导入java.awt.RenderingHints;
导入java.awt.geom.GeneralPath;
导入java.awt.image.buffereImage;
/**
*
*@作者国际商会
*/
公共类面板扩展javax.swing.JPanel实现可运行{
私有线程;
专用缓冲图像bimg;
专用静态最终整数NUMPTS=6;
//实线斯托克
受保护的基本行程固体=新的基本行程(10.0f,
基本行程。CAP_对接,基本行程。连接_轮);
//虚线笔划
受保护的基本行程虚线=新的基本行程(10.0f,
BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND,10,新浮点[]{5},0);
私有浮动animpts[]=新浮动[NUMPTS*2];
私有浮动增量[]=新浮动[NUMPTS*2];
保护漆、填充漆、拉丝漆;
//指示是否填充形状
受保护布尔值doFill=true;
//指示是否绘制形状
受保护布尔值doDraw=true;
保护梯度涂料梯度;
保护性基本行程;
公共事务委员会(){
挫折地面(颜色:白色);
梯度=新的梯度油漆(0,0,颜色.红色,200200,颜色.黄色);
fillPaint=渐变;
drawPaint=Color.blue;
笔划=实心;
}
//为路径生成新点
public void动画(float[]pts,float[]delta,int i,int limit){
float newpt=pts[i]+增量[i];
if(newpt=(浮动)限制){
newpt=2.0f*极限-newpt;
delta[i]=-(浮点)(Math.random()*4.0+2.0);
}
pts[i]=newpt;
}
/*
*生成具有指定曲面宽度的随机点
*道路的高度
*/
公共无效重置(整数w,整数h){
对于(int i=0;iw/2.0f){
三角洲[i+0]=-三角洲[i+0];
}
如果(animpts[i+1]>h/2.0f){
三角洲[i+1]=-三角洲[i+1];
}
}
梯度=新的梯度涂料(0,0,颜色。红色,w*.7f,h*.7f,颜色。黄色);
}
//调用animpts中每个点的动画
公共无效步骤(int w,int h){
对于(int i=0;i 对于(int i=2;i,在SignInFrame构造函数中,您调用了initComponents(),但这并不存在。我想您的意思是调用init()。而且您的JFrame没有大小集,当我在linux(Java 1.6)下运行时,它工作了,但很小,您应该添加一个setSize调用
尝试以下编辑:
public class SignInFrame extends javax.swing.JFrame {
Panel panel;
/** Creates new form SignInFrame */
public SignInFrame() {
setSize (600,600);
init();
}
public void init() {
getContentPane().add(panel = new Panel());
start();
}
public void start() {
panel.start();
}
public void stop() {
panel.stop();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new SignInFrame().setVisible(true);
}
});
}
}
具体来说,什么不起作用?它不在我的框架上显示曲线。它起什么作用?框架正在打开吗?框架中是否显示任何内容?是否要在构造函数中调用init()
,而不是initComponents
。您在哪里调用start()
?