边框案例:

  1. package cn.dzz.swing;
  2.  
  3. import javax.swing.*;
  4. import javax.swing.border.*;
  5. import java.awt.*;
  6.  
  7. public class Demo02 {
  8.  
  9. JFrame jFrame = new JFrame("边框测试");
  10.  
  11. public void init() {
  12.  
  13. // 修改为栅格布局
  14. jFrame.setLayout(new GridLayout(2,4));
  15.  
  16. // 向单元格填充组件,设置边框和内容
  17.  
  18. // 1斜角边框
  19. Border bevelBorder = BorderFactory.createBevelBorder(
  20. BevelBorder.RAISED,
  21. Color.RED,
  22. Color.GREEN,
  23. Color.BLUE,
  24. Color.GRAY
  25. );
  26. JPanel bevelBorderJPanel = getJPanelWithBorder(bevelBorder, "BevelBorder");
  27.  
  28. // 2线条边框
  29. Border lineBorder = BorderFactory.createLineBorder(
  30. Color.ORANGE,
  31. 10
  32. );
  33. JPanel lineBorderJPanel = getJPanelWithBorder(lineBorder, "LineBorder");
  34.  
  35. // 3空边框
  36. Border emptyBorder = BorderFactory.createEmptyBorder(10, 5, 20, 10);
  37. JPanel emptyBorderJPanel = getJPanelWithBorder(emptyBorder, "EmptyBorder");
  38.  
  39. // 4蚀刻边框
  40. Border etchedBorder = BorderFactory.createEtchedBorder(
  41. EtchedBorder.RAISED,
  42. Color.RED,
  43. Color.GREEN
  44. );
  45. JPanel etchedBorderJPanel = getJPanelWithBorder(etchedBorder, "EtchedBorder");
  46.  
  47. // 5标题边框
  48. TitledBorder titledBorder = new TitledBorder(new LineBorder(
  49. Color.ORANGE,
  50. 10
  51. ),
  52. "测试标题",
  53. TitledBorder.LEFT,
  54. TitledBorder.BOTTOM,
  55. new Font("StSong", Font.BOLD, 18),
  56. Color.BLUE
  57. );
  58. JPanel titleBorderJPanel = getJPanelWithBorder(titledBorder, "TitleBorder");
  59.  
  60. // 6哑光边框
  61. MatteBorder matteBorder = new MatteBorder(10, 5, 20, 10, Color.GREEN);
  62. JPanel matteBorderJPanel = getJPanelWithBorder(matteBorder, "MatteBorder");
  63.  
  64. // 7复合边框
  65. // CompoundBorder compoundBorder = new CompoundBorder(titledBorder, new LineBorder(Color.RED, 10));
  66. CompoundBorder compoundBorder = new CompoundBorder(new LineBorder(Color.RED, 10), titledBorder);
  67. JPanel compoundBorderJPanel = getJPanelWithBorder(compoundBorder, "CompoundBorder");
  68.  
  69. // 组装
  70. jFrame.add(bevelBorderJPanel);
  71. jFrame.add(lineBorderJPanel);
  72. jFrame.add(emptyBorderJPanel);
  73. jFrame.add(etchedBorderJPanel);
  74. jFrame.add(titleBorderJPanel);
  75. jFrame.add(matteBorderJPanel);
  76. jFrame.add(compoundBorderJPanel);
  77.  
  78. // 设置窗口最佳大小 和 可见 可关闭
  79. jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  80. jFrame.pack();
  81. jFrame.setVisible(true);
  82. }
  83.  
  84. // 要设置8个面板对象,就要写8次,所以进行了一个封装处理
  85. JPanel getJPanelWithBorder(Border border,String content) {
  86. JPanel jPanel = new JPanel();
  87. jPanel.add(new JLabel(content));
  88. jPanel.setBorder(border);
  89. return jPanel;
  90. }
  91.  
  92. public static void main(String[] args) {
  93. new Demo02().init();
  94. }
  95. }

  

边框设置的参数种类很多

工具条案例JToolBar:

  1. package cn.dzz.swing;
  2.  
  3. import javax.swing.*;
  4. import java.awt.*;
  5. import java.awt.event.ActionEvent;
  6.  
  7. public class Demo03 {
  8.  
  9. JFrame jFrame = new JFrame("工具条演示案例");
  10. JTextArea jTextArea = new JTextArea(6, 35);
  11. JToolBar jToolBar = new JToolBar("PlayerToolBar", SwingConstants.HORIZONTAL);
  12.  
  13. // 3个action对象
  14. Action preAct = new AbstractAction(" 上一首") {
  15. @Override
  16. public void actionPerformed(ActionEvent e) {
  17. jTextArea.append("上一曲\n");
  18. }
  19. };
  20.  
  21. Action pauseAct = new AbstractAction("⏸ 暂停") {
  22. @Override
  23. public void actionPerformed(ActionEvent e) {
  24. jTextArea.append("暂停播放\n");
  25. }
  26. };
  27.  
  28. Action nextAct = new AbstractAction(" 下一首") {
  29. @Override
  30. public void actionPerformed(ActionEvent e) {
  31. jTextArea.append("下一曲\n");
  32. }
  33. };
  34.  
  35. public void init() {
  36.  
  37. // 直接组装
  38. jToolBar.add(preAct);
  39. jToolBar.addSeparator();
  40. jToolBar.add(pauseAct);
  41. jToolBar.addSeparator();
  42. jToolBar.add(nextAct);
  43.  
  44. jFrame.add(jToolBar,BorderLayout.NORTH);
  45. jFrame.add(jTextArea,BorderLayout.CENTER);
  46.  
  47. jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  48. jFrame.pack();
  49. jFrame.setVisible(true);
  50. }
  51.  
  52. public static void main(String[] args) {
  53. new Demo03().init();
  54. }
  55. }

颜色选择和文件选择:

ColorChooser & FileChooser

  1. package cn.dzz.swing;
  2.  
  3. import javax.swing.*;
  4. import java.awt.*;
  5. import java.awt.event.ActionEvent;
  6.  
  7. public class Demo04 {
  8.  
  9. JFrame jFrame = new JFrame("颜色选择器");
  10. JTextArea jTextArea = new JTextArea("我爱Java",6,30);
  11. JButton changeBgColor = new JButton( new AbstractAction("更改编辑区背景色") {
  12. @Override
  13. public void actionPerformed(ActionEvent e) {
  14. Color color = JColorChooser.showDialog(
  15. jFrame, // 父级组件
  16. "选择颜色", // 对话框标题
  17. Color.WHITE // 初始颜色
  18. );
  19. jTextArea.setBackground(color);
  20. }
  21. });
  22.  
  23. public void init(){
  24. jFrame.add(jTextArea, BorderLayout.CENTER);
  25. jFrame.add(changeBgColor, BorderLayout.SOUTH);
  26. jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  27. jFrame.pack();
  28. jFrame.setVisible(true);
  29. }
  30.  
  31. public static void main(String[] args) {
  32. new Demo04().init();
  33. }
  34. }

效果显示

文件选择器:

  1. package cn.dzz.swing;
  2.  
  3. import javax.imageio.ImageIO;
  4. import javax.swing.*;
  5. import java.awt.*;
  6. import java.awt.event.ActionEvent;
  7. import java.awt.image.BufferedImage;
  8. import java.io.File;
  9. import java.io.IOException;
  10.  
  11. public class Demo05 {
  12.  
  13. JFrame jFrame = new JFrame("文件选择器");
  14. JMenuBar jMenuBar = new JMenuBar();
  15. JMenu jMenu = new JMenu("文件");
  16.  
  17. BufferedImage buffImage;
  18. // 画布渲染
  19. class MyCanvas extends JPanel {
  20. @Override
  21. public void paint(Graphics graphics) {
  22.  
  23. graphics.drawImage(buffImage, 0, 0, null);
  24. }
  25. }
  26. MyCanvas myCanvas = new MyCanvas();
  27.  
  28. JMenuItem openMenuItem = new JMenuItem(new AbstractAction("选择文件") {
  29. @Override
  30. public void actionPerformed(ActionEvent e) {
  31. JFileChooser jFileChooser = new JFileChooser(".");
  32. jFileChooser.showOpenDialog(jFrame);
  33. File selectedFile = jFileChooser.getSelectedFile();
  34.  
  35. try {
  36. buffImage = ImageIO.read(selectedFile);
  37. myCanvas.repaint();
  38. } catch (IOException ioException) {
  39. ioException.printStackTrace();
  40. }
  41. }
  42. });
  43.  
  44. JMenuItem saveMenuItem = new JMenuItem(new AbstractAction("另存为") {
  45. @Override
  46. public void actionPerformed(ActionEvent e) {
  47. JFileChooser jFileChooser = new JFileChooser(".");
  48. jFileChooser.showSaveDialog(jFrame);
  49. File selectedFile = jFileChooser.getSelectedFile();
  50. try {
  51. ImageIO.write(buffImage, "jpg", selectedFile );
  52. } catch (IOException ioException) {
  53. ioException.printStackTrace();
  54. }
  55. }
  56. });
  57.  
  58. void init() {
  59.  
  60. // 按钮菜单组装
  61. jMenu.add(openMenuItem);
  62. jMenu.add(saveMenuItem);
  63. jMenuBar.add(jMenu);
  64. // 窗体组装
  65. jFrame.setJMenuBar(jMenuBar);
  66. myCanvas.setPreferredSize(new Dimension(740, 500));
  67. jFrame.add(myCanvas);
  68.  
  69. jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  70. jFrame.pack();
  71. jFrame.setVisible(true);
  72. }
  73.  
  74. public static void main(String[] args) {
  75. new Demo05().init();
  76. }
  77. }

效果:

存在的一些BUG:如果图片不足画布大小,会将外层的图形写入其中,超过画布大小的,则不会缩放渲染

保存功能不可以自己获取文件后缀

【Java-GUI】08 Swing02 边框和选择器的更多相关文章

  1. java Gui编程 事件监听机制

    1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式:   1. 命令交互方式    图书管理系统 ...

  2. JAVA GUI 工具

    Java GUI图形界面开发工具   上大学那会儿比较主流的Java图形开发插件是:Visual Editor 和 SWT Designer, 不久又出了个Jigloo, 但去官网看了下发现这个东西也 ...

  3. Java GUI入门手册-AWT篇

    Java GUI入门手册: AWT是基本的GUI设计工具,重点学习其中的布局格式以及事件监听事件. 首先创建一个窗口,我们先分析Frame类中的方法: 通过上图,可以看出frame是由构造方法的重载: ...

  4. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  5. JAVA GUI

    JAVA GUI中的事件处理:   委托事件模型:事件源对象和监听器对象具有绑定关系   一个监听器可以绑定多个事件源 一个事件源也可以绑定多个监听器 监听器有各自监听的事件类型   设置容器的布局管 ...

  6. paip.java gui swt/jface 最佳实践

    paip.java gui swt/jface 最佳实践 1. 工具:Eclipse +jigloo4 1 2. 安装插件: 1 1. IMPORT swt lib 2 2. 新建立窗体 2 3. 运 ...

  7. 写在学习Java GUI之前

    Java GUI就是用Java语言开发桌面应用,而Java又有三个Java GUI库,分别为AWT,Swing和SWT/JFace. 现在要学的是Swing库. 后记:开发桌面应用,不止一种技术,现在 ...

  8. [置顶] java Gui 键盘监听事件

    简单写一个java Gui键盘监听事件,实现的效果就是按下键盘控制台输出你按下的键.比如:按下A控制台就输出A 效果如图: 以下把实现的效果分为几个步骤: 1.新建一个窗体类继承窗体: 2.给这个窗体 ...

  9. java GUI (课堂笔记)

    关于java GUI Swing组件: JFrame 窗口组件 JLabel 标签 JButton 按钮组件 JTextField 单行文本框 系统控件(JDK自带) 自定义控件(模仿系统控件): 继 ...

  10. IntelliJ IDE 开发Java GUI 入门

    j主要对java 的GUI相关知识进行简单的介绍和总结,整个博客按照创建一个java GUI的顺序进行介绍,期间穿插讲解用到的java Swing的布局.控件等相关知识.本博客所进行的讲解及工程的创建 ...

随机推荐

  1. (数据科学学习手札161)高性能数据分析利器DuckDB在Python中的使用

    本文完整代码及附件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在几天前,经过六年多的 ...

  2. 开源高性能结构化日志模块NanoLog

      最近在写数据库程序,需要一个高性能的结构化日志记录组件,简单研究了一下Microsoft.Extensions.Logging和Serilog,还是决定重造一个轮子. 一.使用方法   直接参考以 ...

  3. asp.net中gridview隐藏一列并且使用这列数据的方法

    方法一:在RowCreated事件中添加如下代码可隐藏此列,使用this.grdView.Rows[index].Cells[1].Text获取值,index为行号. 1 protected void ...

  4. 使用Vagrant创建CentOS虚拟机

    使用Vagrant创建CentOS虚拟机 Vagrant是一款由HashiCorp公司提供的,用于快速构建虚拟机环境的软件.本节我们将使用Vagrant结合Oracle VM VirtualBox快速 ...

  5. 在Ubuntu系统安装Anaconda及Python

      本文介绍在Linux Ubuntu操作系统的电脑中,安装Anaconda环境与Python语言的方法.   在之前的文章Anaconda与Python环境在Windows中的部署中,我们介绍了在W ...

  6. Linux命令行配置RIAD5

    环境准备: 系统: redhat6.9 硬盘:300G*3 SAS MegaCli是一款管理维护硬件RAID软件,可以用来查看raid信息等 1. 安装MegaCli rpm -ivh Lib_Uti ...

  7. apisix~14在自定义插件中调用proxy_rewrite

    在 Apache APISIX 中,通过 proxy-rewrite 插件来修改上游配置时,需要确保插件的执行顺序和上下文环境正确.你提到在自己的插件中调用 proxy_rewrite.rewrite ...

  8. 使用 Spring 实现控制反转和依赖注入

    使用 Spring 实现控制反转和依赖注入 概述 在本文中,我们将介绍IoC(控制反转)和DI(依赖注入)的概念,以及如何在Spring框架中实现它们. 什么是控制反转? 控制反转是软件工程中的一个原 ...

  9. QT学习:05 元对象系统

    --- title: framework-cpp-qt-05-元对象系统 EntryName: framework-cpp-qt-05-mos date: 2020-04-09 17:11:44 ca ...

  10. C# 时间戳与 标准时间互转

    C# 时间戳与 标准时间的转其实不难,但需要注意下,基准时间的问题. 格林威治时间起点: 1970 年 1 月 1 日的 00:00:00.000 北京时间起点:1970 年 1 月 1 日的 08: ...