Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.
Componente JFrame en un proyecto Java Swing
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 de Java Swing
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);
}
}
Componente JButton en Java Swing
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 de Java Swing
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);
Componente JTable en Java Swing
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);
Cómo crear un Menú con Java Swing
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);
Cuadro de diálogo para abrir/salvar ficheros
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");
}