获取JDialog标题栏的高度?

时间:2011-11-01 16:04:37

标签: java swing jdialog

如何获得JDialog标题栏的高度?

我尝试使用getInsets().top,但它会返回0

4 个答案:

答案 0 :(得分:1)

我不知道,如果你使用OS自己的窗口管理器,这可能是不可能的。原因是标题栏是在Java之外绘制的。如果您确实需要此信息,则可能需要使用JNI。

但是,如果您使用内部框架,则可以执行以下操作

JInternalFrame mydialog = new JInternalFrame();
((BasicInternalFrameUI)mydialog.getUI()).getNorthPane().getHeight();

但更重要的问题是,你为什么想知道?窗口系统的想法是程序员可以从窗口环境中抽象出他的应用程序的内容。这样,窗口外观可以由用户动态自定义,在所有应用程序中看起来均匀,并且不会干扰应用程序的正常运行。

操作系统和应用程序之间的这种界面需要一个完整的消息传递API来通知窗口装饰何时更改等。

答案 1 :(得分:0)

尝试一下:

Container c = this.getContentPane();
Point pt = c.getLocation();
pt = SwingUtilities.convertPoint(c, pt, this);

pt变量现在保存内容窗格相对于JDialog原点的位置。因此,pt.x是距离左边缘的距离,pt.y是距离顶部的距离。

注意事项:

  • 这假设没有JMenuBar。如果您有,请使用JMenuBar的位置。
  • 这将包括添加到contentPane或layerdPane的任何边框。你需要减去那些。

答案 2 :(得分:0)

kofucii,您走在正确的道路上 - 像您在示例中所做的那样使用dialog getInsets().top。 我猜你得到0可能是因为JDialog对象是不可见的。否则'top'值应为~36 ......

这是一个孤立的案例:

package dejan.various;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;

/**
 *
 * @author dejan
 */
public class TestDialog extends JDialog implements ActionListener {
    private javax.swing.JButton testButton;

    public TestDialog() {
        setPreferredSize(new Dimension(640,480));
        getContentPane().setLayout(new BorderLayout());
        testButton = new JButton("Click me");
        testButton.addActionListener(this);
        getContentPane().add(testButton, BorderLayout.SOUTH);
        pack();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Insets insets = this.getInsets();
        System.out.println(insets.top);
        System.out.println(insets.left);
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new TestDialog().setVisible(true);
            }
        });
    }

} // TestDialog class

在STDOUT上我得到:

36
9

答案 3 :(得分:0)

要获得插图,您需要确保您的JDialog可见。如果您在屏幕上显示之前尝试获取它,则会得到0。