java-swing编程(一个简单的图片查看器)

  • 格式:doc
  • 大小:365.50 KB
  • 文档页数:14

下载文档原格式

  / 31
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图1

图2

图3

图4

图5

图6

怎么样,java swing可视化编程。适合对java swing有所了解的java爱好者。如果有兴趣

就继续往下看,别见笑!

包含的内容:

1. 整个窗口为一个JFrame。

2. 最上方的JMenuBar。

3. 中间最大的那块区域——mainPanel。

4. 右侧边栏——rightPanel。

5. 底部的一栏——basePanel。

主要功能:

JMenuBar里设置了两个菜单项——File和Help。File里有打开文件、关闭文件和退出菜单项。单击Open...或者按快捷键alt+O,弹出JFileChooser文件选择对话框,选择图片文件(这里支持jpg、jpeg、gif、tif、tiff和png五种格式)后,图片将在mainPanel里显示。同一文件夹下的其他图片文件显示在rightPanel,如果图片很多可以出现滑动条。basePanel 里有两个按钮和一个显示当前图片序号和图片总数的标签;按钮可以往上往下翻图片,主面板、右侧边栏和标签都会动态更新。如果到了最后一张,“下一个”按钮被禁用;第一张时,“上一个”被禁用。同理在右侧边栏里选图片其它地方也都可以动态更新。

点File里的Close时,会清空mainPanel,rightPanel和标签中显示的内容,禁用两个按钮,效果(如图1)就像是还没有打开文件一样。

点退出时关闭Frame,结束程序。

下面正式开始介绍程序。

注:这里所讲的和提供的源码稍有差异,有兴趣的可以结合文中给出的代码去编写自己的类。

程序分为四部分,分别为三个面板的建立。最后组合在一起,放在一个JFrame里,加入菜单栏,各种监听器。

Part I 写主面板类——MainPanel

可以从JPanel继承。MainPanel相对与JPanel,多了一个图像显示的功能,所以里面一定要有获取图片的方法,还必须重载paintComponent方法。

关于paintComponent这我想多说一点。可视化组件要完成显示的工作一般都要调用paint 方法,而paint方法又把绘图任务交给了三个方法:paintComponent,paintBorder,和paintChildren。我们只需把需要个性定制的实现代码放在paintComponent方法里,在添加你的代码之前记得一定要调用super.paintComponent。在写自己的实现方法前一定要记住给自己留一条退路。什么退路?比如说我们前面提到的关闭文件方法,要实现一定的清理工作,等价于不在原组件里画图。这里我们可以这样实现:

@override

public void paintComponent(Graphics g)

{

super.paintComponent(g);

/*Customize your paint plans here.*/

if(image!=null){ /*假设image就是需要显示的图片*/

/*your code to paint the image*/

}

}

一般情况下,我们不能直接调用paint方法,当需要更新显示内容时直接调用repaint。repaint 先完成一定的清理工作然后会调用paint,paint又调用paintComponent,就可以显示出你画的东西了。

要让MainPanel类获取图片,可以给它传一个ImageIcon,或图片文件或其它任何可以得到图片的东西。我们从JFileChooser中得到的是图片文件,直接把图片文件或者经转化为ImageIcon后作为参数传递给MainPanel。具体如下:

/*MainPanel.java*/

/*import every class needed here*/

public class MainPanel extends JPanel

{

protected File imgFile;

protected ImageIcon img;

public PaintImage()

{

/*add your code here*/

}

public void setImageFile(File newImgFile)

{

imgFile = newImgFile;

ImageIcon newImg = new ImageIcon(imgFile.getPath());

setImage(newImg);

}

public void setImage(ImageIcon newImg)

{

img = newImg;

repaint();

}

public void paintComponent(Graphics g)

{

super.paintComponent(g);

if(img!=null){

Util.paintImg(this, g, img); /*paintImg 是类Util里的一个方法,用来画img*/ }

}

}

上述我们已经完成了MainPanel类的创建。下面写一个测试类,看看效果:

/*MainPanelTest.java*/

/*import needed classes here*/

public class MainPanelTest

{

private static final ImageIcon pigImg = new ImageIcon(“imgs/Pig.gif”);

public MainPanelTest(MainPanel mp)

{

JPanel panel = new JPanel();

JButton btn = new JButton(“Load image”);

panel.setLayout(new BorderLayout());

mp.setPreferredSize(new Dimension(350,350));

panel.add(mp);

btn.addActionListener(new ActionListener(){

public void actionPerformed(ActioneEvent e){

mp.setImage(pigImg);

}

});

panel.add(btn);

Util.run(this, null);

}

public static void main(String[] args)

{

new MainPanelTest(new MainPanel());

}

}

运行时点击按钮即可载入图片。这里再一次地用到了Util类,有关Util请参考Util.java。Part II 创建右侧面板类——SlidePane

SlidePane的显示内容是一个列表,我们可以从JList继承。JList通过ListSelectionModel

相关主题