为什么无法变化panel图片???

caicaixuehua 2009-12-15 10:13:34
//JavaTest.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
public class JavaTest extends JFrame implements ActionListener{
JSlider slider;
JButton jb1,jb2;
WPanel sPanel;
double time=2;
Timer timer;
public JavaTest(String s){
super(s);
Container contentPane=getContentPane();
//north
JPanel panel=new JPanel(new GridLayout(1,2));
slider=new JSlider(JSlider.HORIZONTAL,0,5000,2000);
slider.setBorder(BorderFactory.createTitledBorder("滑动最大时间为5秒"));
slider.addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e){
time=slider.getValue();
slider.setBorder(BorderFactory.createTitledBorder("间隔时间为"+time/1000+"秒"));
}
});
panel.add(slider);

JPanel panel1=new JPanel(new GridLayout(1,2));
jb1=new JButton("连续播放");
panel1.add(jb1);
jb1.addActionListener(this);
jb2=new JButton("停止播放");
panel1.add(jb2);
jb2.addActionListener(this);

panel.add(panel1);
contentPane.add(panel,BorderLayout.NORTH);
//center
sPanel=new WPanel("图片\\2.jpg");//“图片\\”中有很多图片
contentPane.add(sPanel,BorderLayout.CENTER);
setSize(300,400);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==jb1){
time=slider.getValue();
timer=new Timer((int)time,this);
timer.start();
}
if(e.getSource()==jb2){
timer.stop();
}
//每隔时间time重绘一图片,但为什么无法重绘
if(e.getSource()==timer){
sPanel.i++;
sPanel.repaint();
}
}
public static void main(String[]args){
JavaTest javatest=new JavaTest("我喜欢你。。。");
javatest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
javatest.setVisible(true);
javatest.pack();
}
}
//WPanel.java
import java.awt.*;
import javax.swing.*;
public class WPanel extends JPanel{
int i=1;
String path="图片\\"+i+".jpg" ;
public WPanel( String path ){
this.path=path;
}
public void paint(Graphics g ){
super.paint(g);
Toolkit tk=getToolkit();
Image image=tk.getImage(path);
g.drawImage(image, 0,0,this);
}
}
为什么无法自动重绘图片?
...全文
112 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
huntor 2009-12-15
  • 打赏
  • 举报
回复

import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.TexturePaint;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;

import java.io.IOException;

import javax.imageio.ImageIO;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class BackgroundExample {

public static void main(final String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
final JFrame frame = new JFrame("Rich");
final String[] images = {"background/01.jpg",
"background/02.jpg",
"background/03.jpg",
"background/04.jpg"};
final JComboBox backgrounds;
final BackgroundPanel backgroundPanel = new BackgroundPanel();
backgrounds = new JComboBox(images);
//backgrounds.setSelectedIndex(1);
backgrounds.addActionListener(new ActionListener() {

@Override
public void actionPerformed(final ActionEvent e) {
JComboBox box = (JComboBox)e.getSource();
String background = (String)box.getSelectedItem();
try {
backgroundPanel.changeBackground(background);
backgroundPanel.repaint();
} catch (IOException e1) {
e1.printStackTrace();
}
}

});

frame.setUndecorated(false);
backgroundPanel.setOpaque(false);
frame.getContentPane().add(backgroundPanel,BorderLayout.CENTER);
frame.getContentPane().add(backgrounds,BorderLayout.NORTH);
frame.setBounds(100, 100, 750, 560);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class BackgroundPanel extends JPanel{

/**
*
*/
private static final long serialVersionUID = 11111111111111L;
private BufferedImage background;
private TexturePaint texture;

public void changeBackground(final String image) throws IOException {
this.background = ImageIO.read(this.getClass().getClassLoader().getResource(image));
Rectangle rect = new Rectangle(0,0,this.background.getWidth(),this.background.getHeight());
this.texture = new TexturePaint(this.background,rect);
}

@Override
public void paintComponent(final Graphics g) {

if(this.texture!= null) {
Graphics2D g2d = (Graphics2D)g;
g2d.setPaint(this.texture);
g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
}

super.paintComponent(g);
}
}



classes\BackgroundExample$1$1.class
classes\BackgroundExample$1.class
classes\BackgroundExample.class
classes\BackgroundPanel.class
resources\background\01.jpg
resources\background\02.jpg
resources\background\03.jpg
resources\background\04.jpg
sources\BackgroundExample.java

javac sources\BackgroundExample.java -d classes
javaw -cp classes;resources BackgroundExample

jdk6u17
caicaixuehua 2009-12-15
  • 打赏
  • 举报
回复
不是啦。。。
你的思想也太。。。
一头头 2009-12-15
  • 打赏
  • 举报
回复
不巧了 还真没有。。。。

找个地方upload又不难 快点想办法哇 追到了就有咪咪摸了 哈哈哈哈
caicaixuehua 2009-12-15
  • 打赏
  • 举报
回复
你有QQ吗。。。
我加你一下呀。。。
一头头 2009-12-15
  • 打赏
  • 举报
回复
我建议你搞一个PanelManager 去管理你的Panel

load的时候 一起加载进来 当然还是用你的WPanel去加载

然后显示的时候 用PanelManager去调配 需要显示的就panel.setVisible(true);
不需要显示就 panel.setVisible(false);

不过额 想出这种办法骗女孩子

想当年 我也为一个MM做了一个游戏送给她 当生日礼物了



如果你需要我帮你完成的话 把你的图片upload到一个地方 然后我去download
写好代码再贴给你
caicaixuehua 2009-12-15
  • 打赏
  • 举报
回复
就是的。。。。
一头头 2009-12-15
  • 打赏
  • 举报
回复
程序我没怎么看明白啊 需求也不明白

sPanel=new WPanel("图片\\2.jpg");//“图片\\”中有很多图片
这个算是背景?

然后String path = "图片\\" + i + ".jpg"; 要怎么搞?

先1 然后2 然后3 然后4 然后5 后面一个替代前面一个显示出来吗?
一头头 2009-12-15
  • 打赏
  • 举报
回复
我喜欢你。。。哎哟 啊哈哈哈哈 不是情人节的礼物吧?或者是生日礼物?
caicaixuehua 2009-12-15
  • 打赏
  • 举报
回复
谢谢呀。 不过好像和我问的无关。。。
一头头 2009-12-15
  • 打赏
  • 举报
回复
try my stuff

import javax.swing.*;
import java.awt.*;
@SuppressWarnings("serial")
class PicPanel extends JPanel {
int p_width = 0;
int p_height = 0;
Image im = null;

public PicPanel(String picName) {
ImageIcon imageIcon = new ImageIcon(picName);
im = imageIcon.getImage();

p_width = imageIcon.getIconWidth();
p_height = imageIcon.getIconHeight();
setBounds(0, 0, p_width, p_height);
}

public void paint(Graphics g) {
g.drawImage(im, 0, 0, p_width, p_height, null);
}
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧