获取当前的班级名称w.r.t. JFrame的对象

时间:2014-11-20 15:27:25

标签: java swing jframe

如何访问JFrame对象

的类名

我的源代码如下 -

import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class TestClose extends methodClass implements WindowListener {

    private JFrame jfrm;

    public static void main(String[] args) {
        new TestClose();
    }

    public TestClose() {
        jfrm = new JFrame();
        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jfrm.setBounds(100, 100, 450, 300);
        jfrm.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        jfrm.addWindowListener(this);
        jfrm.setVisible(true);
        jfrm.getClass();
        //JOptionPane.showMessageDialog(null, jfrm.getClass().getSimpleName());
    }

    @Override
    public void windowActivated(WindowEvent evt) {}
    @Override
    public void windowClosed(WindowEvent evt) {}

    @Override
    public void windowClosing(WindowEvent evt) {
        JFrame frame = (JFrame)evt.getSource();
        int optionChoosen = JOptionPane.showConfirmDialog(frame, 
                "Are you sure you want to exit?", "Exit Application", 
                JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
        if (optionChoosen == JOptionPane.YES_OPTION){
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }else if (optionChoosen == JOptionPane.NO_OPTION){
            frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        }
    }

    @Override
    public void windowDeactivated(WindowEvent evt) {}
    @Override
    public void windowDeiconified(WindowEvent evt) {}
    @Override
    public void windowIconified(WindowEvent evt) {}
    @Override
    public void windowOpened(WindowEvent evt) {}

}

我希望显示Class Name" TestClose"关于JFrame jfrm,

2 个答案:

答案 0 :(得分:3)

如果我错了,请纠正我,但您似乎要求提供JFrame启动的类的名称,但就我理解的情况而言,此信息不会自动成为JFrame的一部分。但话说回来,如果需要,可以将任何属性与任何通过putClientProperty(Object key, Object value) JComponent方法从JComponent派生的Swing组件的键值关联关联起来。不幸的是,这不包括JFrame,因为它不是从JComponent派生的,但确实包含JFrame的contentPane。因此,如果您想将JFrame(实际上是其contentPane)与调用类相关联,您可以执行以下操作:

class ClassThatLaunchesJFrame {
   public static final Object CLASS_NAME = "class name";
   private JFrame myFrame;

   public ClassThatLaunchesJFrame() {
      myFrame = new JFrame("My Frame");
      myFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

      // ***** key here
      ((JPanel) myFrame.getContentPane()).putClientProperty("class name", getClass().getSimpleName());

   }

然后在你的代码中,如果你想获得那个String并且引用了JFrame,你总是可以这样做:

  String className  = ((JPanel) myFrame.getContentPane()).getClientProperty("class name");

但是,对我来说更重要的是需要这些信息,因为我仍然怀疑你当前的问题实际上是一种XY Problem,我强烈怀疑如果你试图给予我们知道你的整体问题是什么,而不是你如何尝试用类名解决它,那么我几乎可以保证你有更好的解决方法。

答案 1 :(得分:1)

试试this.getClass().getSimpleName()。有关详细信息,请参阅this answer