在Java中,我带了一个JFrame
,里面有一个JButton
,
当帧开始时,它通常以边框开始,
但我需要的是,当我点击按钮时,它会变成普通形式 (表示无标题/没有边框)再次当我点击我的按钮时,它再次显示边框(带标题),但它不像我上面写的那样简单。
我正在使用按钮ActionListener
事件并在其中提到代码如下:
if (frame.isUndecorated())
frame.setUndecorated(true);
else
frame.setUndecorated(false);
但我的框架边框状态没有改变,但抛出太多例外。
答案 0 :(得分:3)
您无法更改已显示的窗口的边框状态(附加到本地对等方)
通常情况下,我会建议处理旧窗口并重新创建,但是你可以使用一些小技巧......
将框架的defaultCloseOperation
设置为JFrame.DISPOSE_ON_CLOSE
,您可以在框架上调用dispose
,它将释放所有原生资源,允许更改边框状态并重新显示,例如......
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JButton btn = new JButton("Change");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFrame frame = (JFrame) SwingUtilities.windowForComponent((JButton)e.getSource());
frame.dispose();
if (frame.isUndecorated()) {
frame.setUndecorated(false);
} else {
frame.setUndecorated(true);
}
frame.setVisible(true);
}
});
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(btn);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}