【问题标题】:How to make my JFrame on the top op the screen?如何让我的 JFrame 在屏幕顶部?
【发布时间】:2014-09-15 13:24:42
【问题描述】:

单击按钮后,我将启动 Window2。它不是立即启动,而是在 3 秒后启动。我想要的是在屏幕顶部显示它。如果 Window1 仍在屏幕上,它可以工作,但如果我最小化 Window1,它会失败。

代码在这里:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TopTest {
    public static void main(String[] args) {
        TopTest test = new TopTest();
        test.createUI();
    }

    public void createUI(){
        JFrame frame = new JFrame("Window1");
        JPanel panel = new JPanel();
        JButton button = new JButton("show");
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                Window window = new Window();
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                window.createUI();
            }
        });
        panel.add(button);
        frame.add(panel,BorderLayout.CENTER);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    class Window {
        public void createUI(){
            JFrame frame = new JFrame("Window2");
            frame.setExtendedState(Frame.MAXIMIZED_BOTH);
            frame.add(new MainPanel());
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }

        @SuppressWarnings("serial")
        class MainPanel extends JPanel{
            @Override
            public Dimension getPreferredSize() {
                // TODO Auto-generated method stub
                return new Dimension(800,600);
            }

            protected void paintComponent(Graphics g){
                g.setFont(new Font("Arial", Font.BOLD, 50));
                g.drawString("I am Window2", 200, 200);
            }
        }
    }
}

提前感谢您的帮助。

【问题讨论】:

    标签: java swing jframe awt


    【解决方案1】:

    将此行添加到createGUI 方法

    frame.setAlwaysOnTop(true);
    

    【讨论】:

    • @upma 1. class Window { 应该是 class MyWindow {(可能与 java.awt.Window 冲突) 2. JFrame frame = new JFrame("Window2"); 应该是 JDialog frame = new JDialog("Window2"); (然后工作 AlwaysOnTop 或 Modality) 3. Thread.sleep (3000);应该是 Swing Timer(不阻止重绘)
    • @mKorbel。你太好了,我会注意你提出的建议。非常感谢。
    • @upma :-) 但你完全忽略了 MadProgrammer 在这篇文章中的回答(昨天的问题)的输出
    • @mKorbel 。你说stackoverflow.com/q/24904006/3378204 吗?是的,他创建渲染文本的方法很棒。我只是想展示一个尽可能简单的演示,这样我就没有在这篇文章中使用它。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多