Auf Thema antworten

ok, zu guter letzt noch ein Beispiel:


[code=Java]

import java.awt.Color;

import java.awt.Cursor;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Polygon;

import java.awt.Rectangle;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.MouseMotionAdapter;

import java.awt.event.MouseMotionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.awt.event.WindowListener;


import javax.swing.JApplet;

import javax.swing.JComponent;

import javax.swing.JFrame;

import javax.swing.JToolTip;

import javax.swing.Timer;

import javax.swing.*;



public class PolygonButton extends JComponent implements MouseListener, MouseMotionListener

{

  static public Color ACTIVE_COLOR = Color.red;

  static public Color INACTIVE_COLOR = Color.darkGray;

  protected String text;

  protected Polygon polygon;

  protected Rectangle rectangle;

  protected boolean isActive;

  protected static PolygonButton button;

  public JTextField test;

 


  public PolygonButton(Polygon p, String text) {

    polygon = p;

    setText(text);


    setOpaque(false);


    addMouseListener(this);

    addMouseMotionListener(this);


    rectangle = new Rectangle(polygon.getBounds()); // Bug alert!

    rectangle.grow(1, 1);


    setBounds(rectangle);

    polygon.translate(-rectangle.x, -rectangle.y);

  }


  public void setText(String t) {

    text = t;

  }


  public String getText() {

    return text;

  }


  public void mouseMoved(MouseEvent e) {

    if (!rectangle.contains(e.getX(), e.getY()) || e.isConsumed()) {

      if (isActive) {

        isActive = false;

        repaint();

      }

      return; // quickly return, if outside our rectangle

    }


    int x = e.getX() - rectangle.x;

    int y = e.getY() - rectangle.y;

    boolean active = polygon.contains(x, y);


    if (isActive != active)

      setState(active);

    if (active)

      e.consume();

  }


  public void mouseDragged(MouseEvent e) {

  }


  protected void setState(boolean active)

  {

    isActive = active;

    repaint();

    if (active)

    {

      if (button != null)

        button.setState(false);

        setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));

    }

    else

    {

        button = null;

        setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));

    }

  }


  public void mouseClicked(MouseEvent e) {

  }


  public void mousePressed(MouseEvent e) {

  }


  public void mouseReleased(MouseEvent e) {

  }


  public void mouseExited(MouseEvent e) {

    mouseMoved(e);

  }


  public void mouseEntered(MouseEvent e) {

    mouseMoved(e);


  }


  public void paint(Graphics g) {

    g.setColor(isActive ? ACTIVE_COLOR : INACTIVE_COLOR);

    g.drawPolygon(polygon);

    //test.setText("5");

  }

  public static void main(String[] argv) {

    JFrame f = new JFrame();

    f.setSize(400, 300);

   

    JTextField test = new JTextField();

    test.setBounds(10,120,20,20);

    f.add(test);

   

    Polygon p = new Polygon();

    p.addPoint(10, 10);

    p.addPoint(100, 300);

    p.addPoint(300, 300);

    p.addPoint(10, 10);


    PolygonButton btn = new PolygonButton(p, "button");

    f.getContentPane().add(btn);

   

    WindowListener wndCloser = new WindowAdapter() {

      public void windowClosing(WindowEvent e) {

        System.exit(0);

      }

    };

    f.addWindowListener(wndCloser);

    f.setVisible(true);

  }

}

[/code]


wie gesagt sind das nur Anregungen, meine Problemstellung umsetzen kann ich damit leider immer noch nicht ;(



Oben