77范文网 - 专业文章范例文档资料分享平台

javaswing编程(一个简单图片查看器)(2)

来源:网络收集 时间:2018-12-22 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

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

可以设置三种选择模式:MULTIPLE_INTERVAL_SELECTION,

SINGLE_INTERVAL_SELECTION,SINGLE_SELECTION。由于每次mainPanel里只能显示一张图片,故我们把它设置成单选模式(SINGLE_SELECTION)。

getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

JList中每个元素的显示方式通过ListCellRenderer来管理。我们想要改变它的显示方式,变成显示图标,我们就必须通过设置ListCellRenderer来实现。 ListCellRenderer是一个接口,里面只有一个方法:

Component getListCellRendererComponent(JList list,

E value, int index,

boolean isSelected, boolean cellHasFocus)

list是JList中所要显示的元素,value是当前选择的元素,index是当前选择元素的序号。 我们可以选择JLabel来实现这个方法,让list里放ImageIcon,然后把label的图标设置成value就可以了。 如:

public class ImageRenderer extends JLabel implements ListCellRenderer { public ImageRenderer() { setOpaque(true);

setHorizontalAlignment(SwingConstants.CENTER); setVerticalAlignment(SwingConstants.CENTER); } public Component getListCellRendererComponent(JList list, E value, int index, boolean isSelected, boolean cellHasFocus) { if(isSelected){ setBackground(list.getSelectionBackground()); setForeground(list.getSelectionForeground()); } else{ setBackground(list.getBackground()); setForeground(list.getForeground()); } setIcon(value);

return this; } }

最后要出现滑动条的效果还需要把SlidePane加到JSlidePane里,不需要设置SlidePane的大小,否则SlidePane的可视区域就局限于设置的大小里,超出部分不能通过滚动滑动条看到。

Part III 创建BasePanel类

这里我们稍稍做一点改动,让按钮和面板标签中的显示内容想关联,让按钮来实现数组index的移动。下面给出代码:

/*BasePanel.java*/

/*import needed classes here*/

public class BasePanel extends JPanel {

JButton last; JButton next;

private JLabel progress; private int index; private int length; public BasePanel() { setLayout(new FlowLayout()); setBorder(new MatteBorder(1, 0, 0, 0, Color.black)); last = new JButton(“上一个”); last.setActionCommand(ActionCommand.LAST_IMG); next = new JButton(“下一个”); next.setActionCommand(ActionCommand.NEXT_IMG);

progress = new JLabel(“/”);

setPreferredSize(new Dimension(600, 50)); add(last); add(progress); add(next);

}

public void setParam(int length, int index) throws IllegalParameterException { if(index<0||length<0||length

throw new IllegalParameterException(); }

this.length = length; setIndex(index);

}

public void next() { setIndex(index+1); }

public void last() { setIndex(index-1); }

public int getIndex() { return index; }

public void setIndex(int index) {

this.index = index; if(index<=0){ last.setEnabled(false);

} else{

last.setEnabled(true); }

if(index>=length-1){ next.setEnabled(false);

} else{

next.setEnabled(true); }

if(index==0&&length==0){ progress.setText(“/”);

} else{

progress.setText((index+1)+” / ”+length); } }

}

两个button的监听器在这里暂时不加,因为BasePanel、SlidePane和MainPanel三者之间要互相通信,在这里增加监听器只能实现对其自身的控制,不能改变别的面板的状态。故监听器的功能等到了写主程序的时候再一并实现。

Part IV 创建主程序

将前面几个容器都组合进来,实现一个menuBar,再写各类监听器,最后显示出来。

第一步:添加组件到面板

首先定义前面三个类的组件。

MainPanel mainPanel = new MainPanel(); SlidePane rightPanel = new SlidePane(); BasePanel basePanel = new BasePanel();

然后把rightPanel加到JScrollPane 里,

JScrollPane scrolledRightPanel = new JScrollPane(rightPanel);

再把mainPanel和scrolledRightPanel放到一个JSplitPane里,

JSplitPane splitPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, mainPanel, scrolledRightPanel);

最后把splitPanel和basePanel装到一个容器中,容器使用BorderLayout排布。即: 这里主程序类继承自JPanel,其本身就是一个容器。 setLayout(new BorderLayout());

add(splitPanel, BorderLayout.CENTER); add(basePanel, BorderLayout.SOUTH);

第二步:创建menuBar

仅以一个为例:

JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu(“File”); menuBar.add(fileMenu);

JMenuItem fileOpenItem = new JMenuItem(“Open File”); fileMenu.add(fileOpenItem);

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库javaswing编程(一个简单图片查看器)(2)在线全文阅读。

javaswing编程(一个简单图片查看器)(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/384168.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: