我知道如何在jFrame中设置调整大小,这是
setResizable(false);
但我要做的是防止用户使框架尺寸大于特定的宽度和高度。 (调整到较小的窗口大小很好) 我怎么能这样做?
编辑: 试过这个,不要这样做:
setSize(700,700);
setVisible(true);
setLocation(200,200);
setMaximumSize(new Dimension(800, 800));
答案 0 :(得分:3)
您可以使用ComponentListener
并覆盖其componentResized()
方法。虽然不是完美的解决方案。但这可以让你实现你想要的。
但是GUI会不停地抽搐...我想知道是否还有其他更好的解决方案。
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
public class MainClass1 {
public static void main(String[] args)
{
final JFrame frame = new JFrame("My Frame");
frame.setMaximumSize(new Dimension(350,250));
frame.addComponentListener( new ComponentAdapter()
{
public void componentResized(ComponentEvent evt)
{
Dimension size = frame.getSize();
Dimension max = frame.getMaximumSize();
if (size.getWidth() > max.getWidth())
{
frame.setSize((int)max.getWidth() ,(int) size.getHeight());
}
if (size.getHeight() > max.getHeight())
{
frame.setSize((int)size.getWidth() ,(int) max.getHeight());
}
}
});
frame.setSize(200,100);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
答案 1 :(得分:2)
您可以使用
setMaximumSize(new Dimension(100,100));
或
setMinimumSize(new Dimension(100,100));
由于Swing中已知Bug,因此使用此方法设置MaxSize:
@Override
public void paint(Graphics g) {
Dimension d = getSize();
Dimension m = getMaximumSize();
boolean resize = d.width > m.width || d.height > m.height;
d.width = Math.min(m.width, d.width);
d.height = Math.min(m.height, d.height);
if (resize) {
Point p = getLocation();
setVisible(false);
setSize(d);
setLocation(p);
setVisible(true);
}
super.paint(g);
}
覆盖JFrame的paint-method。
那是你想做的吗?
答案 2 :(得分:2)
创建ComponentListener并在ComponentListener.componentResized()中添加所需约束的逻辑。
答案 3 :(得分:1)
您可以实现组件侦听器以检查帧是否已在指定范围之外调整大小:
addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
if (getSize().width > 400 || getSize().height > 400){
setVisible(false);
setSize(400, 400);
setVisible(true);
}
}
});
答案 4 :(得分:1)
获取动作侦听器方法,然后输入
xMax=700; yMax=700;
if((xDim>=xMax)&&(xDim>=xMax))
{
setSize(xMax,yMax);
}
else
{
if(xDim>=xMax)
{
setSize(xMax,yDim);
}
if(yDim>=yMax)
{
setSize(xDim,yMax);
}
}