单击 JLabel 打开一个新框架

Posted

技术标签:

【中文标题】单击 JLabel 打开一个新框架【英文标题】:Clicking a JLabel to open a new frame 【发布时间】:2013-01-22 00:09:01 【问题描述】:

我正在为我正在编程的游戏设计图形,我想知道是否有一种简单的方法可以在单击 JLabel 时打开框架?

有简单的代码吗?

【问题讨论】:

您可以使用MouseListener 界面并在mouseClicked(MouseEvent e) 中使用e.getSource() ==your label 检查点击来源并在那里创建新框架。 它们实际上是没有背景和边框的按钮。标签不是为该用例设计的,并且将更难适应您游戏的未来需求。标签甚至没有焦点。如果您关心的话,它们的可访问性支持不适合您的用例。最后,作为旁注,我不会在图纸上绘制文本,特别是如果其中一部分与文本颜色相同。我认为开发自定义外观和感觉会比在游戏的许多部分重复使用标签技巧更容易。 ...此处应考虑建议的卡片布局 【参考方案1】:

不要创建一个新的JFrame,永远不要用一堆JFrame,必须用OutOfMemoryException计算,因为这个Object永远不会被GC'ed,

多个视图使用CardLayout

查看The Use of Multiple JFrames, Good/Bad Practice?@Andrew Thompson的回答

【讨论】:

【参考方案2】:
1:- Implement your class containing the JLabel with MouseListener interface
2:- add MouseListener to your JLabel 
3:-Override mouseClicked Event in your class
4:- In mouseClicked Even't body add your code to open a new JFrame/Frame .

【讨论】:

【参考方案3】:

创建一个标签并在其中添加点击事件。

类似这样的:

JLabel click=new JLabel("Click me");

 click.addMouseListener(new MouseAdapter() 
        public void mouseClicked(MouseEvent e) 
           JFrame jf=new JFrame("new one");
        jf.setBackground(Color.BLACK);
        jf.setSize(new Dimension(200,70));
        jf.setVisible(true);
        jf.setDefaultCloseOperation(EXIT_ON_CLOSE);
        
    );

【讨论】:

【参考方案4】:

你可以这样做:

label.addMouseListener(new MouseAdapter()      

        public void mouseClicked(MouseEvent e)   
           
              JPanel j = new JPanel();
              frame.setContentPane(j);
           
);

【讨论】:

【参考方案5】:

实现MouseListener接口并使用mouseClicked方法来处理JLabel上的点击。

label.addMouseListener(new MouseAdapter()  
  
    public void mouseClicked(MouseEvent e)  
      
       // you can open a new frame here as
       // i have assumed you have declared "frame" as instance variable
       frame = new JFrame("new frame");
       frame.setVisible(true);

      
); 

【讨论】:

以上是关于单击 JLabel 打开一个新框架的主要内容,如果未能解决你的问题,请参考以下文章

通过单击按钮循环浏览 Jlabel 的图像时的 for 循环问题

将 jLabel 内容导出/保存到新文件夹

如何更新JLabel文本?

JLabel 文本在窄列中而不是展开

组布局中的 JLabel - 冻结大小

如何将数据库中的列值获取到jLabel