1. 使JDialog位于屏幕的中央

public void setToScreenCenter(JDialog jd) {
           Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
           Dimension frameSize = jd.getSize();
           if (frameSize.height > screenSize.height) {
                       frameSize.height = screenSize.height;
          }
          if (frameSize.width > screenSize.width) {
                      frameSize.width = screenSize.width;
          }
          jd.setLocation((screenSize.width - frameSize.width) / 2,(screenSize.height - frameSize.height) / 2);
 }

2.为JDialog增加图片背景

public class MySwingTest extends JDialog{
   private JPanel panelContent;
   private BufferedImage image;
   private Graphics  g;
   private Image srcImage;
   String imageURL = "C:/NMS/PLATFORM/NNM5/client/resource/symbols/background/background.gif";
   public MySwingTest(){
        image  =  new BufferedImage(1200, 760, BufferedImage.TYPE_3BYTE_BGR);
        image.flush();
       g = image.getGraphics();  
  try {
       srcImage = ImageIO.read(new File(imageURL));
  } catch (IOException e) {
   e.printStackTrace();
  }
  g.drawImage(srcImage,0,0, null);
  init();
 }

private void init(){
  this.setMinimumSize(new Dimension(700, 560));
  this.setMaximumSize(new Dimension(700, 560));
   
   /*try {//这样加载的是一个图片,而不是将图片作为背景
        ImageIcon icon = new ImageIcon(image);
        JLabel label = new JLabel(icon);
        label.setBounds(0, 0, icon.getIconWidth(), icon.getIconHeight());
        panelContent.add(label);
   
       g.dispose();
     }catch (Exception e) {
          e.printStackTrace();
     }*/
     panelContent = new NewPanel();
     this.setContentPane(panelContent);
     this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
     setToScreenCenter(this);
    this.setVisible(true);
  }

public void setToScreenCenter(JDialog jd) {//上面的方法

}
  public static void main(String [] args){
     MySwingTest mst = new MySwingTest();
  }

class NewPanel extends JPanel {

public NewPanel() {

}
 public void paintComponent(Graphics g) {
      int x = 0, y = 0;
      ImageIcon icon = new ImageIcon(image);
      g.drawImage(icon.getImage(), x, y, getSize().width,getSize().height, this);
     while (true) {
     g.drawImage(icon.getImage(), x, y, this);
     if (x > getSize().width && y > getSize().height)
          break;
     // 这段代码是为了保证在窗口大于图片时,图片仍能覆盖整个窗口
      if (x > getSize().width) {
          x = 0;
          y += icon.getIconHeight();
     } else
         x += icon.getIconWidth();
     }
     g.drawString("abcdefg", 200, 200);//在图片的特定位置加上文字
  }
 }
}

3.文字旋转显示

public class Rotate {

public static void main(String[] args) {
            JFrame jf = new JFrame();
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            jf.getContentPane().add(new RotatePanel());
            jf.setPreferredSize(new Dimension(500, 400));
            jf.pack();
            jf.setVisible(true);

}

}

class RotatePanel extends JPanel {
           protected void paintComponent(Graphics g) {
           super.paintComponent(g);
           Graphics2D g2d = (Graphics2D) g;

g2d.setColor(Color.WHITE);
           g2d.fillRect(0, 0, this.getWidth(), this.getHeight());

String s = "Java 2d 旋转";
           Font f = new Font("宋体", Font.BOLD, 16);
           Color[] colors = { Color.ORANGE, Color.LIGHT_GRAY };
           g2d.setFont(f);

// 平移原点到图形环境的中心
          g2d.translate(this.getWidth() / 2, this.getHeight() / 2);

// 旋转文本
         for (int i = 0; i < 12; i++) {
         g2d.rotate(30 * Math.PI / 180);
         g2d.setPaint(colors[i % 2]);
         g2d.drawString(s, 0, 0);
     }
   }
}

4.BufferedImage处理图像

BufferedImage是Image的一个子类,BufferedImage生成的图片在内存里有一个图像缓冲区,利用这个缓冲区我们可以很方便的操作这个图片,通常用来做图片修改操作如大小变换、图片变灰、设置图片透明或不透明等。

BufferedImage bufferedImage = ImageIO.read(new FileInputStream(filePath));

public BufferedImage getGrayPicture(BufferedImage originalImage)
{
    int green=0,red=0,blue=0,rgb;
    int imageWidth = originalImage.getWidth();
    int imageHeight = originalImage.getHeight();
   for(int i = originalImage.getMinX();i < imageWidth ;i++){
         for(int j = originalImage.getMinY();j < imageHeight ;j++){
               //图片的像素点其实是个矩阵,这里利用两个for循环来对每个像素进行操作
               Object data = routeImage.getRaster().getDataElements(i, j, null);//获取该点像素,并以object类型表示
               red = routeImage.getColorModel().getRed(data);
               blue = routeImage.getColorModel().getBlue(data);
               green = routeImage.getColorModel().getGreen(data);
               red = (red*3 + green*6 + blue*1)/10;
               green = red;
               blue = green;
              /*
            这里将r、g、b再转化为rgb值,因为bufferedImage没有提供设置单个颜色的方法,只能设置rgb。rgb最大为8388608,当大于这个值时,应减去 255*255*25516777216
               */
              rgb = (red*256 + green)*256+blue;
             if(rgb>8388608){
                     rgb = rgb - 16777216;
             }
             //将rgb值写回图片
              routeImage.setRGB(i, j, rgb);
         }
    }
    return originalImage;
}

Swing小技巧总结的更多相关文章

  1. 前端网络、JavaScript优化以及开发小技巧

    一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...

  2. Git小技巧 - 指令别名及使用Beyond Compare作为差异比较工具

    前言 本文主要写给使用命令行来操作Git的用户,用于提高Git使用的效率.至于使用命令还是GUI(Tortoise Git或VS的Git插件)就不在此讨论了,大家根据自己的的喜好选择就好.我个人是比较 ...

  3. 分享两个BPM配置小技巧

    1.小技巧 流程图修改后发布的话版本号会+1,修改次数多了之后可能会导致版本号很高,这个时候可以将流程导出,然后删除对应的流程包再导入,发布数据模型和流程图之后,版本清零 2.小技巧 有的同事入职后使 ...

  4. linux系统维护时的一些小技巧,包括系统挂载新磁盘的方法!可收藏!

    这里发布一些平时所用到的小技巧,不多,不过会持续更新.... 1.需要将history创建硬链接ln 全盘需要备份硬链接 ln /etc/xxx /home/xxx 2.root用户不可以远程 /et ...

  5. JS处理事件小技巧

    今天,就分享一下我自己总结的一些JS的小技巧: ①防止鼠标选中事件 <div class="mask" onselectstart="return false&qu ...

  6. iOS:小技巧(不断更新)

    记录下一些不常用技巧,以防忘记,复制用. 1.获取当前的View在Window的frame: UIWindow * window=[[[UIApplication sharedApplication] ...

  7. css小技巧(1)

    1.-webkit-overflow-scrolling: touch; 解决ios滑动时无缓冲问题 2.::-webkit-scrollbar 设置ios滑动时是否显示滚动条 3.::selecti ...

  8. 最强 Android Studio 使用小技巧和快捷键

    写在前面 本文翻译自 Android Studio Tips by Philippe Breault,一共收集了62个 Android Studio 使用小技巧和快捷键. 根据这些小技巧的使用场景,本 ...

  9. ios开发中的小技巧

    在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...

随机推荐

  1. UESTC30-最短路-Floyd最短路、spfa+链式前向星建图

    最短路 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 在每年的校赛里,所有进入决赛的同 ...

  2. DB 注意事项 优化数据库查询

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  3. 数据结构与算法(c++)——双缓存队列

    "双缓存队列"是我在一次开发任务中针对特殊场景设计出来的结构.使用场景为:发送端持续向接收端发送数据包--并且不理会接收端是否完成业务逻辑.由于接收端在任何情况下停止响应即可能产生 ...

  4. 【WebApi系列】浅谈HTTP

    [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi如何传递参数 [04]详解WebApi测试和PostMan [05]浅谈WebApi Core ...

  5. 关于VC++中virtual ~的含义

    我知道virtual 的虚函数定义,~CMainFrame( )是析构函数,用来释放内存.C++的继承和派生内容.所有可以被用作基类的类一般都用虚析构函数当基类对象的指针或引用调用派生类对象时,如果基 ...

  6. Effective Java 第三版——27. 消除非检查警告

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  7. Algorithms code

    一些值得回看的小算法. 最长的连续子数组 子数组数字不重复 int [] arr={1,2,3,4,7}; //输出4 int [] arr1={1,2,3,4,1,2,3,4,5,1}; //输出5 ...

  8. Python3.6.1的安装

    Python 3.61的下载和安装,下载地址:https://www.python.org/downloads/ 选择最近的版本,目前为Python3.6.1,下载后直接安装即可 下载包为: 双击安装 ...

  9. 自己动手搭建一个简易的SpringBoot环境

    什么是springboot? Spring Boot俗称微服务.Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特 ...

  10. 关于今天esp8266运行失控问题和oled与串口共存尝试成功的总结

    今天2017-12-1720:24:22下午esp8266再次无法刷入固件,导致我一度崩溃,本来已经认为esp8266已经相当稳定了,没想到今天又运行出错,总结如下 今天2017-12-17esp无法 ...