2013-11-16 7 views
0

Я пытался установить JFrame на верхнюю часть экрана в течение длительного времени. Я использовал setLocation(), setBounds() и несколько других методов безрезультатно. Все, что я хочу, это прямоугольник, который блокирует верхнюю панель экрана (где находятся кнопки минимизации и выхода). Вот мой код, я буду признателен за любую помощь!Как установить этот JFrame в верхней части экрана?

import java.awt.GridBagLayout; 
import javax.swing.JOptionPane; 
import javax.swing.WindowConstants; 
import javax.swing.SwingUtilities; 

public class Annoy2 extends javax.swing.JFrame { 
    private int width; 
    private int height; 
    private boolean t = true; 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       Annoy2 inst = new Annoy2(); 
       inst.setLocationRelativeTo(null); 
       inst.setVisible(true); 
      } 
     }); 
    } 

    public Annoy2() { 
     super(); 
     getDimensions(); 
     initGUI(); 
    } 

    private void initGUI() { 
     try { 
      GridBagLayout thisLayout = new GridBagLayout(); 
      setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 
      getContentPane().setLayout(null); 
      { 
      } 
      setUndecorated(t); 
      setAlwaysOnTop(true); 
      this.setResizable(false); 
      pack(); 
      setSize(width, height); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private void getDimensions() { 
     width = Integer.parseInt(JOptionPane.showInputDialog(null, "Width: ", Math.round(java.awt.Toolkit.getDefaultToolkit().getScreenSize().getWidth()))); 
     height = Integer.parseInt(JOptionPane.showInputDialog(null, "Height: ", 30)); 
    } 

} 
+0

'setLocationRelativeTo (null)' центрирует окно на экране. Почему вы используете его, если хотите, чтобы окно находилось поверх рабочего стола? –

+0

* «Все, что мне нужно, это прямоугольник, который блокирует верхнюю панель экрана (где кнопки спуска и выключения)» * Вместо этого используйте незадекларированный 'JFrame' или' JWindow'. –

ответ

1

Удалить inst.setLocationRelativeTo(null);, что заставляет ваше окно центрироваться на экране.

Чтобы разместить окно в верхней части экрана, используйте setBounds()initGUI():.

setBounds(0, 0, width, height); 

И вы не должны подкласс JFrame для достижения этой цели

JFrame block = new JFrame(); 
block.setUndecorated(true); 
block.setBounds(0, 0, width, height); 
block.setVisible(true); 
+0

Спасибо! Это устранило мою проблему. Я не понял, что у меня есть inst.setLocationRelativeTo (null); там. – Ben

1

Я пытался установить JFrame в верхнюю часть экрана для длинного времени

use setAlwaysOnTop(true): Устанавливает, должно ли это окно всегда находиться над другими окнами. Если имеется несколько окон, расположенных всегда сверху, их относительный порядок равен неопределенным и зависит от платформы. То есть, если какое-то другое окно уже всегда на вершине, то relative order между этими окнами неуказано (зависит от платформы). Никакое окно не может быть перевернуто над окном всегда сверху, за исключением, может быть, еще одного окна всегда сверху.

Все, что я хочу, это прямоугольник, который блокирует верхнюю панель экрана (где кнопки спуска и выключения).

setUndecorated(true): Этот метод можно вызвать только в том случае, если кадр не отображается. То есть вам нужно будет вызвать эту функцию на JFrame, прежде чем вы вызовете setVisible(true) на нем