Button Application
<< Dueling Robots Example | Applications | Timer Applicaiton >>
These can be used as buttons for the user to make a choice, or even as locations on a board game like Chinese checkers or Battleship.
TriangleButton.java
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Polygon;
public class TriangleButton {
private int x,y, size;
private Color color, borderColor;
private Polygon shape;
public TriangleButton(int x, int y, int size, Color c, Color b, boolean up){
this.x=x;
this.y=y;
this.size=size;
this.setColor(c);
this.setBorderColor(b);
shape = new Polygon();
shape.addPoint(x, y);
int deltaX = size/2;
int deltaY = (int)(0.5*size*Math.sqrt(3));
if (up)
deltaY*=-1;
shape.addPoint(x+deltaX, y+deltaY);
shape.addPoint(x+size, y);
}
public TriangleButton(int x, int y, int size, boolean up){
this(x,y,size,Color.YELLOW, Color.BLACK, up);
}
public TriangleButton(int x, int y, int size, Color c, boolean up){
this(x,y,size,c, Color.BLACK, up);
}
public TriangleButton(int x, int y, int size, Color c){
this(x,y,size,c, Color.BLACK, true);
}
public boolean contains(int x0, int y0){
return shape.contains(x0, y0);
}
public void draw(Graphics g){
g.setColor(color);
g.fillPolygon(shape);
g.setColor(borderColor);
g.drawPolygon(shape);
}
public Color getBorderColor() {
return borderColor;
}
public void setBorderColor(Color borderColor) {
this.borderColor = borderColor;
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
}
Board.java
import java.awt.Graphics;
public class Board {
public final static int GAP=3;
private int top, left, tileSize, rows, col;
private TriangleButton[][] tiles;
public Board(int top, int left, int tileSize, int rows, int cols){
this.top=top;
this.left=left;
this.tileSize=tileSize;
tiles = new TriangleButton[rows][cols];
for (int row=0; row< tiles.length; row++)
for(int col=0; col<tiles[0].length; col++){
int x0=left+col*tileSize+col*GAP;
int y0=(int)(top +row*tileSize*Math.sqrt(3)+(row/2)*GAP);
tiles[row][col]=new TriangleButton(x0, y0, tileSize, (row%2)==0);
}
}
public void draw(Graphics g){
for (TriangleButton[] row:tiles)
for (TriangleButton b: row)
b.draw(g);
}
}
BoardTester.java
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class BoardTester extends JPanel implements KeyListener
{
public static int WIDTH=800;
public static int HEIGHT=600;
private Font titleFont, regularFont;
private Board board;
private TriangleButton tb;
public BoardTester()
{
//initialize variables here...
titleFont = new Font("Roman", Font.BOLD, 18);
regularFont = new Font("Helvetica", Font.PLAIN, 12);
board = new Board(200, 200, 30, 5, 8);
tb = new TriangleButton(100, 400, 50, Color.RED, true);
}
public static void main(String[] args) {
BoardTester app= new BoardTester();
JFrame window = new JFrame("Board Tester");
window.setSize(WIDTH, HEIGHT);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().add(app);
window.addKeyListener(app);
//window.pack();
window.setVisible(true);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.WHITE);
g.fillRect(0, 0, getWidth(),getHeight());
g.setColor(Color.BLUE);
g.setFont(titleFont);
g.drawString("Board Tester", 20, 20);
g.setColor(Color.BLACK);
g.setFont(regularFont);
g.drawString("Version 1.0", 20, 40);
board.draw(g);
tb.draw(g);
}
// update is a workaround to cure Windows screen flicker problem
public void update(Graphics g){
paint(g);
}
// These 3 methods need to be declares to implement the KeyListener Interface
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e) {}
}
