java - 哪种布局可以做到这一点?

标签 java swing layout grid-layout miglayout

我正在尝试在我的应用程序中布局一些 JLabel,如下例所示:

enter image description here

我总是将这个 JLabel 放在中间,而其他 JLabel 的数量是可变的,可以从 1 到 30。我尝试了网格布局,方法是选择大量的列/行并将一些空的 JLabel 设置为白色空间,但我不能得到一个好的结果,并且找不到如何使用 MigLayout ,有没有人有好的布局方案或任何其他解决方案。

PS:我不想显示圆圈,只是为了显示 JLabel 是在一个圆圈中排列的。

最佳答案

您不需要专门支持此功能的布局管理器。您可以使用一些相当简单的三角函数自己计算 x、y 位置,然后使用常规布局,例如 SpringLayout

import java.awt.Point;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SpringLayout;

public class CircleLayout {

  /**
   * Calculate x,y positions of n labels positioned in
   * a circle around a central point. Assumes AWT coordinate
   * system where origin (0,0) is top left.
   * @param args
   */
  public static void main(String[] args) {
    int n = 6;  //Number of labels
    int radius = 100;
    Point centre = new Point(200,200);

    double angle = Math.toRadians(360/n);
    List<Point> points = new ArrayList<Point>();
    points.add(centre);

    //Add points
    for (int i=0; i<n; i++) {
      double theta = i*angle;
      int dx = (int)(radius * Math.sin(theta));
      int dy = (int)(-radius * Math.cos(theta));
      Point p = new Point(centre.x + dx, centre.y + dy);
      points.add(p);
    }

    draw(points);
  }

  private static void draw(List<Point> points) {
    JFrame frame = new JFrame("Labels in a circle");
    frame.setSize(500, 500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel panel = new JPanel();;
    SpringLayout layout = new SpringLayout();

    int count = 0;
    for (Point point : points) {
      JLabel label = new JLabel("Point " + count);
      panel.add(label);
      count++;
      layout.putConstraint(SpringLayout.WEST, label, point.x, SpringLayout.WEST, panel);
      layout.putConstraint(SpringLayout.NORTH, label, point.y, SpringLayout.NORTH, panel);
    }

    panel.setLayout(layout);

    frame.add(panel);
    frame.setVisible(true);

  }
}

the maths screenshot

关于java - 哪种布局可以做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10243482/

相关文章:

java - 如何在java中使用BigDecimals提高数字的浮点精度?

java - 如何从二级查询缓存中获取条目?

java - 在 Java 中替换字符串忽略大小写

java - 如何在 GWT 2.0 中使用 DockLayoutPanel 和 UiBinder 布局小部件?

android - 移除 Android 应用标题栏

java - 未找到类定义 WSDL2JAVA 轴 1.4

java - JFrame setVisible(false) 和 setState(Frame.ICONIFIED) 之间的区别

java - GUI 应用程序中线程的最佳方法(Java、swing)

java - JScrollPane 不会向下滚动以正确显示从 ActionListener 调用的 JTextPane

ios - UICollectionView - 水平滚动,水平布局?