如何访问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,
答案 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。