Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here is the code. Some quick notes, there is still some debug in the code, and replace calls to LOGGER object with System.out.println().</p> <pre><code>import java.awt.Color; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Point2D; import java.util.logging.Logger; import javax.swing.JComponent; import javax.swing.event.MouseInputListener; public abstract class LCARSComponent extends JComponent implements MouseInputListener { /** * A reference to the global Logger object. */ protected final static Logger LOGGER = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME); protected int x; protected int y; protected int w; protected int h; protected double scaleFactor = 1.0; protected Area area; protected Area scaledArea; protected int style; protected Color color; protected AffineTransform renderingTransform; protected ActionListener actionListener; public LCARSComponent(Container parent, int x, int y, int w, int h, int style) { this.x = x; this.y = y; this.w = w; this.h = h; this.style = style; setBounds(x,y,w,h); addMouseListener(this); } @Override protected void paintComponent(Graphics g) { /** * First, paint the background if the component is opaque. Required when * JComponent is extended, and the paintCompnent() method is overridden. */ if(isOpaque()) { g.setColor(getBackground()); g.fillRect(0, 0, getWidth(), getHeight()); } /** * Create a Graphics2D object so we can use Java 2D features. */ Graphics2D g2d = (Graphics2D) g.create(); /** * Set the anti aliasing rendering hint and the color to draw with. */ g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setColor(color); scaleComponent(); /** * Draw the Area object of the LCARS component, and fill it. */ g2d.draw(scaledArea); g2d.fill(scaledArea); g2d.drawRect(scaledArea.getBounds().x, scaledArea.getBounds().y, scaledArea.getBounds().width, scaledArea.getBounds().height); /** * Clean up when the method has completed by disposing the Graphics2D object that was created. */ g2d.dispose(); } protected void scaleComponent() { double sw = (double)getParent().getWidth() / (double)getParent().getPreferredSize().width; double sh = (double)getParent().getHeight() / (double)getParent().getPreferredSize().height; LOGGER.info("scaledWidth = " + sw); LOGGER.info("scaledHeight = " + sh); double scaleFactor; if(sh &lt; sw) { scaleFactor = sh; } else { scaleFactor = sw; } LOGGER.info("scaleFactor = " + scaleFactor); if(scaleFactor != this.scaleFactor) { this.scaleFactor = scaleFactor; scaledArea = new Area(area); renderingTransform = new AffineTransform(); renderingTransform.scale(scaleFactor, scaleFactor); scaledArea.transform(renderingTransform); } setBounds((int)(this.x*scaleFactor), (int)(this.y*scaleFactor), this.getWidth(), this.getHeight()); } public Point screenToComponent(Point pt) { if(renderingTransform == null) { Graphics2D g2d = (Graphics2D)(this.getParent().getGraphics()); renderingTransform = g2d.getTransform(); } Point2D pt2d = renderingTransform.transform(pt,null); LOGGER.info("mouse click: " + pt.getX() + ", " + pt.getY() + " -- " + pt2d.getX() + ", " + pt2d.getY()); return new Point((int)Math.round(pt2d.getX()), (int)Math.round(pt2d.getY())); } public void setActionListener(ActionListener actionListener) { this.actionListener = actionListener; } @Override public void mouseClicked(MouseEvent e) { Point pt = e.getPoint(); LOGGER.info("mouseClicked: " + this.getName() + " - " + pt.getX() + ", " + pt.getY()); if(area.contains(e.getPoint())) { if(actionListener != null) { actionListener.actionPerformed(new ActionEvent(e.getSource(), e.getID(), e.paramString())); } if(color.equals(Color.black)) color = Color.blue; else color = Color.black; this.repaint(); } } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub if(area.contains(e.getLocationOnScreen())) System.out.println("mousePressed()..."); } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub if(area.contains(e.getLocationOnScreen())) System.out.println("mouseReleased()..."); } @Override public void mouseEntered(MouseEvent e) { Point pt = e.getPoint(); // TODO Auto-generated method stub System.out.println("mouseEntered()..."); LOGGER.info("mouseEntered: " + this.getName() + " - " + pt.getX() + ", " + pt.getY()); } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub Point pt = e.getPoint(); System.out.println("mouseExited()..."); LOGGER.info("mouseExited: " + pt.getX() + ", " + pt.getY()); } @Override public void mouseDragged(MouseEvent e) { // TODO Auto-generated method stub System.out.println("mouseDragged()..."); } @Override public void mouseMoved(MouseEvent e) { // TODO Auto-generated method stub System.out.println("mouseMoved()..."); } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload