java的JPopupMenu组件弹出显示到JList后面的问题?(附代码)

yliu80 2003-02-26 05:14:34
最近在写applet,我添加了一个JList,又添加了一个JPopupMenu,然后PopupMenu在弹出显示时经常出现在JList后面,我是用JBuilder做的。怎么办?

package Chat;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import java.util.Vector;
import com.borland.jbcl.layout.*;

/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/

public class Chat extends Applet {
private boolean isStandalone = false;
String ip;
int port;
String usrid;
int roomid;
private JSplitPane mainPain = new JSplitPane();
private XYLayout xYLayout1 = new XYLayout();
private JScrollPane leftPane = new JScrollPane();
private JTabbedPane rightPane = new JTabbedPane();
private JTextPane jTextPane1 = new JTextPane();
private JScrollPane jspOnlineUsr = new JScrollPane();
private JScrollPane jspFriend = new JScrollPane();
private JScrollPane jspBlack = new JScrollPane();
private JScrollPane jspTools = new JScrollPane();

private Vector vectorOnlineUsr = new Vector();
private Vector vectorFriend = new Vector();
private Vector vectorBlack = new Vector();

private JList jlOnlineUsr = new JList(vectorOnlineUsr){
public String getToolTipText(MouseEvent e){
int index = locationToIndex(e.getPoint());
if(index > -1){
return String.valueOf(index);
}else{
return "";
}
}
};
private JList jlFriend = new JList(vectorFriend);
private JList jlBlack = new JList(vectorBlack);
private JButton jButton1 = new JButton();
private JPopupMenu popList = new JPopupMenu();
private JMenuItem popUsrInfo = new JMenuItem();
private JMenuItem popPrivateChat = new JMenuItem();
private JMenuItem popJoinFriend = new JMenuItem();
private JMenuItem popJoinBlack = new JMenuItem();
private JMenuItem popDeleteFriend = new JMenuItem();
private JMenuItem jMenuItem1 = new JMenuItem();
//Get a parameter value
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}

//Construct the applet
public Chat() {
}
//Initialize the applet
public void init() {
try {
ip = this.getParameter("ip", "");
}
catch(Exception e) {
e.printStackTrace();
}
try {
port = Integer.parseInt(this.getParameter("port", "0"));
}
catch(Exception e) {
e.printStackTrace();
}
try {
usrid = this.getParameter("usrid", "");
}
catch(Exception e) {
e.printStackTrace();
}
try {
roomid = Integer.parseInt(this.getParameter("iroomid", "0"));
}
catch(Exception e) {
e.printStackTrace();
}
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
//Component initialization
private void jbInit() throws Exception {
this.setLayout(xYLayout1);
jTextPane1.setText("jTextPane1");
xYLayout1.setWidth(750);
xYLayout1.setHeight(450);
jButton1.setText("jButton1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});
popUsrInfo.setText("用户信息");
popPrivateChat.setText("私聊");
popJoinFriend.setText("加入好友");
popJoinBlack.setText("加入黑名单");
popDeleteFriend.setText("删除好友");
class popupMenuListener extends MouseAdapter{
public void mousePressed(MouseEvent e){
showPopup(e);
}
public void mouseReleased(MouseEvent e){
showPopup(e);
}
private void showPopup(MouseEvent e){

if(e.isPopupTrigger() == true){
System.out.println("Show PopupMenu ......");
popList.show(e.getComponent(),e.getX(),e.getY());
}
}
}
jlOnlineUsr.addMouseListener(new popupMenuListener());
jlOnlineUsr.add(popList);
jlOnlineUsr.setToolTipText("");
/* jlOnlineUsr.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(MouseEvent e) {
jlOnlineUsr_mouseClicked(e);
}
public void mousePressed(MouseEvent e) {
jlOnlineUsr_mousePressed(e);
}
public void mouseReleased(MouseEvent e) {
jlOnlineUsr_mouseReleased(e);
}
});
*/
jMenuItem1.setText("删除黑名单");
this.add(mainPain, new XYConstraints(0, 0, 750, 375));
mainPain.add(leftPane, JSplitPane.LEFT);
leftPane.getViewport().add(jTextPane1, null);
mainPain.add(rightPane, JSplitPane.RIGHT);
rightPane.add(jspOnlineUsr, "在线用户");
jspOnlineUsr.getViewport().add(jlOnlineUsr, null);
rightPane.add(jspFriend, "好友");
jspFriend.getViewport().add(jlFriend, null);
rightPane.add(jspBlack, "黑名单");
jspBlack.getViewport().add(jlBlack, null);
rightPane.add(jspTools, "工具");
this.add(jButton1, new XYConstraints(590, 394, 92, 22));
popList.add(popUsrInfo);
popList.add(popPrivateChat);
popList.addSeparator();
popList.add(popJoinFriend);
popList.add(popJoinBlack);
popList.addSeparator();
popList.add(popDeleteFriend);
popList.add(jMenuItem1);
mainPain.setDividerLocation(550);


}
//Start the applet
public void start() {
this.setFont(new Font("宋体",2,10));
System.out.println("Server'ip is" + ip);
System.out.println("Server'port is " + port);
}
//Stop the applet
public void stop() {
}
//Destroy the applet
public void destroy() {
}
//Get Applet information
public String getAppletInfo() {
return "Applet Information";
}
//Get parameter info
public String[][] getParameterInfo() {
String[][] pinfo =
{
{"ip", "String", ""},
{"port", "int", ""},
{"usrid", "String", ""},
{"iroomid", "int", ""},
};
return pinfo;
}

void jButton1_actionPerformed(ActionEvent e) {
this.vectorOnlineUsr.addElement("this is a test.");
this.jlOnlineUsr.setToolTipText("test");
this.jlOnlineUsr.updateUI();
}

void jlOnlineUsr_mouseClicked(MouseEvent e) {
System.out.println("Show PopupMenu ......" + e.getX());
}

void popList_mouseClicked(MouseEvent e) {

}

void jlOnlineUsr_mousePressed(MouseEvent e) {
popList.show(jlOnlineUsr,e.getX(),e.getY());
popList.updateUI();

// jlOnlineUsr.locationToIndex(e.getPoint());
jlOnlineUsr.setSelectedIndex(jlOnlineUsr.locationToIndex(e.getPoint()));


}

void jlOnlineUsr_mouseReleased(MouseEvent e) {
popList.show(jlOnlineUsr,e.getX(),e.getY());
popList.updateUI();
}
}
...全文
73 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
shardy 2003-02-26
  • 打赏
  • 举报
回复
用java做桌面应用没有前途的,还是用j2ee有竞争力啊。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧