8. Consider the following Java code: public JFrame createFrame() { JPanel panel
ID: 3758408 • Letter: 8
Question
8. Consider the following Java code:
public JFrame createFrame() {
JPanel panel = new JPanel(new GridLayout(2, 2));
for (int i = 0; i < 2; ++i)
for (int j = 0; j < 2; ++j)
panel.add(new JLabel(i + “ “ + j));
JFrame frame = new JFrame(“Hello World 1!”);
frame.setLayout(new BorderLayout());
frame.add(new JButton(“Click me!”), BorderLayout.NORTH);
frame.add(panel, BorderLayout.CENTER);
frame.add(new JLabel(“Some text”), BorderLayout.SOUTH);
return frame;
}
Draw (and explain) the Swing window resulting from showing the returned JFrame:
Explanation / Answer
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.image.*;
import javax.swing.filechooser.*;
import java.util.HashMap;
import java.io.*;
class ImageShow extends Canvas implements ImageObserver{
Image img;
Dimension ds;
HashMap<Integer, String> imgFiles;
String filename;
int curImgIndex;
ImageShow(){
1 ds=getToolkit().getScreenSize();
2 filename=null;
}
3 public void paint(Graphics g){
if(filename!=null){
img=getToolkit().getImage(filename);
drawIt(g,img);
}
}
4 public void drawIt(Graphics g, Image img){
Graphics2D g2d=(Graphics2D)g;
int x=-img.getWidth(this)/2;
int y=-img.getHeight(this)/2;
int w=img.getWidth(this);
int h=img.getHeight(this);
int mX=(int)ds.getWidth()/2;
int mY=(int)ds.getHeight()/2;
g2d.translate(mX,mY);
g2d.drawImage(img,x,y,w,h,this);
}
5 public void storeImages(){
imgFiles=new HashMap<Integer, String>();
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("Image Files", "jpg", "gif","png","gif","bmp");
chooser.setFileFilter(filter);
chooser.setMultiSelectionEnabled(true);
int returnVal = chooser.showOpenDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION) {
File[] Files=chooser.getSelectedFiles();
for( int i=0;i<Files.length;i++){
imgFiles.put(i,Files[i].toString());
}
}
}
6 public void moveFirst(){
if(!imgFiles.isEmpty()){
curImgIndex=0;
filename=imgFiles.get(curImgIndex);
repaint();
}
}
7 public void moveNext(){
if(!imgFiles.isEmpty() && curImgIndex<imgFiles.size()-1){
curImgIndex++;
filename=imgFiles.get(curImgIndex);
repaint();
}
}
8 public HashMap<Integer,String> getImgFiles(){
return imgFiles;
}
}
9 class ShowInterface extends JFrame implements ActionListener{
JButton btSlideShow;
JPanel panel;
ImageShow show;
boolean stop=true;
ImageSlider slider;
ShowInterface(){
setTitle("Image Slide Show");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setExtendedState(this.getExtendedState() | this.MAXIMIZED_BOTH);
JMenuBar mainmenu=new JMenuBar();
JMenu menu=new JMenu("File");
JMenuItem mopen=new JMenuItem("Open...");
mopen.setMnemonic(KeyEvent.VK_O);
mopen.addActionListener(this);
JMenuItem mexit=new JMenuItem("Exit");
mexit.setMnemonic(KeyEvent.VK_X);
mexit.addActionListener(this);
menu.add(mopen);
menu.add(mexit);
mainmenu.add(menu);
setJMenuBar(mainmenu);
btSlideShow=new JButton(new ImageIcon("play.png"));
btSlideShow.setBackground(Color.BLACK);
btSlideShow.addActionListener(this);
btSlideShow.setEnabled(false);
panel=new JPanel();
panel.setLayout(new FlowLayout());
panel.add(btSlideShow);
panel.setBackground(Color.BLACK);
add(panel, BorderLayout.SOUTH);
show=new ImageShow();
add(show,BorderLayout.CENTER );
setVisible(true);
}
10 public void actionPerformed(ActionEvent e){
if(e.getSource()==btSlideShow)
{
if(stop){
startClick();
}
else{
stopClick();
}
}
else {
JMenuItem source = (JMenuItem)(e.getSource());
if(source.getText().compareTo("Open...")==0)
{
show.storeImages();
if(show.getImgFiles().size()>0){
show.moveFirst();
btSlideShow.setEnabled(true);
}
}
else if(source.getText().compareTo("Exit")==0)
System.exit(0);
}
}
11 public void startClick(){
btSlideShow.setIcon(new ImageIcon("pause.png"));
stop=false;
slider=new ImageSlider();
slider.start();
}
12 public void stopClick(){
btSlideShow.setIcon(new ImageIcon("play.png"));
stop=true;
slider.stopShow();
}
13 class ImageSlider extends Thread{
boolean started;
HashMap<Integer,String> map;
ImageSlider(){
started=true;
map=show.getImgFiles();
}
public void run(){
int i;
try{
for(i=0;i<map.size();i++)
{
if(started!=false){
Thread.sleep(2000);
show.moveNext();
}
}
stopClick();
show.moveFirst();
}catch(InterruptedException ie){System.out.println("Interrupted slide show...");}
}
public void stopShow(){
started=false;
}
}
}
15 public class ImageSlideShow{
public static void main(String args[]){
new ShowInterface();
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.