# Janela (informática)

Em informática, uma janela é uma área visual contendo algum tipo de interface do utilizador, permitindo a saída do sistema ou permitindo a entrada de dados. Uma interface gráfica do utilizador que use janelas como uma de suas principais metáforas é chamada sistema de janelas, como um gerenciador de janela.
As janelas são geralmente apresentadas como objetos bidimensionais e retangulares, organizados em uma área de trabalho. Normalmente um programa de computador assume a forma de uma janela para facilitar a assimilação pelo utilizador. Entretanto, o programa pode ser apresentado em mais de uma janela, ou até mesmo sem uma respectiva janela.
As janelas são widgets de diversas interfaces gráficas do utilizador, sobretudo as que implementam o conceito WIMP (window, icon, menu, pointer, do inglês, "janela, ícone, menu e ponteiro").

## História

O começo das pesquisas com janelas estão no Instituto de Pesquisa de Stanford, com Douglas Engelbart e sua invenção, o rato (mouse). Em 1964, o primeiro protótipo do rato foi usado em uma inteface gráfica do utilizador que continha uma janela. Posteriormente, a pesquisa das janelas foi continuada no Xerox Palo Alto Research Center (PARC) sob liderança do cientista da computação Alan Kay.
Introduzido no mercado em 1984, o Macintosh representou o primeiro uso comercial de janelas. Além de janelas, o sistema gráfico desse computador também apresentava ícones, menus em cascata e um rato. Ele foi resultado de uma visita Steve Jobs (co-fundador da Apple Inc.) ao PARC, que viu naquelas pesquisas de interfaces gráficas com janela um potencial comercial. Originalmente trabalhando junto com a PARC da Xerox, a Apple eventualmente rompeu e desenvolveu pesquisas por conta própria para o Apple Lisa, lançado em 1983.
Em novembro de 1983 a Microsoft anunciou que estava desenvolvendo um computador pessoal dotado de interface gráfica do utilizador. A versão inicial do sistema operacional foi o Windows 1.0, lançado em novembro de 1985. Esse sistema fazia uso de janelas, mas que não podiam se sobrepor, e também não havia ícones. Lançada dois anos após, a segunda versão do Windows incorporava ícones e janelas que podiam se sobrepor.
Outro sistema gráfico, o X Window System foi desenvolvido no início da década de 1980 no Instituto Tecnológico de Massachusetts (MIT). Ele se tornou posteriormente uma base para sistemas de janelas de praticamente todos os sistemas operacionais derivados do Unix.

## Propriedades

Dependendo do gerenciador de janela em uso, as janelas possuem um certo conjunto de propriedades.
Uma das propriedades mais comuns é a posição. Uma janela pode ser movida horizontalmente e verticalmente pela área de trabalho. Para mover uma janela, geralmente se clica, arrasta e larga sua barra de título (ver seção "Estrutura" abaixo). Utilizando-se uma determinada tecla de atalho também se pode mover a janela através das setas direcionais do teclado.
Outra propriedade é o tamanho, que pode ser redimensionado horizontalmente, verticalmente ou para ambos. Para redimensionar uma janela, geralmente se clica, arrasta e larga as bordas. Uma janela que ocupa todo o espaço disponibilizado pela área de trabalho encontra-se maximizada, e não pode ser movida.
A visibilidade é outra propriedade de janelas. Uma janela minimizada está oculta (invisível), e geralmente está acessível somente através duma ligação na barra de tarefas. O restauro da janela após minimização a torna novamente visível ao utilizador. Uma janela invisível não se encontra fechada: suas informações ainda residem no sistema a fim de serem usadas caso a janela seja restaurada.
Mesmo estando visível de acordo com a propriedade da visibilidade, quando uma janela é sobreposta por outra, a parte sobreposta não é visível ao utilizador. O critério de sobreposição geralmente é o foco: janelas acessadas mais recentemente estão "acima" das outras. Mais uma propriedade das janelas é estar sempre acima das outras, de forma que outra nunca a sobrepõe mesmo tendo sido acessada mais recentemente.
Entre diversas janelas em uma área de trabalho, no máximo uma delas possui o foco: a última janela acessada, chamada janela ativa. Focar uma janela sobreposta por outras a coloca "sobre" as outras, e a janela ativa passa a ler a entrada do rato e do teclado. Para focar uma janela geralmente clica-se nela ou seleciona-se a janela num menu de seleção de janelas, mas alguns gerenciadores de janelas também permitem o foco somente ao apontar em sua área visível. Uma janela restaurada é focada.
Outra propriedade das janelas é a modalidade. Uma janela modal não perde foco enquanto estiver aberta. Isto significa que, depois de aberta, o utilizador deve necessariamente interagir com ela a fim de fechá-la, para então voltar a usar o sistema. A modalidade pode dizer respeito somente a aplicação ou a todo o sistema. Quando diz respeito a aplicação, o sistema ainda pode ser focado, mas somente a janela modal pode ser focada entre as janelas da aplicação que a abriu. Um exemplo é um editor de texto, que geralmente abre uma janela modal somente a aplicação para confirmar o salvamento de um arquivo aberto. Enquanto a confirmação não é respondida, a janela do documento aberto não pode ser focada. Quando diz respeito a todo o sistema, nenhuma outra janela aberta no sistema pode ser focada, independente da aplicação. Um exemplo são operações críticas do sistema, como o pedido de acesso administrativo de alguns sistemas operacionais.
Uma propriedade recente de janelas é a transparência, disponibilizada em gerenciadores de janela com suporte a aceleração gráfica. A transparência permite a visualização da área de trabalho sendo sobreposta por uma janela. Por exemplo, mesmo uma janela ativa sobrepondo outra janela permite a visualização da parte sobreposta, mesmo que parcialmente. Outra propriedade relacionada é a translucidez, uma forma de transparência que não permite a visualização nítida da área sobreposta.

## Tipos

Gerenciadores de janelas podem oferecer diferentes tipos de janelas, de acordo com suas propriedades.

### Janela de aplicação/documento

Uma janela de aplicação/documento é o tipo mais comum, contendo documentos ou dados de aplicações. É o tipo mais flexível, podendo ser redimensionado, escondido ou restaurado.
Cada programa de computador define a estrutura das janelas que o compõem, os widgets que serão inseridos em seu conteúdo. Entretanto, para janelas de aplicação/documento um esquema muito utilizado está representado na figura ao lado.
Na parte superior da janela encontra-se a barra de título, que, além de informar o nome do programa, fornece acesso às propriedades da janela, como minimização, maximização, redimensionamento, moção, etc.. Logo abaixo está localizada a barra de menu, com listas em cascata de ações da aplicação. Abaixo da barra de menu pode haver uma barra de ferramentas, com botões de acesso rápido às ações da aplicação. Em uma interface de documento tabulada, abaixo da barra de menu ou da barra de ferramentas (se houver) geralmente estão localizadas as tabulações.
Na parte inferior da janela encontra-se a barra de status, que fornece informações sobre o estado atual da aplicação.
Entre a parte superior e inferior da janela encontra-se o documento a janela, que pode conter em suas bordas uma barra de rolagem caso o conteúdo a ser apresentado seja maior que o espaço visível disponibilizado pela janela, horizontalmente ou verticalmente.

### Janela de utilidade

Uma janela de utilidade está localizada acima das outras, fornecendo ferramentas e informações sobre a aplicação. São geralmente pequenas para evitar a sobreposição de outras janelas.
Uma aplicação comum são os widgets da área de trabalho.

### Caixa de diálogo

Uma caixa de diálogo (ou caixa de mensagem) é uma janela usada para apresentar uma informação ao utilizador ou para obter dados. É chamada dessa forma pois forma um diálogo entre o computador e o utilizador. Quando o teor do diálogo é crítico ao sistema, a janela é modal. Esse tipo de janela é geralmente mais simples, menos flexível. Por exemplo, raramente uma caixa de diálogo pode ser redimensionada, o que inclui também maximização e minimização. Boas práticas de desenvolvimento de interfaces gráficas indicam que uma caixa de diálogo deve ser usada somente quando a atenção imediata do utilizador é necessária.
O tipo mais simples é o alerta, que apresenta uma mensagem e requer somente a indicação que o utilizador leu a mensagem (ao clicar um botão "OK", por exemplo). É usada para prover confirmação de uma ação, ou para noticiar o término de um programa. Outro tipo comum é a pergunta seguida de opções de resposta, como sim ou não, para pedir a confirmação de uma ação.
Na World Wide Web, caixas de diálogos popularmente conhecidas como janelas pop-up são usadas para fins de propaganda, fazendo uso da característica chamativa desse tipo de janela.

## Organização

Um programa de computador assume a forma de uma janela para facilitar a assimilação pelo utilizador. Entretanto, um programa de computador pode ser apresentado em mais de uma janela, ou até mesmo sem uma respectiva janela. Para programas compostos por mais de uma janela, há diversas formas de organizar as janelas a fim de otimizar a interação do utilizador.
Uma opção é o método da interface de documento único (SDI), em que uma aplicação carrega diversas janelas distintas, de forma que o gerenciamento é feito pelo gerenciador de janela. Não há hierarquia de janelas, isto é, uma janela não contém outra. Como são as janelas são independentes, elas geralmente não podem compartilhar recursos em comum como uma barra de menu ou uma barra de ferramentas única para todos os documentos abertos.
Outro método de organização é a interface de documentos múltiplos (MDI), em que, diferente da interface de documento único, há hierarquia de janelas. Nesse método, existe uma janela da aplicação em que todas as outras janelas residem (exceto por janelas modais). Para o gerenciador de janela há somente uma janela aberta pela aplicação. Por conta da hierarquia, a janela principal pode fornecer recursos compartilháveis entre as janelas filhas, como uma barra de ferramentas.
Em MDI, a janela principal da aplicação pode opcionalmente fazer o papel de gerenciador de janela e prover uma forma de listar as janelas que nela residem, o que é útil caso várias janelas filhas estejam sendo usadas concorrentemente. Esse pensamento levou ao desenvolvimento de uma variação da interface de documentos múltiplos em que é apresentada uma barra de tarefas tal qual a do gerenciador de janela, mas embarcada na janela principal. A barra de tarefas embarcada é chamada tabulação, contendo abas, e resultou na variação do método MDI, a interface de documento tabulada. Uma aplicação comum é, por exemplo, o uso de abas em navegadores. Uma única janela de navegador pode conter diversas abas, cada uma apontando para um sítio específico.
Mais um método de organização é a interface baseada em diálogos, na sequência de diálogos. Nela, o foco não está no acesso concorrente a recursos como documentos, mas sim no diálogo contínuo entre utilizador e computador a fim de realizar uma tarefa. Uma caixa de diálogo é apresentada ao utilizador, e através dos dados entrados outra caixa é aberta com novas informações ou requisições, e assim por diante até a conclusão do sistema. Esse método é mais usado em utilitários, como instaladores.