Como determinar o tamanho das bordas e da barra de título de uma janela?
Para determinarmos o tamanho das bordas e barra de título de uma janela qualquer de uma aplicação devemos utilizar o método getInsets() que retorna um objeto java.awt.Insets tal como abaixo:
Insets i = getInsets(); // no local onde deseja obter tais medidas
Fazendo-se isto podemos utilizar os campos públicos top, bottom, left e right do objeto Insets retornado que contêm as medidas em pixels das bordas e barra de título:
Assim, a largura e a altura da área útil da uma janela podem ser determinadas utilizando-se também as medidas totais da janela retornadas num objeto java.awt.Dimension através da chamada do método getSize():
Dimension d = getSize(); // obtêm tamanho da janela Insets i = getInsets(); int larguraJanela = d.width - i.left - i.right; int alturaJanela = d.height - i.top - i.bottom;
Algumas observações importantes:
g.translate(i.left, i.top);
Segue um pequeno exemplo onde uma janela exibe sua altura e largura útil.
// FrameSize.java import java.awt.*; public class FrameSize extends Frame { public FrameSize() { super("FrameSize"); setSize(200, 150); addWindowListener(new CloseAndExit()); } public void paint(Graphics g) { Dimension d = getSize(); // obtêm tamanho da janela Insets i = getInsets(); int larguraJanela = d.width - i.left - i.right; int alturaJanela = d.height - i.top - i.bottom; g.translate(i.left, i.top); g.setColor(Color.red); g.drawLine(larguraJanela/2, 0, larguraJanela/2, alturaJanela); g.drawString("Altura "+alturaJanela, 10+larguraJanela/2, alturaJanela/4); g.setColor(Color.blue); g.drawLine(0, alturaJanela/2, larguraJanela, alturaJanela/2); g.drawString("Largura "+larguraJanela, 10, 20+alturaJanela/2); } public static final void main(String args[]) { (new FrameSize()).show(); } }