> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/ud5-entrada-e-saida-da-informacion/interfaces-graficas.md).

# Interfaces Gráficas

Para o desenvolvemento de Interfaces Gráficas foron creados distintos paquetes en Java: AWT, Swing e JavaFX

A primeira foi **AWT** (no JDK 1.0) no que o Sistema Operativo encargábase de servir os distintos compoñentes das aplicacións JAVA. Con **Swing** (no JDK 1.2) os compoñentes xa están escritos en JAVA, independentes do Sistema Operativo.

Finalmente, no JDK 8 aparece **JavaFX** que é a elección actual para a maioría das aplicacións de escritorio de JAVA.

Swing segue sendo empregado en moitas aplicacións existentes, mentres que JavaFX vaise impoñendo como o paquete a empregar para aplicacións gráficas con Java. Veremos aquí unha introdución a ambos paquete

## ¿Por que Java Swing?

**Swing é o punto de partida ideal** porque permite que nos concentremos nos fundamentos da programación GUI (compoñentes, eventos, layout) sen distraernos coa complexidade engadida de tecnoloxías como FXML ou CSS. Unha vez que dominados estes conceptos, a transición a JavaFX é moito máis sinxela, xa que entenderán por que JavaFX aborda as limitacións de Swing (como a estilización ou o multimedia).

<figure><img src="/files/OTd5wDMfepAMl0zFJxYo" alt=""><figcaption></figcaption></figure>

## Elementos de Swing

Dentro da programación das interfaces, imos atopar, de maneira xeral, tres tipos de elementos:

### Elementos contenedores

Os contedores son compoñentes que **poden gardar outros compoñentes** dentro deles.\
Son a base para organizar a interface gráfica. Algúns exemplos en Java Swing:

* **JFrame** – Ventá principal da aplicación.
* **JPanel** – Panel para organizar zonas da interface.
* **JScrollPane** – Panel con barra de desprazamento para contidos grandes.
* **JDialog** – Ventá secundaria ou emerxente.

### Compoñentes

Son os elementos **visibles e interactivos** que o usuario pode ver ou manipular na interface.\
Exemplos comúns:

* **JButton** – Botón que pode activar accións.
* **JLabel** – Texto ou imaxe para mostrar información.
* **JTextField** – Campo de texto editable.
* **JComboBox** – Caixa despregable para seleccionar opcións.

### Eventos

Os eventos son **accións que o usuario realiza ou que acontecen no sistema**, e permiten que a aplicación reaccione.\
En Java Swing, podemos detectar eventos e asociarlles accións mediante *listeners*.

**Exemplos:**

* **ActionEvent** → Un botón foi pulsado (`JButton.addActionListener`).
* **MouseEvent** → O usuario moveu ou clicou co rato (`MouseListener`).
* **KeyEvent** → O usuario presionou unha tecla (`KeyListener`).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://educacion.gitbook.io/programacion/ud5-entrada-e-saida-da-informacion/interfaces-graficas.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
