找了一会儿,我找不到任何真正令人满意的解决方案。我认为对话框的大小调整是直接在操作系统级别处理的,因此您只能说您希望它完全不可调整大小或完全调整大小。
下面的代码总是会阻止对话框变大,但是当用户调整对话框大小时,对话框的边框仍然会移动。
radai 也建议的另一个选项是防止调整大小并使用鼠标侦听器设置自定义内容窗格,该侦听器侦听鼠标并相应地调整大小。但是,我认为这对用户来说并不是很自然(我认为您无法捕捉到对话框边框上的事件)。
import java.awt.Frame;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JDialog;
import javax.swing.JRootPane;
import javax.swing.SwingUtilities;
public class Test {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
init();
}
});
}
public static void init() {
final int staticHeight = 150;
final JDialog dialog = new JDialog((Frame) null) {
@Override
protected JRootPane createRootPane() {
JRootPane rp = new JRootPane() {
@Override
public void reshape(int x, int y, int w, int h) {
super.reshape(x, y, w, staticHeight);
}
};
rp.setOpaque(true);
return rp;
}
@Override
public void reshape(int x, int y, int width, int height) {
super.reshape(x, y, width, staticHeight);
}
};
dialog.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
dialog.setSize(dialog.getWidth(), staticHeight);
}
});
dialog.pack();
dialog.setVisible(true);
}
}