Umieszczanie obiektów w oknie aplikacji JAVA?


(system) #1

Mam oto taki kod który w oknie aplikacji generuje mi kolorowe obracające się koło:

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Insets;

import java.awt.image.BufferedImage;

import java.util.Timer;

import java.util.TimerTask;


import javax.swing.JFrame;


public class BufferedAnimate extends JFrame {


  private static int DELAY = 300;


  Image buffer;


  Dimension oldSize;


  Insets insets;


  Color colors[] = { Color.RED, Color.ORANGE, Color.YELLOW, Color.GREEN,

      Color.BLUE, Color.MAGENTA };


  public void paint(Graphics g) {

    if ((oldSize == null) || (oldSize != getSize())) {

      oldSize = getSize();

      buffer = new BufferedImage(getWidth(), getHeight(),

          BufferedImage.TYPE_INT_RGB);

    }

    if (insets == null) {

      insets = getInsets();

    }

    // Calculate each time in case of resize

    int x = insets.left;

    int y = insets.top;

    int width = getWidth() - insets.left - insets.right;

    int height = getHeight() - insets.top - insets.bottom;

    int start = 0;

    int steps = colors.length;

    int stepSize = 360 / steps;

    synchronized (colors) {

      Graphics bufferG = buffer.getGraphics();

      bufferG.setColor(Color.WHITE);

      bufferG.fillRect(x, y, width, height);

      for (int i = 0; i < steps; i++) {

        bufferG.setColor(colors[i]);

        bufferG.fillArc(x, y, width, height, start, stepSize);

        start += stepSize;

      }

    }

    g.drawImage(buffer, 0, 0, this);

  }


  public void go() {

    TimerTask task = new TimerTask() {

      public void run() {

        Color c = colors[0];

        synchronized (colors) {

          System.arraycopy(colors, 1, colors, 0, colors.length - 1);

          colors[colors.length - 1] = c;

        }

        repaint();

      }

    };

    Timer timer = new Timer();

    timer.schedule(task, 0, DELAY);

  }


  public static void main(String args[]) {

    BufferedAnimate f = new BufferedAnimate();

    f.setSize(200, 200);

    f.setTitle("Buffered");

    f.show();

    f.go();

  }

}

Jednak wielkość okna aplikacji zależy od rozmiaru tego koła a ja chciałbym np. aby to koło było w górny rogu okna aplikacji.

Wydaje mi się że rozmiar okna nie powinien być przypisywany na rzecz obiektu "f" :idea:

Ale jak to zrobić abym w oknie mógł oprócz tego koła umieścić sobie jeszcze jakieś przyciski o wybranej wielkości i w wybranym położeniu :?:

Z góry dzięki wszystkim za pomoc :slight_smile:

W dniu 19.05.2008 , o godzinie 14:49 został dopisany post przez Neon87

Kurcze... naprawdę nikt nie może mi tu pomóc :frowning: