亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

AddMouseListener 到另一個 AddMouseListener

AddMouseListener 到另一個 AddMouseListener

慕慕森 2023-08-04 19:16:42
我在調用兩個鼠標事件(一個進入另一個)時遇到問題。我想當用戶單擊第一幀 (frame1) 中的組件 (component1) 時顯示第二幀 (frame2),然后如果單擊 component2,則返回到上一幀 (frame1)。所有這些都使用一個文件。這是我寫的:component1.addMouseListener(this on);@Overridepublic void mouseClicked(MouseEvent e) {    if(e.getSource() == component1)    {        frame1.dispose();        frame2.setVisible(true);        component2.addMouseListener(new MouseAdapter() {            public void mouseClicked() {            frame2.dispose();            frame1.setVisible(true);            }         });    }}第一個事件有效,但第二個事件無效。謝謝您的回答。
查看完整描述

2 回答

?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

這是一個功能齊全的示例,其中有 2 個框架,每個框架都有一個標簽,單擊該標簽時,會隱藏一個框架并顯示另一個框架,這是在 Java 10 中完成的??纯催@是否適合您,并解釋您的代碼與此有何不同。請注意,我只創建了 2 個 MouseListener,每一幀一個。我沒有在其他 MouseListener 的代碼中重新創建 MouseListener。另外,我沒有處理框架,這可能會導致問題。如果我已經處理了frame1,我很可能必須創建一個新的JFrame并將其分配給frame1實例成員。


請注意,您必須單擊標簽本身,而不是框架上的其他位置。


import javax.swing.*;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;


public class TwoFrames {


    public static void main(String[] args) {

        TwoFrames twoFrames = new TwoFrames();

        twoFrames.start();

    }


    private void start() {

        setupFrames();

    }


    JFrame frame1 = new JFrame("Frame 1"),

           frame2 = new JFrame("Frame 2");


    JLabel component1 = new JLabel("Click me 1"),

           component2 = new JLabel("Click me 2");


    private void setupFrames() {

        frame1.getContentPane().add(component1);

        frame2.getContentPane().add(component2);


        component1.setOpaque(true);

        component2.setOpaque(true);


        component1.addMouseListener(new MouseAdapter() {

            @Override

            public void mouseClicked(MouseEvent e) {

                frame1.setVisible(false);

                frame2.setVisible(true);

            }

        });


        component2.addMouseListener(new MouseAdapter() {

            @Override

            public void mouseClicked(MouseEvent e) {

                frame2.setVisible(false);

                frame1.setVisible(true);

            }

        });


        frame1.setSize(300, 300);

        frame2.setSize(400, 400);


        frame1.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        frame2.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);


        SwingUtilities.invokeLater(() -> frame1.setVisible(true));

    }

}


查看完整回答
反對 回復 2023-08-04
?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

dispose()方法實際上破壞了窗口,因此,frame1 應該變成null,并且您很可能會遇到空指針異常。

考慮調用frame1.setVisible(false)andframe2.setVisible(false)而不是該dispose()方法。

另外,您可以考慮使用分離鼠標偵聽器對象,而不是在單擊組件 1 時向組件 2 添加新的鼠標偵聽器。


查看完整回答
反對 回復 2023-08-04
  • 2 回答
  • 0 關注
  • 278 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號