试一试这个:import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2001</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/public class UnderLineMenu extends JFrame
{
JPanel jPanel1 = new JPanel(); public UnderLineMenu()
{
try
{
jbInit();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
UnderLineMenu underLineMenu1 = new UnderLineMenu();
}
private void jbInit() throws Exception
{
this.getContentPane().add(jPanel1, BorderLayout.WEST);
Container contentPane = getContentPane();
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File"); fileMenu.add(new UnderlineElement("item one"));
fileMenu.add(new UnderlineElement("item two"));
fileMenu.add(new UnderlineElement("item three")); menuBar.add(fileMenu);
setJMenuBar(menuBar);
this.setSize(200,250);
this.setLocation(200,300);
this.setVisible(true);
this.show();
this.validate();
}
}
class UnderlineElement extends JButton implements MenuElement {
private boolean drawUnderline = false; public UnderlineElement(String s) {
super(s);
setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
}
public Component getComponent() {
return this;
}
public MenuElement[] getSubElements() {
return new MenuElement[0];
}
public void menuSelectionChanged(boolean b) {
drawUnderline = b;
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g); Insets insets = getInsets(); if(drawUnderline) {
FontMetrics fm = g.getFontMetrics();
g.drawLine(insets.left, insets.top + fm.getHeight(),
fm.stringWidth(getText()),
insets.top + fm.getHeight());
}
}
public void processKeyEvent(KeyEvent me,
MenuElement[] element,
MenuSelectionManager msm) {
}
public void processMouseEvent(MouseEvent me) {
super.processMouseEvent(me);
MenuSelectionManager.defaultManager().processMouseEvent(
me);
}
public void processMouseEvent(MouseEvent me,
MenuElement[] element,
MenuSelectionManager msm) {
if(me.getID() == MouseEvent.MOUSE_CLICKED ||
me.getID() == MouseEvent.MOUSE_RELEASED) { msm.setSelectedPath(null);
doClick();
}
else
msm.setSelectedPath(getPath());
}
public MenuElement[] getPath() {
MenuSelectionManager defaultManager =
MenuSelectionManager.defaultManager();
MenuElement oldPath[] = defaultManager.getSelectedPath();
MenuElement newPath[];
int len = oldPath.length; if(len > 0) {
MenuElement lastElement = oldPath[len-1];
Component parent = getParent(); if (lastElement == parent) {
newPath = new MenuElement[len+1]; System.arraycopy(oldPath, 0, newPath, 0, len);
newPath[len] = this;
}
else {
int j; for (j = len-1; j >= 0; j--) {
if (oldPath[j].getComponent() == parent)
break;
}
newPath = new MenuElement[j+2];
System.arraycopy(oldPath, 0, newPath, 0, j+1);
newPath[j+1] = this;
}
}
else
return new MenuElement[0]; return newPath;
}
}
import java.awt.*;
import java.awt.event.*;
import java.util.*;/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2001</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/public class UnderLineMenu extends JFrame
{
JPanel jPanel1 = new JPanel(); public UnderLineMenu()
{
try
{
jbInit();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
UnderLineMenu underLineMenu1 = new UnderLineMenu();
}
private void jbInit() throws Exception
{
this.getContentPane().add(jPanel1, BorderLayout.WEST);
Container contentPane = getContentPane();
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File"); fileMenu.add(new UnderlineElement("item one"));
fileMenu.add(new UnderlineElement("item two"));
fileMenu.add(new UnderlineElement("item three")); menuBar.add(fileMenu);
setJMenuBar(menuBar);
this.setSize(200,250);
this.setLocation(200,300);
this.setVisible(true);
this.show();
this.validate();
}
}
class UnderlineElement extends JButton implements MenuElement {
private boolean drawUnderline = false; public UnderlineElement(String s) {
super(s);
setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
}
public Component getComponent() {
return this;
}
public MenuElement[] getSubElements() {
return new MenuElement[0];
}
public void menuSelectionChanged(boolean b) {
drawUnderline = b;
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g); Insets insets = getInsets(); if(drawUnderline) {
FontMetrics fm = g.getFontMetrics();
g.drawLine(insets.left, insets.top + fm.getHeight(),
fm.stringWidth(getText()),
insets.top + fm.getHeight());
}
}
public void processKeyEvent(KeyEvent me,
MenuElement[] element,
MenuSelectionManager msm) {
}
public void processMouseEvent(MouseEvent me) {
super.processMouseEvent(me);
MenuSelectionManager.defaultManager().processMouseEvent(
me);
}
public void processMouseEvent(MouseEvent me,
MenuElement[] element,
MenuSelectionManager msm) {
if(me.getID() == MouseEvent.MOUSE_CLICKED ||
me.getID() == MouseEvent.MOUSE_RELEASED) { msm.setSelectedPath(null);
doClick();
}
else
msm.setSelectedPath(getPath());
}
public MenuElement[] getPath() {
MenuSelectionManager defaultManager =
MenuSelectionManager.defaultManager();
MenuElement oldPath[] = defaultManager.getSelectedPath();
MenuElement newPath[];
int len = oldPath.length; if(len > 0) {
MenuElement lastElement = oldPath[len-1];
Component parent = getParent(); if (lastElement == parent) {
newPath = new MenuElement[len+1]; System.arraycopy(oldPath, 0, newPath, 0, len);
newPath[len] = this;
}
else {
int j; for (j = len-1; j >= 0; j--) {
if (oldPath[j].getComponent() == parent)
break;
}
newPath = new MenuElement[j+2];
System.arraycopy(oldPath, 0, newPath, 0, j+1);
newPath[j+1] = this;
}
}
else
return new MenuElement[0]; return newPath;
}
}
解决方案 »
- 一个applet应用程序,结果输出时"\n"换行不去作用,且appletviewer窗口有乱码,怎样解决
- JTextArea不允许编辑,但是允许复制
- 如何能实现 java nio 异步写文件?
- 请问请问
- 昨天的问题没解决,今天又有新问题,关于内存
- Java如何实现3D图形信息存储
- 请问有中文版的java帮助文件吗?
- Servlet怎样接收conn.getOutputStream()发过来的字节流?
- 怎么去处理swing图形中的这个要求?
- /*这只是简单的显示一串字符的JAVA程序,已经通过编译了,但我不懂X参数的作用,为什么用它?请各位高手请教,不胜感激*/
- 如何使按钮能利用菜单的事件代吗?
- 我想问一下关于菜单的问题?
帮忙再回复一下,谢谢