《Java编程语言:原理与范例》课后实验源代码 下载本文

内容发布更新时间 : 2024/5/5 13:23:34星期一 下面是文章的全部内容请认真阅读。

public class Exp7_5 extends JFrame { private JPanel[] thumbPanels; // 缩略图面板数组 private JLabel[] thumbLabels; // 缩略图标签数组 private File[] imageFiles; // 图片文件数组 private JScrollPane bottom; // 下部的可滚动面板 private int currentImageId = -1; // 当前查看的图片id private JLabel fullImageLabel; // 完整图片标签 private JButton next; // 下一张按钮 private JButton pre; // 上一张按钮 // 获得path路径下所有的图片,并生成面板 private JPanel[] getThumbPanels(String path) throws URISyntaxException { URL url = super.getClass().getClassLoader().getResource(path); File dir = new File(url.toURI()); // 图片根目录 imageFiles = dir.listFiles(); // 得到目录下的所有文件 thumbPanels = new JPanel[imageFiles.length]; thumbLabels = new JLabel[imageFiles.length]; // 鼠标点击缩略图标签的事件监听器 MouseListener mouseListener = new MouseAdapter() { public void mouseClicked(MouseEvent e) { JLabel clickedLabel = (JLabel) (e.getSource());// 得到点击的那个标签 for (int i = 0; i < thumbLabels.length; i++) {// 所有标签边框复位 thumbLabels[i].setBorder(BorderFactory.createLineBorder(Color.BLACK)); if (thumbLabels[i] == clickedLabel) { currentImageId = i; // 修改当前查看的图片id } } clickedLabel.setBorder(BorderFactory.createLineBorder(Color.RED, 5));// 点击的标签加框 ImageIcon image = new ImageIcon(imageFiles[currentImageId].getAbsolutePath()); // 伸缩图片到上部完整图片标签大小 image.setImage(image.getImage().getScaledInstance(fullImageLabel.getWidth(), fullImageLabel.getHeight(), Image.SCALE_DEFAULT)); fullImageLabel.setIcon(image); checkButtons();// 更新上一张/下一张按钮的状态 } // 鼠标进入缩略图标签时改变鼠标指针

public void mouseEntered(MouseEvent e) { JLabel imageLabel = (JLabel) (e.getSource()); imageLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } }; for (int i = 0; i < imageFiles.length; i++) { ImageIcon image = new ImageIcon(imageFiles[i].getAbsolutePath()); JPanel p = new JPanel(new BorderLayout()); thumbLabels[i] = new JLabel(); // 缩放图片到缩略图标签大小 thumbLabels[i].setIcon(new ImageIcon(image.getImage().getScaledInstance(100, 80, Image.SCALE_DEFAULT))); thumbLabels[i].setBorder(BorderFactory.createLineBorder(Color.BLACK)); thumbLabels[i].addMouseListener(mouseListener); // 加鼠标事件监听器 JLabel textLabel = new JLabel(imageFiles[i].getName()); // 图片下方文字标签 textLabel.setHorizontalAlignment(JLabel.CENTER); p.add(thumbLabels[i], BorderLayout.CENTER); p.add(textLabel, BorderLayout.SOUTH); thumbPanels[i] = p; } return thumbPanels; } void initUI() throws URISyntaxException { fullImageLabel = new JLabel(); fullImageLabel.setBorder(BorderFactory.createLineBorder(Color.RED)); next = new JButton(new ImageIcon(super.getClass().getClassLoader().getResource(\ pre = new JButton(new ImageIcon(super.getClass().getClassLoader().getResource(\ // 上一张/下一张按钮点击事件的监听器 ActionListener listener = new ActionListener() { public void actionPerformed(ActionEvent e) { if (e.getSource() == next) { currentImageId++; } else { currentImageId--; }

// 复位所有缩略图标签的边框 for (int i = 0; i < thumbLabels.length; i++) { thumbLabels[i].setBorder(BorderFactory.createLineBorder(Color.BLACK)); } // 选中相应的缩略图标签 thumbLabels[currentImageId].setBorder(BorderFactory.createLineBorder(Color.RED, 5)); // 滚到到该缩略图标签 bottom.getHorizontalScrollBar().setValue(thumbPanels[currentImageId].getLocation().x); // 改变上部的完整图片标签 ImageIcon image = new ImageIcon(imageFiles[currentImageId].getAbsolutePath()); image.setImage(image.getImage().getScaledInstance(fullImageLabel.getWidth(), fullImageLabel.getHeight(), Image.SCALE_DEFAULT)); fullImageLabel.setIcon(image); checkButtons(); } }; next.addActionListener(listener); pre.addActionListener(listener); JPanel buttonsPanel = new JPanel(); buttonsPanel.add(pre); buttonsPanel.add(next); // 上部面板(包含完整图片标签和2个按钮) JPanel top = new JPanel(new BorderLayout(0, 10)); top.add(fullImageLabel, BorderLayout.CENTER); top.add(buttonsPanel, BorderLayout.SOUTH); top.setSize(705, 410); top.setLocation(5, 5); add(top); // 下部缩略图面板 JPanel thumbPanel = new JPanel(); bottom = new JScrollPane(thumbPanel); JPanel[] thumbPanels = getThumbPanels(\ for (int i = 0; i < thumbPanels.length; i++) { thumbPanel.add(thumbPanels[i]);

}

}

}

setLayout(null);

bottom.setSize(705, 130); bottom.setLocation(5, 430); add(bottom);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); setSize(720, 600); setVisible(true);

private void checkButtons() { if (currentImageId == 0) { // 第一张 pre.setEnabled(false); } if (currentImageId == imageFiles.length - 1) { // 最后一张 next.setEnabled(false); } if (currentImageId > 0 && currentImageId < imageFiles.length - 1) { pre.setEnabled(true); next.setEnabled(true); } }

public static void main(String[] args) throws URISyntaxException { Exp7_5 t = new Exp7_5(); t.initUI(); }

第八章 实验一

/*********************************

1. 点击窗口的关闭按钮时,弹出包含“是”和“否”选项的模态对话框, 点击“是”则关闭窗口,否则不关闭。 **********************************/ package ch09;

import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

public class Exp8_1 extends JFrame { void initUI() { addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { int b = JOptionPane.showConfirmDialog(Exp8_1.this, \确认要关闭按窗口吗?\提示\ if (b == JOptionPane.YES_OPTION) { System.exit(-1); } } }); setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); setResizable(false); setSize(600, 400); setVisible(true); } public static void main(String[] args) { Exp8_1 t = new Exp8_1(); t.initUI(); } }

实验二

/*********************************

2. 编写GUI程序模拟IE浏览器,具体要求如下。

① 在窗口顶部有一个可编辑的下拉列表,以输入网址。

② 若输入的网址之前未输入过,则添加到下拉列表中(模拟IE的历史记录)。 ③ 输入或选择了一个网址后,在窗口下部的编辑器面板中显示相应网页。 **********************************/