Java 实际弹出一个JPOppMenu
我有一个Java 实际弹出一个JPOppMenu,java,actionlistener,Java,Actionlistener,我有一个JFrame,看起来像一个典型的聊天框。为了连接和断开与服务器的连接,我实现了一个jpopmpmenu,并在主窗口中添加了一个MouseListener。 但是,弹出菜单不会出现 主窗口中的各种JC组件: JTextArea在JScrollPane JTextField输入消息 发送按钮 JScrollPane和一个ArrayList来显示用户 无论您在何处单击鼠标右键,弹出窗口都会出现。无论是在JTextArea还是在字段中输入您的消息。 我应该向哪些组件添加侦听器,以及我应该添加什么
JFrame
,看起来像一个典型的聊天框。为了连接和断开与服务器的连接,我实现了一个jpopmpmenu
,并在主窗口中添加了一个MouseListener
。但是,弹出菜单不会出现 主窗口中的各种JC组件:
JTextArea
在JScrollPane
JTextField
输入消息发送
按钮JScrollPane
和一个ArrayList
来显示用户无论您在何处单击鼠标右键,弹出窗口都会出现。无论是在
JTextArea
还是在字段中输入您的消息。我应该向哪些组件添加侦听器,以及我应该添加什么侦听器 代码 变量:
private static A_Chat_Client chatClient;
public static String userName = "Anonymous";
//------------------------------------------------------------------------------
public static JFrame mainFrame = new JFrame();
public static JTextArea textArea = new JTextArea(30,30);
public static JScrollPane pane = new JScrollPane(textArea);
public static JTextField message = new JTextField(10);
public static JButton send = new JButton("Send");
public static JPopupMenu popup = new JPopupMenu();
public static JMenuItem connect = new JMenuItem("Connect");
public static JMenuItem disconnect = new JMenuItem("Disconnect");
public static JMenuItem help = new JMenuItem("Help");
public static JList usersOnline = new JList();
public static JScrollPane userPane = new JScrollPane(usersOnline);
public static void main(String[] args) {
buildMainWindow();
initialize();
addListeners();
popup.show(mainFrame, 0, 0); //forcefully popup
}
public static void addListeners(){
mainFrame.addMouseListener(new MouseHandler());
send.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
actionSend();
}
});
connect.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
actionConnect();
}
});
disconnect.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
actionDisconnect();
}
});
help.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
actionHelp();
}
});
}
private static class MouseHandler extends MouseAdapter{
@Override
public void mouseClicked(MouseEvent e){
if(e.isPopupTrigger()){
popup.show(mainFrame, e.getX(), e.getY());
}
}
}
主要方法
private static A_Chat_Client chatClient;
public static String userName = "Anonymous";
//------------------------------------------------------------------------------
public static JFrame mainFrame = new JFrame();
public static JTextArea textArea = new JTextArea(30,30);
public static JScrollPane pane = new JScrollPane(textArea);
public static JTextField message = new JTextField(10);
public static JButton send = new JButton("Send");
public static JPopupMenu popup = new JPopupMenu();
public static JMenuItem connect = new JMenuItem("Connect");
public static JMenuItem disconnect = new JMenuItem("Disconnect");
public static JMenuItem help = new JMenuItem("Help");
public static JList usersOnline = new JList();
public static JScrollPane userPane = new JScrollPane(usersOnline);
public static void main(String[] args) {
buildMainWindow();
initialize();
addListeners();
popup.show(mainFrame, 0, 0); //forcefully popup
}
public static void addListeners(){
mainFrame.addMouseListener(new MouseHandler());
send.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
actionSend();
}
});
connect.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
actionConnect();
}
});
disconnect.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
actionDisconnect();
}
});
help.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
actionHelp();
}
});
}
private static class MouseHandler extends MouseAdapter{
@Override
public void mouseClicked(MouseEvent e){
if(e.isPopupTrigger()){
popup.show(mainFrame, e.getX(), e.getY());
}
}
}
addListeners()
private static A_Chat_Client chatClient;
public static String userName = "Anonymous";
//------------------------------------------------------------------------------
public static JFrame mainFrame = new JFrame();
public static JTextArea textArea = new JTextArea(30,30);
public static JScrollPane pane = new JScrollPane(textArea);
public static JTextField message = new JTextField(10);
public static JButton send = new JButton("Send");
public static JPopupMenu popup = new JPopupMenu();
public static JMenuItem connect = new JMenuItem("Connect");
public static JMenuItem disconnect = new JMenuItem("Disconnect");
public static JMenuItem help = new JMenuItem("Help");
public static JList usersOnline = new JList();
public static JScrollPane userPane = new JScrollPane(usersOnline);
public static void main(String[] args) {
buildMainWindow();
initialize();
addListeners();
popup.show(mainFrame, 0, 0); //forcefully popup
}
public static void addListeners(){
mainFrame.addMouseListener(new MouseHandler());
send.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
actionSend();
}
});
connect.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
actionConnect();
}
});
disconnect.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
actionDisconnect();
}
});
help.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
actionHelp();
}
});
}
private static class MouseHandler extends MouseAdapter{
@Override
public void mouseClicked(MouseEvent e){
if(e.isPopupTrigger()){
popup.show(mainFrame, e.getX(), e.getY());
}
}
}
类鼠标手柄
private static A_Chat_Client chatClient;
public static String userName = "Anonymous";
//------------------------------------------------------------------------------
public static JFrame mainFrame = new JFrame();
public static JTextArea textArea = new JTextArea(30,30);
public static JScrollPane pane = new JScrollPane(textArea);
public static JTextField message = new JTextField(10);
public static JButton send = new JButton("Send");
public static JPopupMenu popup = new JPopupMenu();
public static JMenuItem connect = new JMenuItem("Connect");
public static JMenuItem disconnect = new JMenuItem("Disconnect");
public static JMenuItem help = new JMenuItem("Help");
public static JList usersOnline = new JList();
public static JScrollPane userPane = new JScrollPane(usersOnline);
public static void main(String[] args) {
buildMainWindow();
initialize();
addListeners();
popup.show(mainFrame, 0, 0); //forcefully popup
}
public static void addListeners(){
mainFrame.addMouseListener(new MouseHandler());
send.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
actionSend();
}
});
connect.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
actionConnect();
}
});
disconnect.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
actionDisconnect();
}
});
help.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
actionHelp();
}
});
}
private static class MouseHandler extends MouseAdapter{
@Override
public void mouseClicked(MouseEvent e){
if(e.isPopupTrigger()){
popup.show(mainFrame, e.getX(), e.getY());
}
}
}
可以使用将附加到主事件队列
然后,您需要检查您正在接收的事件类型,并检查它是否为弹出事件
public class TestGlobalPopup {
public static void main(String[] args) {
new TestGlobalPopup();
}
public TestGlobalPopup() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
@Override
public void eventDispatched(AWTEvent event) {
if (event instanceof MouseEvent) {
MouseEvent me = (MouseEvent) event;
if (me.isPopupTrigger()) {
Component component = me.getComponent();
JPopupMenu popup = new JPopupMenu();
popup.add(new JLabel("Clicked on " + component.getClass().getName()));
popup.show(component, me.getX(), me.getY());
}
}
}
}, AWTEvent.MOUSE_EVENT_MASK);
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
add(new JLabel("Label: "), gbc);
gbc.gridx++;
add(new JTextField(10), gbc);
gbc.gridy++;
gbc.gridx = 0;
gbc.gridwidth = 2;
add(new JScrollPane(new JTextArea(5, 20)), gbc);
}
}
}
请出示一些代码,以便我们了解问题所在。@Doorknob在那里添加了代码,仅相关部分:)@MadProgrammer谢谢,但我的代码有什么问题吗?:)当我点击强制弹出的弹出窗口时,所有事件都被正确传达,但右键点击不起作用:)@littlechild点击、按下或释放时可能会发生弹出事件,具体取决于platform@MadProgrammer因此,根据经验,我还必须在
mousePressed()中实现相同的功能
跨平台兼容性?@littlechild鼠标按下、鼠标滑动和鼠标滑动