zoukankan      html  css  js  c++  java
  • java 实现自定义框架

    简介

    实现LayoutManager 接口即可,只要实现5个接口杰克
    分别是
    void addLayoutComponent(String s, Component c);
    void removeLayoutComponent(Component c);
    Dimension perferredLayoutSize(Container parent);
    Dimension minimumLayoutSize(Container parent);
    void layoutContainer(Container parent);
    java 核心编程带来了 如下的circleLayout

    code

    /*
     * @Author: your name
     * @Date: 2020-11-08 13:51:10
     * @LastEditTime: 2020-11-08 13:54:40
     * @LastEditors: your name
     * @Description: In User Settings Edit
     * @FilePath: /java/circleLayout/CircleLayout.java
     */
    package circleLayout;
    
    import java.awt.*;
    
    /**
     * A layout manager that lays out components along a circle.
     */
    public class CircleLayout implements LayoutManager {
       private int minWidth = 0;
       private int minHeight = 0;
       private int preferredWidth = 0;
       private int preferredHeight = 0;
       private boolean sizesSet = false;
       private int maxComponentWidth = 0;
       private int maxComponentHeight = 0;
    
       public void addLayoutComponent(String name, Component comp) {
       }
    
       public void removeLayoutComponent(Component comp) {
       }
    
       public void setSizes(Container parent) {
          if (sizesSet)
             return;
          int n = parent.getComponentCount();
    
          preferredWidth = 0;
          preferredHeight = 0;
          minWidth = 0;
          minHeight = 0;
          maxComponentWidth = 0;
          maxComponentHeight = 0;
    
          // compute the maximum component widths and heights
          // and set the preferred size to the sum of the component sizes
          for (int i = 0; i < n; i++) {
             Component c = parent.getComponent(i);
             if (c.isVisible()) {
                Dimension d = c.getPreferredSize();
                maxComponentWidth = Math.max(maxComponentWidth, d.width);
                maxComponentHeight = Math.max(maxComponentHeight, d.height);
                preferredWidth += d.width;
                preferredHeight += d.height;
             }
          }
          minWidth = preferredWidth / 2;
          minHeight = preferredHeight / 2;
          sizesSet = true;
       }
    
       public Dimension preferredLayoutSize(Container parent) {
          setSizes(parent);
          Insets insets = parent.getInsets();
          int width = preferredWidth + insets.left + insets.right;
          int height = preferredHeight + insets.top + insets.bottom;
          return new Dimension(width, height);
       }
    
       public Dimension minimumLayoutSize(Container parent) {
          setSizes(parent);
          Insets insets = parent.getInsets();
          int width = minWidth + insets.left + insets.right;
          int height = minHeight + insets.top + insets.bottom;
          return new Dimension(width, height);
       }
    
       public void layoutContainer(Container parent) {
          setSizes(parent);
    
          // compute center of the circle
    
          Insets insets = parent.getInsets();
          int containerWidth = parent.getSize().width - insets.left - insets.right;
          int containerHeight = parent.getSize().height - insets.top - insets.bottom;
    
          int xcenter = insets.left + containerWidth / 2;
          int ycenter = insets.top + containerHeight / 2;
    
          // compute radius of the circle
    
          int xradius = (containerWidth - maxComponentWidth) / 2;
          int yradius = (containerHeight - maxComponentHeight) / 2;
          int radius = Math.min(xradius, yradius);
    
          // lay out components along the circle
    
          int n = parent.getComponentCount();
          for (int i = 0; i < n; i++) {
             Component c = parent.getComponent(i);
             if (c.isVisible()) {
                double angle = 2 * Math.PI * i / n;
    
                // center point of component
                int x = xcenter + (int) (Math.cos(angle) * radius);
                int y = ycenter + (int) (Math.sin(angle) * radius);
    
                // move component so that its center is (x, y)
                // and its size is its preferred size
                Dimension d = c.getPreferredSize();
                c.setBounds(x - d.width / 2, y - d.height / 2, d.width, d.height);
             }
          }
       }
    }
    
    
    /*
     * @Author: your name
     * @Date: 2020-11-08 13:51:10
     * @LastEditTime: 2020-11-08 13:51:37
     * @LastEditors: your name
     * @Description: In User Settings Edit
     * @FilePath: /java/circleLayout/CircleLayoutFrame.java
     */
    package circleLayout;
    
    import javax.swing.*;
    
    /**
     * A frame that shows buttons arranged along a circle.
     */
    public class CircleLayoutFrame extends JFrame {
       public CircleLayoutFrame() {
          setLayout(new CircleLayout());
          add(new JButton("Yellow"));
          add(new JButton("Blue"));
          add(new JButton("Red"));
          add(new JButton("Green"));
          add(new JButton("Orange"));
          add(new JButton("Fuchsia"));
          add(new JButton("Indigo"));
          pack();
       }
    }
    
    package circleLayout;
    
    import java.awt.*;
    import javax.swing.*;
    
    /**
     * @version 1.34 2018-04-10
     * @author Cay Horstmann
     */
    public class CircleLayoutTest {
       public static void main(String[] args) {
          EventQueue.invokeLater(() -> {
             var frame = new CircleLayoutFrame();
             frame.setTitle("CircleLayoutTest");
             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             frame.setVisible(true);
          });
       }
    }
    
    
    Hope is a good thing,maybe the best of things,and no good thing ever dies.----------- Andy Dufresne
  • 相关阅读:
    工作生活中需要知道的常识名词
    ICON的设计很重要
    100offer 为专业程序打造的招聘平台
    2014年工作生活大总结
    游戏模块分析总结(3)之引导篇
    游戏模块分析总结(2)之UI、操作篇
    数字证书及CA介绍
    Hyperledger Fabric密码模块系列之BCCSP(五)
    GDB十分钟教程
    Hyperledger Fabric密码模块系列之BCCSP(四)
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/13944196.html
Copyright © 2011-2022 走看看