oct 09

Método recursivo para setear propiedades a todos los componentes swing contenidos en el que se mande. Por ejemplo le mandas el nombre de un panel y todos los que estén dentro de el quedarán a no editable. Pero puedes aplicar los cambios que quieras y solo a determinadas instancias. Por ejemplo, si solo quieres poner en rojo la letra de las JLabel borras todo excepto la llamada recursiva y pones:

1
if(component instanceof JLabel) ((JLabel) component).setForeground(Color.RED);

NOTA: IntegerField, LimitedTextField y DecimalField no son componentes propios de swing, si no variaciones del JTextField creadas por un compañero y yo mismo para determinados propósitos. Y el componente JDateChooser está sacado del JCalendar, puedes encontrar la librería en esta web.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void enableFields(boolean option, JComponent jCompo) {
	Component [] arrayCompo = jCompo.getComponents();
	for (Component component : arrayCompo) {
		if(component instanceof IntegerField)       ((IntegerField) component).setEnabled(option);
		if(component instanceof LimitedTextField)   ((LimitedTextField) component).setEnabled(option);
		if(component instanceof DecimalField)       ((DecimalField) component).setEnabled(option);
		if(component instanceof JTextField)         ((JTextField) component).setEnabled(option);
		if(component instanceof JTextArea)          ((JTextArea) component).setEnabled(option);
		if(component instanceof JComboBox)          ((JComboBox) component).setEnabled(option);
		if(component instanceof JButton)            ((JButton) component).setEnabled(option);
		if(component instanceof JDateChooser)       ((JDateChooser) component).getDateEditor().setEnabled(option);
		if(component instanceof JRadioButton)       ((JRadioButton) component).setEnabled(option);
		if(component instanceof JCheckBox)          ((JCheckBox) component).setEnabled(option);
		if(component instanceof JSlider)            ((JSlider) component).setEnabled(option);
		if(component instanceof JSpinner)           ((JSpinner) component).setEnabled(option);
		if(component instanceof JComponent)         enableFields(option, (JComponent)component);
	}
}
1
2
3
4
//habilitar
enableFields(true,MiPanel.this);
//deshabilitar
enableFields(false,MiPanel.this);
Etiquetas:
ago 07

Este snippet lo tenía guardado hace bastante tiempo y aun no lo había probado, y ahora lo estoy usando en una web que estoy diseñando, y como funciona a las mil maravillas pues lo comparto.
Funciona simplemente con añadir este código dentro de las etiquetas body de la web:

1
2
3
4
5
6
7
8
9
10
11
12
13
<script language="javascript">
      function RandomImage(){
         n=0;
         this[n++] = "img01.jpg";
         this[n++] = "img02.jpg";
         this[n++] = "img03.jpg";
         this[n++] = "img04.jpg";
         this.N=n;
      }
      var Imagenes = new RandomImage();
      src = Imagenes[ Math.floor(Math.random() * Imagenes.N) ] ;
      document.write("<img src='"+src+"'>");
</script>

Desconozco la fuente de donde lo saqué tiempo atrás. Pero mio el código no es.

Etiquetas:
ago 07

En los mejores cines:

Etiquetas:
abr 16

Tengo esto muy abandonado, pero entre estudios y otras situaciones no dispongo de demasiado tiempo y ganas. Ahora mismo estoy de practicas en una empresa de software, de momento estoy haciendo pruebas y leyendo documentación de Java, JSP y demás derivados.

Hoy he hecho una clase para conectar a base de datos, y la pongo aquí para compartirla y revivir un poco el blog:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class Conectadb{
 
 
//variables miembro
 
    private String usuario;
    private String clave;
    private String url;
    private String driverClassName;
    private Connection conn = null;
    private Statement estancia;
 
//CONSTRUCTORES
 
    //Constructor que toma los datos de conexion por medio de parametros
    public Conectadb(String usuario, String clave, String url, String driverClassName) {
        this.usuario = usuario;
        this.clave = clave;
        this.url = url;
        this.driverClassName = driverClassName;
    }
 
    //Constructor que crea la conexion sin parametros con unos definidos en la clase
    //(meter los datos correspondientes)
    public Conectadb() {
        //poner los datos apropiados
        this.usuario = "usuario";
        this.clave = "clave";
        this.url = "xxxx:xxxx://url:puerto/lugar";
        this.driverClassName = "el.driver.de.la.base.datos";
    }
 
    //metodos para recuperar los datos de conexion
    public String getClave() {
        return clave;
    }
 
    public String getUrl() {
        return url;
    }
 
    public String getUsuario() {
        return usuario;
    }
 
    public Connection getConn() {
        return conn;
    }
 
    public String getDriverClassName() {
        return driverClassName;
    }
 
    //metodos para establecer los valores de conexion
    public void setClave(String clave) {
        this.clave = clave;
    }
 
    public void setUrl(String url) {
        this.url = url;
    }
 
    public void setUsuario(String usuario) throws SQLException {
        this.usuario = usuario;
    }
 
    public void setConn(Connection conn) {
        this.conn = conn;
    }
 
    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }
 
//la conexion propiamente dicha
 
    public void conectar() throws SQLException {
        try {
            Class.forName(this.driverClassName).newInstance();
            this.conn = DriverManager.getConnection(this.url, this.usuario, this.clave);
 
        } catch (Exception err) {
            System.out.println("Error " + err.getMessage());
        }
    }
    //Cerrar la conexion
 
    public void cierraConexion() throws SQLException {
        this.conn.close();
    }
 
//METODOS PARA TRABAJAR CON LA BASE DE DATOS
 
    public ResultSet consulta(String consulta) throws SQLException {
        this.estancia = (Statement) conn.createStatement();
        return this.estancia.executeQuery(consulta);
    }
 
    public void actualizar(String actualiza) throws SQLException {
        this.estancia = (Statement) conn.createStatement();
        estancia.executeUpdate(actualiza);
    }
 
    public ResultSet borrar(String borra) throws SQLException {
        Statement st = (Statement) this.conn.createStatement();
        return (ResultSet) st.executeQuery(borra);
    }
 
    public int insertar(String inserta) throws SQLException {
        Statement st = (Statement) this.conn.createStatement();
        return st.executeUpdate(inserta);
    }
 
}
Etiquetas:
jul 16

Se que no es gran cosa, pero me hacia ilusión (y me ha costado un ratico), así que lo pongo aquí. Es muy simple si lo quieres ver funcionando pulsa aquí. Y el código es este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
		<title>menu emergente</title>
 
		<style type="text/css">
			.oculto { display: none; }
			.visible { display: inline; }
		</style>
 
		<script type="text/javascript">
			function menu_emergente(){
				var emer = document.getElementById("items");
				if(emer.getAttribute('class') == "oculto"){
					emer.setAttribute("class","visible");
				}else{
					//emer.setAttribute("class","oculto");
					fuera_menu();
				}
			}
			function fuera_menu(){
				var emer = document.getElementById("items");
				emer.setAttribute("class","oculto");
			}
		</script>
	</head>
	<body>
	<a id="menu" href="#" onclick="menu_emergente()" >Menu</a>
	<div id="items" class="oculto" onclick="fuera_menu()">
		<br /><a href="http://google.es" target="_blank">elemento1</a>
		<br /><a href="http://elpais.es" target="_blank">elemento2</a>
		<br /><a href="http://k40s.org" target="_blank">elemento3</a>
		<br /><a href="http://publico.es" target="_blank">elemento4</a>
		<br /><a href="./">elemento5</a>
	</div>
	</body>
</html>
Etiquetas:
jul 16

Acabo de instalar el plugin WP-Syntax en este blog. Este plugin sirve para resaltar código según sea el lenguaje que estamos utilizando.

Instalación

  1. Descargarlo y descomprimirlo
  2. Subir el plugin a wp-content/plugins/wp-syntax/
  3. Activarlo desde el menú plugins del panel de WordPress

Uso

Hay que encerrar el código entre las etiquetas <pre> y </pre>. Y los atributos posibles son lang=”lenguaje”, pudiendo ser cualquiera de la lista que hay abajo y el atributo opcional line=”línea_comienzo” para indicar el numero de línea en la que empieza el código.

Lenguajes soportados

abap, actionscript, actionscript3, ada, apache, applescript, aptsources, asm, asp, autoit, avisynth, bash, bf, bibtex, blitzbasic, bnf, boo, c, cmac, caddcl, cadlisp, cil, cfdg, cfm, cmake, cobol, cpp-qt, cpp, csharp, css, d, dcs, delphi, diff, div, dos, dot, eiffel, email, erlang, fo, fortran, freebasic, genero, gettext, glsl, gml, bnuplot, groovy, haskell, hq9plus, html4strict, idl, ini, inno, intercal, io, java, java5, javascript, kixtart, klonec, klonecpp, latex, lisp, locobasic, lolcode lotusformulas, lotusscript, lscript, lsl2, lua, m68k, make, matlab, mirc, modula3, mpasm, mxml, mysql, nsis, oberon2, objc, ocaml-brief, ocaml, oobas, oracle11, oracle8, pascal, per, pic16, pixelbender, perl, php-brief, php, plsql, povray, powershell, progress, prolog, properties, providex, python, qbasic, rails, rebol, reg, robots, ruby, sas, scala, scheme, scilab, sdlbasic, smalltalk, smarty, sql, tcl, teraterm, text, thinbasic, tsql, typoscript, vb, vbnet, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xml, xorg_conf, xpp, z80

Después del salto ejemplos de como queda.
Sigue leyendo »

Etiquetas:
nov 21

WTF
Click para ampliar

Más de un disgusto habrá provocado.

Visto en WTFMicrosiervos

Etiquetas:
mar 07

Empezando en C++ que estamos, nos mandaron un proyecto en el cual teniamos que simular un diccionario, que además gestionara los sinonimos. Tendria que poderse:

  • Insertar y modificar una definicion.
  • Insertar sinonimos (cada palabra puede tener varias)
  • Consuta de definición
  • Consulta de sinonimos

Me faltó tiempo porque calculé mal las semanas y no pude hacer el extra de que lo fuera guardando en un archivo (no lo hemos dado aun) y al final no lo metí, pero intentaré hacerlo algún día.

Se que no es ninguna maravilla de la tecnología, pero contando lo que sabia de esto hace 5 meses…

Etiquetas:
preload preload preload