我试图在未经修饰的alwaysOnTop框架中创建一种工具栏。因此,我希望我的框架位于我的主框架之上,而不是其他程序的框架之上。我尝试了这段代码:
public class Test {
private static JFrame mainFrame;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
mainFrame = new JFrame("test");
mainFrame.setSize(800,600);
mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
mainFrame.setVisible(true);
A a = new A();
}
});
}
public static class A extends JDialog {
public A() {
super(mainFrame);
setAlwaysOnTop(true);
setFocusable(false);
setSize(80,60);
setVisible(true);
}
}
}
但是,尽管使用了JDialog并规定了所有者,但框架仍然停留在其他应用程序的顶部(至少在Ubuntu上。也许结果与其他OS不同)?
编辑 :好的,我为对话框尝试了以下代码:
public static class A extends JDialog {
public A(String name) {
super(mainFrame, name);
setAlwaysOnTop(true);
setFocusable(false);
setSize(80, 60);
setVisible(true);
mainFrame.addWindowListener(new WindowAdapter() {
@Override
public void windowActivated(WindowEvent e) {
A.this.setAlwaysOnTop(true);
}
@Override
public void windowDeactivated(WindowEvent e) {
// A.this.setAlwaysOnTop(false);
A.this.toBack();
}
});
}
}
现在的问题是,当主窗口失去焦点时,对话框会窃取焦点,而我不明白为什么。例如,我运行我的应用程序,尝试切换到Firefox,出现Firefox并覆盖了mainFrame,但是A对话框获得了焦点并停留在屏幕上。现在,如果我再次选择Firefox,该对话框将最终正确消失。您能解释一下为什么对话框引起焦点吗?
谢谢
好的,我找到了一个解决方案(不知道这是否是THE解决方案,但是它正在工作,所以…)
我发现了setFocusableWindowState(),它非常适合工具栏。顺便说一句,我不知道我以前的setFocusable(false)是否有任何作用。
下一个问题是此代码使焦点变得非常奇怪:如果我从MyApp切换到Firefox,则会发生以下情况:
focus : MyApp -> Firefox
execution of MyDialog.toFront()
focus : Firefox -> MyDialog
MyDialog not focusable !
focus : MyDialog -> MyApp !!!
结果:什么都没有改变!
因此,我终于有了窍门:在MyDialog.toFront()之后,您将焦点返回给了先前的所有者。我发现没有错误的唯一方法是:mainFrame.toBack()
最终代码:
public class Test {
private static JFrame mainFrame;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
mainFrame = new JFrame("test");
mainFrame.setSize(800,600);
mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
mainFrame.setVisible(true);
A a = new A();
}
});
}
public static class A extends JDialog {
public A() {
super(mainFrame);
setAlwaysOnTop(true);
setFocusableWindowState(false);
setSize(80,60);
setVisible(true);
mainFrame.addWindowListener(new WindowAdapter() {
@Override
public void windowActivated(WindowEvent e) {
A.this.setAlwaysOnTop(true);
A.this.toFront();
}
@Override
public void windowDeactivated(WindowEvent e) {
A.this.setAlwaysOnTop(false);
}
});
}
}
}
1. 逻辑层 1.1注册小程序 App(Object) App() 函数用来注册一个小程序。接受一个 Object 参数, App() 必须在 app.js 中调用,且只能调用一次。 Object参数说明 属性 类型 描述 触发时机 onLaunch Function 生命周期回调—监听小程序初始化 小程序初始化完成时触发(全局只触发一次) onShow Function 生命周期回调—监听小程
问题内容: 我如何避免滚动页面的其余部分?我考虑过使用和,只是想知道是否有更简单,更用户友好的方法,这样做的最佳实践是什么? 问题答案: 使用的包含您的头,喜欢的东西 在此示例中,当开始时位于下方100px处,但随着用户滚动,它保持原位。当然,不用说,您需要确保有背景,以便当两个s重叠时,其内容实际上是可见的。
问题内容: 我有一个在控制台窗口中运行的简单Python脚本。 如何确保控制台窗口始终位于顶部,并在可能时调整其大小? 问题答案: 要在cmd窗口中执行此操作,您可能必须调用许多win32调用。 使用win32gui.EnumWindows枚举所有窗口以获取窗口句柄 找到与您的程序运行方式匹配的“窗口标题”。例如,在我的系统上双击.py文件,窗口标题为“ C:\ Python26 \ python
问题内容: 我已经使用Hibernate多年了,从来没有遇到过任何问题,但是刚刚意识到我的大部分工作都涉及CRUD方法,在这种方法中,我需要随意保存和修改数据。 问题是有些人想要制作2个单独的应用程序,一个要批量插入,另一个要对插入的数据执行搜索。 由于这种情况下的持久性有点用处,因此团队希望不使用Hibernate,而是在插入应用程序上使用原始查询,而在查询应用程序上使用jOOQ之类的东西。 那
在用400k记录查询MongoDb时,我得到了< code>OutOfMemoryError。我收集了大约40万条用户记录。当我试图检索所有用户(在弹性搜索中转储)时,我得到了< code>OutOfMemoryError错误。 我已经浏览过这个链接,在application.config中添加了jvm.memory=-Xms64m -Xmx1024m,但还是一样的异常。 这是我的堆栈跟踪 -
问题内容: 我正在尝试在play框架的scalaquery中实现“基于请求”的会话。我使用scalaquery创建了一个会话,并尝试将其存储在当前的http上下文中,如下所示: 然后将动作包装在控制器中,例如: 但是,它在以下行中崩溃: 那么,为什么上下文不可用?该代码直接由框架调用,因此不应在执行该代码时设置上下文吗?还是我使用错误的方式访问上下文? 编辑:“会话”的类型为。我之所以要在Http