1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.log4j.chainsaw;
18
19 import javax.swing.*;
20 import javax.swing.border.BevelBorder;
21 import javax.swing.border.Border;
22 import javax.swing.border.EmptyBorder;
23 import javax.swing.border.SoftBevelBorder;
24 import java.awt.*;
25 import java.awt.event.MouseEvent;
26 import java.awt.event.MouseListener;
27
28
29 /**
30 * A better button class that has nice roll over effects.
31 * <p>
32 * This class is borrowed (quite heavily, but with modifications)
33 * from the "Swing: Second Edition"
34 * book by Matthew Robinson and Pavel Vorobeiv. An excellent book on Swing.
35 *
36 * @author Matthew Robinson
37 * @author Pavel Vorobeiv
38 * @author Paul Smith <psmith@apache.org>
39 */
40 public class SmallButton extends JButton implements MouseListener {
41 protected Border m_inactive = new EmptyBorder(3, 3, 3, 3);
42 protected Border m_border = m_inactive;
43 protected Border m_lowered = new SoftBevelBorder(BevelBorder.LOWERED);
44 protected Border m_raised = new SoftBevelBorder(BevelBorder.RAISED);
45 protected Insets m_ins = new Insets(4, 4, 4, 4);
46
47 public SmallButton() {
48 super();
49 setBorder(m_inactive);
50 setMargin(m_ins);
51 setRequestFocusEnabled(false);
52 addMouseListener(this);
53 }
54
55 public SmallButton(Action act) {
56 this();
57 setAction(act);
58 setRequestFocusEnabled(false);
59
60 // addActionListener(act);
61 addMouseListener(this);
62 }
63
64 /**
65 * DOCUMENT ME!
66 *
67 * @return DOCUMENT ME!
68 */
69 public float getAlignmentY() {
70 return 0.5f;
71 }
72
73 /**
74 * DOCUMENT ME!
75 *
76 * @return DOCUMENT ME!
77 */
78 public Border getBorder() {
79 return m_border;
80 }
81
82 /**
83 * DOCUMENT ME!
84 *
85 * @return DOCUMENT ME!
86 */
87 public Insets getInsets() {
88 return m_ins;
89 }
90
91 /**
92 * DOCUMENT ME!
93 *
94 * @param e DOCUMENT ME!
95 */
96 public void mouseClicked(MouseEvent e) {
97 }
98
99 /**
100 * DOCUMENT ME!
101 *
102 * @param e DOCUMENT ME!
103 */
104 public void mouseEntered(MouseEvent e) {
105 if (isEnabled()) {
106 m_border = m_raised;
107 setBorder(m_raised);
108 }
109 }
110
111 /**
112 * DOCUMENT ME!
113 *
114 * @param e DOCUMENT ME!
115 */
116 public void mouseExited(MouseEvent e) {
117 m_border = m_inactive;
118 setBorder(m_inactive);
119 }
120
121 /**
122 * DOCUMENT ME!
123 *
124 * @param e DOCUMENT ME!
125 */
126 public void mousePressed(MouseEvent e) {
127
128 if (isEnabled()) {
129 m_border = m_lowered;
130 setBorder(m_lowered);
131 }
132 }
133
134 /**
135 * DOCUMENT ME!
136 *
137 * @param e DOCUMENT ME!
138 */
139 public void mouseReleased(MouseEvent e) {
140 m_border = m_inactive;
141 setBorder(m_inactive);
142 }
143 }