001 /* 002 * LAPIS lightweight structured text processing system 003 * 004 * Copyright (C) 1998-2002 Carnegie Mellon University, 005 * Copyright (C) 2003 Massachusetts Institute of Technology. 006 * All rights reserved. 007 * 008 * This library is free software; you can redistribute it 009 * and/or modify it under the terms of the GNU General 010 * Public License as published by the Free Software 011 * Foundation, version 2. 012 * 013 * LAPIS homepage: http://graphics.lcs.mit.edu/lapis/ 014 */ 015 016 package lapisx.swing; 017 018 import java.awt.*; 019 import javax.swing.*; 020 021 /** 022 * Lightweight component that just draws a one-pixel horizontal or 023 * vertical line. 024 */ 025 public class Line extends JComponent { 026 int orientation; 027 028 public int getOrientation () { return orientation; } 029 public void setOrientation (int orientation) { this.orientation = orientation; repaint (); } 030 031 /** 032 * Make a horizontal line in a 10x10 bounding box. 033 */ 034 public Line () { 035 this (10, 10, SwingConstants.HORIZONTAL); 036 } 037 038 /** 039 * Make a Line. 040 * @param w Width of line's bounding box 041 * @param h Height of line's bounding box 042 * @param orientation SwingConstants.HORIZONTAL for horizontal line 043 * w pixels long; 044 * SwingConstants.VERTICAL for vertical line h pixels long. 045 */ 046 public Line (int width, int height, int orientation) { 047 this.orientation = orientation; 048 setPreferredSize (new Dimension (width, height)); 049 } 050 051 public void paintComponent (Graphics g) { 052 super.paintComponent (g); 053 054 Insets insets = getInsets (); 055 Dimension size = getSize (); 056 int width = size.width - insets.left - insets.right; 057 int height = size.height - insets.top - insets.bottom; 058 059 g.setColor (getForeground ()); 060 switch (orientation) { 061 case SwingConstants.HORIZONTAL: 062 { 063 int x = insets.left; 064 int y = insets.top + height/2; 065 g.drawLine (x, y, x + width, y); 066 break; 067 } 068 case SwingConstants.VERTICAL: 069 { 070 int x = insets.left + width/2; 071 int y = insets.top; 072 g.drawLine (x, y, x, y + height); 073 break; 074 } 075 } 076 } 077 } 078