龙猫12138 2017-06-23 01:01 采纳率: 0%
浏览 1857
已采纳

java 以下代码想要实现点击按钮换图片,为什么不行呢?

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

class PanelTest extends JPanel
{
String path = "" ;
public PanelTest (String path)
{
this.path = path ;
repaint () ;
}
public PanelTest ()
{
path = "image/Background1.jpg" ;
}
public void paintComponent (Graphics g)
{
super.paintComponent(g) ;
g.drawImage(getImage(), 0, 0, this) ;
}
public Image getImage()
{
ImageIcon icon = new ImageIcon (PanelTest.class.getResource(path)) ;
return icon.getImage() ;
}
}

public class FrameTest extends JFrame
{
JMenuBar bar ;
JMenu menu ;
JMenuItem item ;
public FrameTest ()
{
bar = new JMenuBar () ;
menu = new JMenu ("test") ;
item = new JMenuItem ("test") ;

    item.addActionListener(new ActionListener()
    {

        @Override
        public void actionPerformed(ActionEvent e) 
        {
            new PanelTest ("image/Background2.jpg") ;
        }

    });
    menu.add(item) ;
    bar.add(menu) ;
    bar.setBounds(0, 0, 400, 30) ;
    this.add(bar) ;
    this.add(new PanelTest()) ;
    this.setVisible(true) ;
    this.setSize(400,400) ;
}
public static void main (String [] args)
{
    new FrameTest () ;
}

}

1.一个主类jframe里面加一个类jpanel,然后点击frame里面的jmenuitem让jpanel从新的地址得到一张新图片然后重绘,目的是这样,但是为什么不行呢?代码加上包名后直接复制就可以运行,在该包下有一个名为image的文件夹,里面放着图片。
2.这个java文件中有两个类,那么在运行的时候,只生成一个线程就是主线程对吧?

  • 写回答

2条回答 默认 最新

  • 丵鹰 2017-06-23 02:02
    关注
     import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    
    class PanelTest extends JPanel {
        String path = "";
    
        public PanelTest(String path) {
            this.path = path;
        }
    
        public PanelTest() {
            path = "image/Background2.jpg";
        }
    
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(getImage(), 0, 0, this);
        }
    
        public Image getImage() {
            ImageIcon icon = new ImageIcon(PanelTest.class.getResource(path));
            return icon.getImage();
        }
    }
    
    public class FrameTest extends JFrame {
        JMenuBar bar;
        JMenu menu;
        JMenuItem item;
        PanelTest panelTest;
    
        public FrameTest() {
            bar = new JMenuBar();
            menu = new JMenu("test");
            item = new JMenuItem("test");
            item.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    remove(panelTest);
                    add(new PanelTest("image/Background2.jpg"));
                    invalidate();
                    repaint();
                    setVisible(true);
                }
    
            });
            menu.add(item);
            bar.add(menu);
            bar.setBounds(0, 0, 400, 30);
            this.add(bar);
            panelTest=new PanelTest();
            this.add(panelTest);
            this.setVisible(true);
            this.setSize(400, 400);
        }
    
        public static void main(String[] args) {
            new FrameTest();
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形