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

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

Object[][] data = { { \4300F, 4 }, { \小米2\ JTable table; MobilePhoneTableRenderer renderer; JTextField tf = new JTextField(30); JButton searchBtn = new JButton(\查找\ JButton deleteBtn = new JButton(\删除\ JButton addBtn = new JButton(\增加\ void initUI() { final MobilePhoneTableModel model = new MobilePhoneTableModel(columnNames, columnTypes, data); renderer = new MobilePhoneTableRenderer(); renderer.setRowSelected(new int[model.getRowCount()]); table = new JTable(model); table.setBorder(BorderFactory.createEtchedBorder()); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);// 只允许单选 // 选中表格行时 table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { if (e.getFirstIndex() >= 0) { deleteBtn.setEnabled(true); // 启用删除按钮 } } }); TableColumnModel colModel = table.getColumnModel(); for (int i = 0; i < colModel.getColumnCount(); i++) { // 为表格设置渲染器 colModel.getColumn(i).setCellRenderer(renderer); } JPanel top = new JPanel(new FlowLayout(FlowLayout.LEADING)); top.add(new JLabel(\名称:\ top.add(tf); top.add(searchBtn); searchBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 根据名称查找所有行 String name = tf.getText(); if (name != null && name.length() > 0) { name = name.trim();

});

}

}

tf.setText(name);

int rows = table.getRowCount(); int[] rowSelected = new int[rows]; for (int i = 0; i < rows; i++) { String _name = (String) table.getValueAt(i, 1); if (_name.toUpperCase().contains(name.toUpperCase())) { rowSelected[i] = 1; } else { rowSelected[i] = 0; } }

renderer.setRowSelected(rowSelected); table.updateUI();// 更新表格

JPanel center = new JPanel(new BorderLayout()); center.add(table, BorderLayout.CENTER);

JPanel bottom = new JPanel(new FlowLayout(FlowLayout.TRAILING)); deleteBtn.setEnabled(false); bottom.add(deleteBtn); bottom.add(addBtn);

deleteBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int i = table.getSelectedRow(); Object[][] old_data = model.getData(); // 新的数据行(除去旧数据的选中行) Object[][] new_data = new Object[old_data.length - 1][]; int k = 0; for (int j = 0; j < old_data.length; j++) { if (j != i) { new_data[k++] = old_data[j]; } } model.setData(new_data); renderer.setRowSelected(new int[new_data.length]); model.fireTableDataChanged(); table.clearSelection(); deleteBtn.setEnabled(false); } });

addBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Object[][] old_data = model.getData(); // 新的数据行(末尾增加一行) Object[][] new_data = new Object[old_data.length + 1][]; int k = 0; for (int j = 0; j < old_data.length; j++) { new_data[k++] = old_data[j]; } new_data[k] = new Object[3]; // 增加的行 new_data[k][0] = \ new_data[k][1] = 0F; new_data[k][2] = 0; model.setData(new_data); renderer.setRowSelected(new int[new_data.length]); model.fireTableDataChanged(); table.clearSelection(); } }); setLayout(new BorderLayout()); add(top, BorderLayout.NORTH); add(center, BorderLayout.CENTER); add(bottom, BorderLayout.SOUTH); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); setSize(600, 400); setTitle(\手机库存\ setVisible(true); } public static void main(String[] args) { Exp8_3 t = new Exp8_3(); t.initUI(); } }

实验四

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

5. 编写GUI程序模拟Photoshop的图片多开功能,具体要求如下。 ① 程序运行时,首先弹出文件打开对话框。

② 对话框指定了文件类型过滤器,只列出扩展名为jpg、bmp、png的图片文件。

③ 在对话框中选择了多个文件并确定后,在窗口中显示相同个数的内部窗口,且每个内部

窗口显示一个图片。

④ 鼠标停留在图片上时,弹出以文件名为内容的工具提示。 **********************************/ package ch09;

import java.awt.Image; import java.io.File;

import java.io.IOException;

import javax.swing.ImageIcon; import javax.swing.JDesktopPane; import javax.swing.JFileChooser; import javax.swing.JFrame;

import javax.swing.JInternalFrame; import javax.swing.JLabel;

import javax.swing.filechooser.FileFilter;

import javax.swing.filechooser.FileNameExtensionFilter;

public class Exp8_5 extends JFrame { void initUI() throws IOException { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(800, 600); setVisible(true); } // 选择图片文件 File[] selectFiles() { JFileChooser fc = new JFileChooser(); FileFilter filter = new FileNameExtensionFilter(\图片文件\\\\\ fc.setFileFilter(filter);// 设置文件过滤器 fc.setFileHidingEnabled(false);// 显示隐藏文件 fc.setMultiSelectionEnabled(true);// 允许多选 fc.setDialogTitle(\请选择图片(可多选)\设置对话框标题栏文字 if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { return fc.getSelectedFiles(); } return null; } // 打开图片文件并显示在内部窗口中 void openFiles(File[] files) { if (files != null && files.length > 0) {

int i = 0; // 内部窗口所在容器 JDesktopPane desktop = new JDesktopPane(); add(desktop);// 加入顶层窗口 for (File file : files) { final JInternalFrame jif = new JInternalFrame(file.getName()); ImageIcon pic = new ImageIcon(file.getAbsolutePath()); // 缩放图片到指定大小 pic.setImage(pic.getImage().getScaledInstance(320, Image.SCALE_DEFAULT)); JLabel label = new JLabel(pic); jif.add(label); jif.setLocation(i * 30, i * 30); jif.setSize(400, 300); jif.setResizable(true); jif.setMaximizable(true); jif.setIconifiable(true); jif.setClosable(true); jif.setToolTipText(file.getName()); desktop.add(jif); // 加入容器 jif.setVisible(true); i++; } } } public static void main(String[] args) throws IOException { Exp8_5 t = new Exp8_5(); t.initUI(); t.openFiles(t.selectFiles()); } }

240,