我正在尝试创建一个记住窗口位置,大小以及是否最大化的JFrame。对于windowClosing事件使用WindowListener并将其边界保存到Preferences应该很简单。
为了使其工作(如下所示),我需要在最大化时(MAXIMIZED_BOTH ExtendedState)提取JFrame的正常(NORMAL ExtendedState)边界。这是可能吗?考虑到正常边界存储在某处以便它可以恢复。
//...
addWindowListener(new WindowListener() {
///...
@Override
public void windowClosing(WindowEvent e) {
prefs.putBoolean("win_max",win_max);
if(winmax)
{
//win_x=?
//win_y=?
//win_w=?
//win_h=?
}
else
{
win_x=getX();
win_y=getY();
win_w=getWidth();
win_h=getHeight();
}
prefs.putInt("win_x",win_x);
prefs.putInt("win_y",win_y);
prefs.putInt("win_w",win_w);
prefs.putInt("win_h",win_h);
}
});
//...
如果这是一个非常简单的问题,我道歉。任何帮助表示赞赏。
答案 0 :(得分:3)
这就是我的所作所为。模型实例保存了帧原点,帧边界和帧状态。
protected int state;
protected Point frameOrigin;
protected Rectangle frameBounds;
这是我为捕获帧数据更改而创建的组件侦听器。
frame.addComponentListener(new ComponentAdapter() {
@Override
public void componentMoved(ComponentEvent event) {
if (isMaximized()) {
model.setFrameOrigin(frame.getLocation());
} else {
model.setFrameBounds(frame.getBounds());
}
model.setFrameState(frame.getExtendedState());
}
@Override
public void componentResized(ComponentEvent event) {
model.setFrameState(frame.getExtendedState());
}
});
这是我打包帧以将帧设置为上次使用状态后必须执行的代码。
frame.pack();
if (options.getFrameBounds().getWidth() > 0) {
frame.setExtendedState(options.getState());
if (isMaximized()) {
frame.setLocation(options.getFrameOrigin());
} else {
frame.setBounds(options.getFrameBounds());
}
}
model.setFrameState(frame.getExtendedState());
model.setFrameBounds(frame.getBounds());
model.setFrameOrigin(frame.getLocation());
这是isMaximized
方法。
public boolean isMaximized() {
return (frame.getExtendedState() & JFrame.MAXIMIZED_BOTH)
== JFrame.MAXIMIZED_BOTH;
}
我将帧数据保存在属性文件中,但您可以按照自己的意愿保存和恢复帧数据。
答案 1 :(得分:1)
在您的课程中,从var results = samples.GroupBy(sample => { Year = _dt.Year, Month = _dt.Month DValue = _d})
.Select(gr => new {
Year = gr.Key.Year,
Month = gr.Key.Month,
DValue = gr.Key.DValue,
AverageValue = gr.Select(item => item.Value).Average()
});
派生,添加以下代码......
JFrame