1、程序启动画面 1.6里面新增了启动画面的功能, 命令行方式:java -splash:图片名 java文件。图片格式为GIF, PNG, or JPEG格式,当第一个窗体启动时,启动画面就会消失。 jar方式:首先创建manifest.mf文件. 内容如下: Manifest-Version: 1.0 Main-Class: HelloSplash SplashScreen-Image: MyImage.png 打包jar文件: jar -mcvf manifest.mf Splash.jar HelloSplash*.class MyImage.png 不用命令行运行启动画面: java -jar Splash.jar 运用java.awt包内的SplashScreen类: getSplashScreen()方法返回生成启动画面,如果没有image被创建,则返回null 其他的方法如: getBounds() 返回启动画面的边界大小 getImageURL() 返回启动画面的图片url getSize() 返回启动画面窗体的大小 isVisible() 启动画面是否显示 在应用程序启动之前,当启动画面加载后,可以改变显示的图片,有2个方法可以实现: setImageURL():设置一个新显示图片的URL; getGraphics():得到窗体的graphic内容(java.awt.Graphics),然后使用任何通常的graphical和Java2D的API去更新图片,因为这是一个Graphics2D的实例, 而不是简单的java.awt.Graphics.在你画上graphic内容后,可以调用SplashScreen的update()方法去画更新后的图片。 例子: import javax.swing.*; import java.awt.*; import java.awt.geom.*; import java.util.*;
public class ExtendedSplash { public static void main(String args[]) { Runnable runner = new Runnable() { public void run() { Random random = new Random(); SplashScreen splash = SplashScreen.getSplashScreen(); Graphics2D g = (Graphics2D)splash.getGraphics(); Dimension dim = splash.getSize(); Color colors[] = {Color.RED, Color.ORANGE, Color.YELLOW, Color.GREEN, Color.BLUE, Color.MAGENTA}; for (int i=0; i<100; i++) { g.setColor(colors[i % colors.length]); g.fillRect(50, 50, dim.width-100, dim.height-100); splash.update(); try { Thread.sleep(250); } catch (InterruptedException ignored) { } } JFrame frame = new JFrame("Splash Me2"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel label = new JLabel("Hello, Splash", JLabel.CENTER); frame.add(label, BorderLayout.CENTER); frame.setSize(300, 95); frame.setVisible(true); } }; EventQueue.invokeLater(runner); } }
2、JTable的排序、高亮显示和过滤 排序: 抽象类RowSorter 实现排序的主要代码: JTable table = new JTable(model);//生成指定模式的表格 RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);//生成一个RowSorter对应于表格模式 table.setRowSorter(sorter);//设置表格的RowSorter 如果想在排序时添加自己的动作,则可以对RowSorter实现RowSorterListener 实现的方法:void sorterChanged(RowSorterEvent e)
过滤: 抽象类RowFilter 提供一个实现过滤的方法:boolean include(RowFilter.Entry<? extends M,? extends I> entry) RowFilter提供6个方法生成过滤器: * andFilter(Iterable<? extends RowFilter<? super M,? super I>> filters) * dateFilter(RowFilter.ComparisonType type, Date date, int... indices) * notFilter(RowFilter<M,I> filter) * numberFilter(RowFilter.ComparisonType type, Number number, int... indices) * orFilter(Iterable<? extends RowFilter<? super M,? super I>> filters) * regexFilter(String regex, int... indices) 其中regexFilter中的参数regex是要过滤的文本,以"^"或者"$"开头,表示过滤是否以开regex开头或结尾。