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 extends E> 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 extends E> 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)在线全文阅读。
相关推荐: