现在位置: 首页 > 博客文章 > 电脑相关 > IT开发 > 开发语言 > Java > 正文
Jframe开发的一些基本问题
2016年01月25日 11:20:41 Java ⁄ 共 4086字 暂无评论 ⁄ 被围观 1,850次

最近做一个 Jframe 的小程序,是关于文件上传下载的,碰到了一些小问题,记录一下吧。

说实话,拿 Jframe 做画面,真是蛋疼,坐标需要一点点调,也没个预览啥的,只能调完后运行才能看到效果,而且更操蛋的是调试时看着画面挺好,结果导出后打包成 exe,安装后的画面和自己调试的差距甚远,真是无语,见下图:

jframe01jframe02

其它一些开发中碰到的问题,大概在这里记录一下,主要有一下几点。

1.如何修改Jframe画面左上角的小图标?

  1. 方法一:
  2. JFrame f = new JFrame();
  3. f.setIconImage(ImageIO.read(new File("xxx.jpg")));
  4. 方法二:
  5. JFrame f  = new JFrame();
  6. f.setVisible(true);
  7. ImageIcon icon = new ImageIcon("xxx.jpg");
  8. f.setIconImage(icon.getImage());
  9. 方法三:
  10. JFrame f  = new JFrame();
  11. URL url = f.getClass().getResource("xxx.jpg");
  12. Image img = Toolkit.getDefaultToolkit().getImage(url);
  13. f.setIconImage(img);
  14. 方法四:
  15. JFrame f  = new JFrame();
  16. Toolkit tk = Toolkit.getDefaultToolkit();
  17. Image image = tk.createImage("xxx.jpg");
  18. f.setIconImage(image);

注意到,不管用什么方法,Jframe中设置图标的函数是setIconImage(),几种方法,只是获取图片的方式有点儿差异。

2.如何修改Jframe画面最小化后,在电脑右下角的托盘图标,并添加右键菜单?

Code   ViewPrint
  1. if (SystemTray.isSupported()) {// 如果操作系统支持托盘
  2.     tray();// 添加托盘图标
  3. }
  4. /**
  5.  * 添加系统托盘图标
  6.  */
  7. private void tray() {
  8.     tray = SystemTray.getSystemTray(); // 获得本操作系统托盘的实例
  9.     ImageIcon icon = new ImageIcon("xxx.png"); // 将要显示到托盘中的图标
  10.     PopupMenu pop = new PopupMenu(); // 构造一个右键弹出式菜单
  11.     MenuItem show = new MenuItem("打开");
  12.     pop.add(show);
  13.     trayIcon = new TrayIcon(icon.getImage(), "数据同步(双击还原)", pop);
  14.     /**
  15.      * 添加鼠标监听器,当鼠标在托盘图标上双击时,默认显示窗口
  16.      */
  17.     trayIcon.addMouseListener(new MouseAdapter() {
  18.         public void mouseClicked(MouseEvent e) {
  19.             if (e.getClickCount() == 2) { // 鼠标双击
  20.                 tray.remove(trayIcon); // 从系统的托盘实例中移除托盘图标
  21.                 setExtendedState(JFrame.NORMAL);
  22.                 setVisible(true); // 显示窗口
  23.                 toFront();
  24.             }
  25.         }
  26.     });
  27.     show.addActionListener(new ActionListener() { // 点击“显示窗口”菜单后将窗口显示出来
  28.         public void actionPerformed(ActionEvent e) {
  29.             tray.remove(trayIcon); // 从系统的托盘实例中移除托盘图标
  30.             setExtendedState(JFrame.NORMAL);
  31.             setVisible(true); // 显示窗口
  32.             toFront();
  33.         }
  34.     });
  35. }

3.Jframe 打开后默认居于屏幕左上角,如何让 Jframe 居于屏幕中央?

  1. JFrame f = new JFrame();
  2. f.setLocationRelativeTo(null);//居于屏幕中央

4.如何让 Jframe 居于最上层?

  1. JFrame f = new JFrame();
  2. f.setAlwaysOnTop(true);//居于最上层

5.Jframe 还有哪些常用的设置?

  1. f.setTitle(title);//设置标题
  2. f.setSize(150200);//设置窗口大小
  3. f.setVisible(true);//显示窗口
  4. f.setResizable(false);//不让调整窗口大小
  5. f.setExtendedState(JFrame.ICONIFIED);//支持最小化
  6. //关闭窗口
  7. f.setVisible(false);
  8. f.setExtendedState(JFrame.DO_NOTHING_ON_CLOSE);

6.点击关闭窗口时,如何弹出警告提示框?

Code   ViewPrint
  1. //初始化添加监听
  2. addWindowListener(new WindowAdapter() {
  3.     public void windowClosing(WindowEvent e) {
  4.         exit();
  5.     }
  6. });
  7. /**
  8.  * 关闭画面警告框
  9.  */
  10. public void exit() {
  11.     Object[] options = { "确定""取消" };
  12.     JOptionPane pane2 = new JOptionPane("真想退出吗?",
  13.             JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION, null,
  14.             options, options[1]);
  15.     JDialog dialog = pane2.createDialog(this"警告");
  16.     dialog.setVisible(true);
  17.     Object selectedValue = pane2.getValue();
  18.     if (selectedValue == null || selectedValue == options[1]) {
  19.         setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); // 这个是关键
  20.     } else if (selectedValue == options[0]) {
  21.         setDefaultCloseOperation(EXIT_ON_CLOSE);
  22.     }
  23. }

7.如何给 MyJTextArea 添加滚动条,并让滚动条自动跟随内容滚动?

  1. MyJTextArea textarea = new MyJTextArea(2748);
  2. JScrollPane j = new JScrollPane(textarea,
  3.         JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
  4.         JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
  5. textarea.setText("显示内容");
  6. textarea.setCaretPosition(textarea.getText().length());//滚动条自动跟随

8.如何让 MyJTextArea 中的内容显示指定的行数?

应该来说有对应函数才对,比如最多只让显示 10 行,那第十一行 append 时,把第一行删除,仍保留 10 行。可上网搜了一大圈,没找到。自己写了一个,先凑活用吧。

Code   ViewPrint
  1. public static void appendText(String text) {
  2.     String tt = textarea.getText();//已有的字符串
  3.     String tm = "";
  4.     String[] str = null;
  5.     if (tt != null && !"".equals(tt)) {
  6.         str = tt.split(IniReader.RN);
  7.         if (str.length >= Main.LOG_DISPLAY) {//配置文件中定义的显示条数
  8.             str[0] = "";
  9.         }
  10.     }
  11.     if (str != null) {
  12.         for (int i = 0; i < str.length; i++) {
  13.             if (!"".equals(str[i])) {
  14.                 tm += str[i] + IniReader.RN;
  15.             }
  16.         }
  17.     }
  18.     textarea.setText(tm);
  19.     textarea.append(text + IniReader.RN);
  20.     textarea.setCaretPosition(textarea.getText().length());//滚动条自动跟随
  21. }

待追加中。。。

给我留言

留言无头像?