• Swing小技巧总结


    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;
    }

  • 相关阅读:
    异常:Neither BindingResult nor plain target object for bean name 'command' available as request attribute
    SpringMVC 如何定义类型转换器
    Springmvc 进行数据类型转换
    mvc:view-controller 标签
    将POST请求转换为DELETE、PUT等请求的方法
    关于HiddenHttpMethodFilter
    关于抽象方法的调用的
    一对一关联关系基于主键映射的异常 IdentifierGenerationException
    (二十四)js内存回收方法
    (二十三)函数柯里化
  • 原文地址:https://www.cnblogs.com/lnlvinso/p/3755644.html
Copyright © 2020-2023  润新知