public void paintBorder(Component c, Graphics g, int x, int y, int w, int h)
	{
		if (c instanceof AbstractButton == false)
		{
			super.paintBorder(c, g, x, y, w, h);
			return;
		}
		AbstractButton button = (AbstractButton) c;
		ButtonModel model = button.getModel();

		if (model.isEnabled())
		{
			boolean isPressed = model.isPressed() && model.isArmed();
			boolean isDefault = button instanceof JButton
					&& ((JButton) button).isDefaultButton();

			if (isPressed && isDefault)
			{
				g.setColor(Color.BLACK); // outer 3D border
				g.drawLine(0, 0, 0, h - 1);
				g.drawLine(0, 0, w - 1, 0);

				g.setColor(Color.BLACK); // inner 3D border
				g.drawLine(1, 1, 1, h - 3);
				g.drawLine(2, 1, w - 3, 1);

				g.setColor(Color.LIGHT_GRAY); // inner 3D border
				g.drawLine(1, h - 2, w - 2, h - 2);
				g.drawLine(w - 2, 1, w - 2, h - 3);

				g.setColor(Color.WHITE); // inner drop shadow __|
				g.drawLine(0, h - 1, w - 1, h - 1);
				g.drawLine(w - 1, h - 1, w - 1, 0);
			}
			else if (isPressed)
			{
				g.setColor(Color.BLACK); // outer 3D border
				g.drawLine(0, 0, 0, h - 1);
				g.drawLine(0, 0, w - 1, 0);

				g.setColor(Color.DARK_GRAY); // inner 3D border
				g.drawLine(1, 1, 1, h - 3);
				g.drawLine(2, 1, w - 3, 1);

				g.setColor(Color.LIGHT_GRAY); // inner 3D border
				g.drawLine(1, h - 2, w - 2, h - 2);
				g.drawLine(w - 2, 1, w - 2, h - 3);

				g.setColor(Color.WHITE); // inner drop shadow __|
				g.drawLine(0, h - 1, w - 1, h - 1);
				g.drawLine(w - 1, h - 1, w - 1, 0);
			}
			else if (isDefault)
			{
				g.setColor(Color.WHITE); // outer 3D border
				g.drawLine(0, 0, 0, h - 1);
				g.drawLine(0, 0, w - 1, 0);

				g.setColor(Color.LIGHT_GRAY); // inner 3D border
				g.drawLine(1, 1, 1, h - 3);
				g.drawLine(2, 1, w - 3, 1);

				g.setColor(Color.DARK_GRAY); // inner 3D border
				g.drawLine(1, h - 2, w - 2, h - 2);
				g.drawLine(w - 2, 1, w - 2, h - 3);

				g.setColor(Color.BLACK); // inner drop shadow __|
				g.drawLine(0, h - 1, w - 1, h - 1);
				g.drawLine(w - 1, h - 1, w - 1, 0);
			}
			else
			{
				// Default
				g.setColor(Color.WHITE); // outer 3D border
				g.drawLine(0, 0, 0, h - 1);
				g.drawLine(0, 0, w - 1, 0);

				g.setColor(Color.LIGHT_GRAY); // inner 3D border
				g.drawLine(1, 1, 1, h - 3);
				g.drawLine(2, 1, w - 3, 1);

				g.setColor(Color.BLACK); // inner 3D border
				g.drawLine(1, h - 2, w - 2, h - 2);
				g.drawLine(w - 2, 1, w - 2, h - 3);

				g.setColor(Color.BLACK); // inner drop shadow __|
				g.drawLine(0, h - 1, w - 1, h - 1);
				g.drawLine(w - 1, h - 1, w - 1, 0);
			}
		}
		else
		{
			// disabled state
			g.setColor(Color.WHITE); // outer 3D border
			g.drawLine(0, 0, 0, h - 1);
			g.drawLine(0, 0, w - 1, 0);

			g.setColor(Color.LIGHT_GRAY); // inner 3D border
			g.drawLine(1, 1, 1, h - 3);
			g.drawLine(2, 1, w - 3, 1);

			g.setColor(Color.DARK_GRAY); // inner 3D border
			g.drawLine(1, h - 2, w - 2, h - 2);
			g.drawLine(w - 2, 1, w - 2, h - 3);

			g.setColor(Color.BLACK); // inner drop shadow __|
			g.drawLine(0, h - 1, w - 1, h - 1);
			g.drawLine(w - 1, h - 1, w - 1, 0);
		}
	}