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));
}
}
TA貢獻1777條經驗 獲得超10個贊
該dispose()方法實際上破壞了窗口,因此,frame1 應該變成null,并且您很可能會遇到空指針異常。
考慮調用frame1.setVisible(false)andframe2.setVisible(false)而不是該dispose()方法。
另外,您可以考慮使用分離鼠標偵聽器對象,而不是在單擊組件 1 時向組件 2 添加新的鼠標偵聽器。
添加回答
舉報
