我在日食中建立了一个可以在打开时进入全屏的摇摆窗口,但是无法切换全屏。
我尝试过在线研究(我知道类似的主题),但在尝试解决方案时遇到了问题。
这是我的JFrame
private void initialize()
{
frmCpStats = new JFrame();
frmCpStats.setTitle("CP Stats");
Toolkit tk = Toolkit.getDefaultToolkit();
int x =((int) tk.getScreenSize().getWidth());
int y =((int) tk.getScreenSize().getHeight());
frmCpStats.setExtendedState(JFrame.MAXIMIZED_BOTH);
frmCpStats.setSize(x, y);
frmCpStats.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmCpStats.setUndecorated(true);
KeyStroke k = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
int w = frmCpStats.WHEN_IN_FOCUSED_WINDOW;
dialog.getRootPane().registerKeyboardAction(e -> window.dispose(), k, w);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
StatsDisplay window = new StatsDisplay();
window.frmCpStats.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public StatsDisplay() {
initialize();
}
Eclipse使用Cannot be resolved or is not a field
和VK_ESCAPE
识别错误WHEN_IN_FOCUSED_WINDOW
,并使用dialog cannot be resolved
识别dialog
。我对摆动的实际工作方式并不熟悉,所以我不知道为什么会出现这些错误。
答案 0 :(得分:0)
你快到了。 Key Bindings适用于这种情况。请注意我的MCVE:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.*;
public class StatsDisplay {
private JFrame frmCpStats;
private void initialize() {
frmCpStats = new JFrame();
JPanel contentPane = (JPanel) frmCpStats.getContentPane();
int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
InputMap inputMap = contentPane.getInputMap(condition);
ActionMap actionMap = contentPane.getActionMap();
KeyStroke escapeStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
inputMap.put(escapeStroke, escapeStroke.toString());
actionMap.put(escapeStroke.toString(), new AbstractAction() {
@Override
public void actionPerformed(ActionEvent arg0) {
frmCpStats.dispose();
}
});
frmCpStats.setTitle("CP Stats");
Toolkit tk = Toolkit.getDefaultToolkit();
int x = ((int) tk.getScreenSize().getWidth());
int y = ((int) tk.getScreenSize().getHeight());
frmCpStats.setExtendedState(JFrame.MAXIMIZED_BOTH);
frmCpStats.setSize(x, y);
frmCpStats.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmCpStats.setUndecorated(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
StatsDisplay window = new StatsDisplay();
window.frmCpStats.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public StatsDisplay() {
initialize();
}
}
好奇你为什么在你正在试图处理的frmCpStats JFrame时调用window.dispose()
?
答案 1 :(得分:-1)
删除这些代码行
frmCpStats.setExtendedState(JFrame.MAXIMIZED_BOTH);
frmCpStats.setUndecorated(true);