有哪位高手知道怎么用JAVA实现组件的圆形布局啊???

解决方案 »

  1.   

    没看懂您的意思,什么是椭圆形布局啊,把form框弄成椭圆形?还是怎么样?
    没遇到过这种需求
      

  2.   

    参见O'Reilly的《Java Swing》
      

  3.   

    public class CompassButtons extends JFrame { JButton nb = new JButton("North");
    JButton sb = new JButton("South");
    JButton eb = new JButton("East");
    JButton wb = new JButton("West");
    JViewport viewport = new JViewport(); public CompassButtons() {
    super("SpringLayout Compass Demo");
    setSize(500, 300);
    setDefaultCloseOperation(EXIT_ON_CLOSE); SpringLayout sl = new SpringLayout();
    Container c = getContentPane();
    c.setLayout(sl); int offset = 50; // Gap between buttons and outside edge
    int w = 80; // Width of buttons
    int h = 26; // Height of buttons
    int border = 3; // Border around viewport Spring offsetS = Spring.constant(offset);
    Spring borderS = Spring.constant(border);
    Spring widthS = Spring.constant(w);
    Spring halfWidthS = FractionSpring.half(widthS);
    Spring heightS = Spring.constant(h);
    Spring halfHeightS = FractionSpring.half(heightS);
    Spring leftEdgeS = sl.getConstraint(SpringLayout.WEST, c);
    Spring topEdgeS = sl.getConstraint(SpringLayout.NORTH, c);
    Spring rightEdgeS = sl.getConstraint(SpringLayout.EAST, c);
    Spring bottomEdgeS = sl.getConstraint(SpringLayout.SOUTH, c);
    Spring xCenterS = FractionSpring.half(rightEdgeS);
    Spring yCenterS = FractionSpring.half(bottomEdgeS);
    Spring leftBorder = Spring.sum(leftEdgeS, borderS);
    Spring topBorder = Spring.sum(topEdgeS, borderS); Spring northX = Spring.sum(xCenterS, Spring.minus(halfWidthS));
    Spring southY = Spring.sum(bottomEdgeS, Spring.minus(Spring.sum(
    heightS, offsetS)));
    Spring eastX = Spring.sum(rightEdgeS, Spring.minus(Spring.sum(widthS,
    offsetS)));
    Spring eastY = Spring.sum(yCenterS, Spring.minus(halfHeightS)); c.add(nb,
    new SpringLayout.Constraints(northX, offsetS, widthS, heightS));
    c
    .add(sb, new SpringLayout.Constraints(northX, southY, widthS,
    heightS)); c.add(wb);
    sl.getConstraints(wb).setX(offsetS);
    sl.getConstraints(wb).setY(eastY);
    sl.getConstraints(wb).setWidth(widthS);
    sl.getConstraints(wb).setHeight(heightS); c.add(eb);
    sl.getConstraints(eb).setX(eastX);
    sl.getConstraints(eb).setY(eastY);
    sl.getConstraints(eb).setWidth(widthS);
    sl.getConstraints(eb).setHeight(heightS); c.add(viewport);
    sl.putConstraint(SpringLayout.SOUTH, viewport, Spring.minus(borderS),
    SpringLayout.SOUTH, c);
    sl.putConstraint(SpringLayout.EAST, viewport, Spring.minus(borderS),
    SpringLayout.EAST, c);
    sl.putConstraint(SpringLayout.NORTH, viewport, topBorder,
    SpringLayout.NORTH, c);
    sl.putConstraint(SpringLayout.WEST, viewport, leftBorder,
    SpringLayout.WEST, c); ImageIcon icon = new ImageIcon(getClass().getResource("/catalog.gif"));
    viewport.setView(new JLabel(icon)); setVisible(true);
    } public static void main(String args[]) {
    new CompassButtons();
    }
    }class FractionSpring extends Spring { protected Spring parent;
    protected double fraction; public FractionSpring(Spring p, double f) {
    if (p == null) {
    throw new NullPointerException("Parent spring cannot be null");
    }
    parent = p;
    fraction = f;
    } public int getValue() {
    return (int) Math.round(parent.getValue() * fraction);
    } public int getPreferredValue() {
    return (int) Math.round(parent.getPreferredValue() * fraction);
    } public int getMinimumValue() {
    return (int) Math.round(parent.getMinimumValue() * fraction);
    } public int getMaximumValue() {
    return (int) Math.round(parent.getMaximumValue() * fraction);
    } public void setValue(int val) {
    if (val == UNSET) {
    return;
    }
    throw new UnsupportedOperationException(
    "Cannot set value on a derived spring");
    } public static FractionSpring half(Spring s) {
    return new FractionSpring(s, 0.5);
    }
    }