1. JFrame
  2. Crear un componente y añadirlo a la ventana
  3. Algunos componentes
  4. Forma habitual de instanciar una ventana
  5. JButton
  6. Layouts
    1. BorderLayout
    2. BoxLayout
    3. Group Layout
  7. JTable
    1. Cambiar el header de la tabla
    2. Alimentar la tabla sin usar su constructor
    3. Alimentando la tabla con un ArrayList
    4. Añadiendo un listener a la tabla
    5. Añadir un popup al pulsar sobre una fila
    6. Materializar la opción de borrado
  8. Tabs
  9. Menu Bar
  10. Cuadro de diálogo para abrir/salvar ficheros

JFrame

JFrame frame = new JFrame("Nombre de la ventana"); // Creamos la ventana con un titulo
frame.setSize(800,600); //le asignamos un tamaño
//frame.setLocation(0,0); //Definimos el origen de coordenadas de la ventana
frame.setLocationRelativeTo(null);//Centra la ventana en la pantalla
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//definimos que pasará cuando pulsemos el botón de cerrar
frame.setVisible(true); //La hacemos visible

Crear un componente y añadirlo a la ventana

JButton button = new JButton("Texto boton");
frame.add(button);

Sin haber establecido un layout, el botón se estirará para ocupar toda la pantalla

Para evitar esto, podemos usar un layout, por ejemplo:

frame.setLayout(new FlowLayout());

Si queremos que los componentes se alineen verticalmente, no es posible usando FlowLayout, pero podemos crear una nueva clase llamada VerticalFlowlayout

Algunos componentes

JTextArea ciclosTextArea = new JTextArea(15,20);

//Muestra un mensaje no editable
JLabel label = new JLabel("nombre");

//Muestra un cuadro de diálogo con un mensaje
JOptionPane.showMessageDialog(Ventana.this, "Eggs are not supposed to be green."); 

Forma habitual de instanciar una ventana

public class Main {
	public static void main(String[] args) {
		Ventana ventana = new Ventana();
		ventana.setVisible(true);
	}
}
public class Ventana extends JFrame {
	public Ventana() {
		inicializar();
	}
	private void inicializar() {
		this.setSize(800,600);
	}
}

JButton

JButton btn= new JButton("Botón");
btn.addActionListener(this);
...
public void actionPerformed(ActionEvent e) {		
	if(e.getSource() == this.hacerMagia) {
			
	}else if(e.getSource() == this.altaCurso) {
			
	}
}

o

.addActionListener(new ActionListener() {
	@Override
	public void actionPerformed(ActionEvent e) {
		int row = tabla.getSelectedRow();
		listadoCursos.remove(row);
		alimentarTabla();
		System.out.println(row);
	}
});

Layouts

BorderLayout

Por defecto, si no indicamos nada, nuestras ventanas tienen BorderLayout.

	JButton btn1 = new JButton("btn1");
JButton btn2 = new JButton("btn2");
		
this.add(btn1);
this.add(btn2);

BoxLayout

BoxLayout.PAGE_AXIS coloca los elementos verticalmente, de arriba a abajo
this.setLayout(new BoxLayout(this.getContentPane(), BoxLayout.PAGE_AXIS));
		
JButton btn1 = new JButton("btn1");
JButton btn2 = new JButton("btn2");
		
this.add(btn1);
this.add(btn2);

Group Layout

Esto es un poco enrevesado. Para que funcione correctamente tengo que añadir todos los componentes dos veces, una horizontal y otra verticalemente

	GroupLayout layout = new GroupLayout(this.getContentPane());
layout.setAutoCreateContainerGaps(true);
layout.setAutoCreateGaps(true);

layout.setHorizontalGroup(layout.createSequentialGroup().addComponent(btn1).addComponent(btn2).addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(btn3).addComponent(btn4)));

layout.setVerticalGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(btn1).addComponent(btn2).addComponent(btn3)).addComponent(btn4));


this.setLayout(layout);

JTable

String data[][]={ {"101","Amit","670000"},{"102","Jai","780000"},{"101","Sachin","700000"}};    
// (es posible incrustar código html si lo hacemos dentro de las etiquetas <html>)
String columns[]={"Ciclo","Módulo","<html>Unidad<br>Formativa>","Opcion"};         
JTable tabla=new JTable(cursillos,column);    
tabla.setBounds(30,40,200,300);          
JScrollPane sp=new JScrollPane(tabla); 

sp.setPreferredSize(new Dimension(1000, 300));
sp.setMinimumSize(new Dimension(1000,200));

panelGlobal.add(sp);

Cambiar el header de la tabla

tabla = new JTable();
JTableHeader th = tabla.getTableHeader();
th.setPreferredSize(new Dimension(100, 100));

Si sólo quisiera modificar la altura de la tabla, pero no su anchura

JTableHeader th = tabla.getTableHeader();
		
Dimension d = th.getPreferredSize();
d.height = 30;
th.setPreferredSize(d);

Alimentar la tabla sin usar su constructor

DefaultTableModel tableModel = new DefaultTableModel(cursillos, columns);
tabla.setModel(tableModel);

Alimentando la tabla con un ArrayList

String[][] arrayListCursoToMultidimensionalStringArray(ArrayListcursos){
	Iterator<Curso> it = cursos.iterator();
	String [][] cursosArray= new String[cursos.size()][3];
	int i=0;
	while(it.hasNext()) {
		Curso c = it.next();
		String[]curso = {c.getCiclo(), c.getModulo(), c.getUf(), "X"};
		cursosArray[i] =curso; 
		i++;
	}
	return cursosArray;	
}

Añadiendo un listener a la tabla

JTable jt=new JTable(cursillos,column);   

jt.addMouseListener(new MouseAdapter() {
	public void mousePressed(MouseEvent e) {
		System.out.println("llega");
	}
});

Añadir un popup al pulsar sobre una fila

JPopupMenu popup = new JPopupMenu();
JMenuItem removeItem = new JMenuItem("Eliminar fila");
popup.add(removeItem);

JTable tabla=new JTable(cursillos,column);   

tabla.addMouseListener(new MouseAdapter() {
	public void mousePressed(MouseEvent e) {
		popup.show(jt, e.getX(), e.getY());
	}
});

Materializar la opción de borrado

removeItem.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent e) {
		int row = tabla.getSelectedRow();
		System.out.println(row);
	}
});

Tabs

JTabbedPane tabbedPane = new JTabbedPane();

tabbedPane.add("Colors", new JPanel());
tabbedPane.add( "Fruits", new JPanel());
tabbedPane.add("Vitamins", new JPanel( ) ) ;
	 
panelGlobal.add(tabbedPane);

Para modificar dinámicamente el contenido de un tab:

tabbedPane.setComponentAt(2, panelCursos);
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("Archivo");
JMenuItem importarMenuItem = new JMenuItem("Importar");
JMenuItem exportarMenuItem = new JMenuItem("Exportar");

fileMenu.add(importarMenuItem);
fileMenu.add(exportarMenuItem);

menuBar.add(fileMenu);
this.setJMenuBar(menuBar);
Abrir un ficheroJFileChooser c = new JFileChooser();				
int rVal = c.showOpenDialog(Ventana.this);
if (rVal == JFileChooser.APPROVE_OPTION) {
	System.out.println(c.getSelectedFile().getName());
	System.out.println(c.getCurrentDirectory().toString());
}
if (rVal == JFileChooser.CANCEL_OPTION) {
	System.out.println("Pulsaste cancelar");
}
Salvar un fichero
icono de mandar un mail¡Contacta conmigo!
contacta conmigoPablo Monteserín

¡Hola! ¿En qué puedo ayudarte?