Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Tema Jpanel

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 48

Aprendiz

Daniel Stiven Barragan Calderon

JPanel

Instructor
Luis Galicia

A.D.S.I 1823598
Ibagué- Tolima
16/10/2019
¿Qué es Jpanel?
JPanel es un objeto de los llamados "contenedores". Es así porque sirven para
contener otros objetos. De esta forma, actúan como "cajas" donde vas metiendo
cosas y así poderlos manejar como una agrupación. Por ejemplo, si agrupas una
serie de botones dentro de un JPanel y quieres desactivarlos todos de golpe,
puedes desactivar el JPanel que los contiene y así todo su contenido queda
desactivado
¿Cómo agregar botones dependiendo la posición?
Controles: Tutorial De Botones En Android
James Revelo Febrero 25, 2016
En este tutorial veremos cómo usar botones en Android con el fin de que los
usuarios de tu app puedan interactuar con el contenido.
Primero estudiarás la clase Button que es la encargada de representar botones en
la UI. Luego verás cómo añadir eventos de click. También cómo se clasifican según
el Material Design, cómo crearlos en Android Studio y por último a personalizar su
estilo.

1. IMPLEMENTAR UN BOTÓN EN ANDROID

CREAR PROYECTO EN ANDROID STUDIO


Antes que nada abre Android Studio, ve al menú de herramientas y selecciona File
> New > New Project… para crear un nuevo proyecto.
En la configuración del proyecto ten en cuenta los siguientes parámetros:

 Application Name: usa el nombre “Botones”.


 Company Domain Name: Para el dominio elige la entidad que represente tu
creación, puede ser tu_nombre.com, el nombre_de_tu_empresa.com o
simplemente test.com.
 Projection Location: En la ubicación selecciona la carpeta que tengas destinada
para guardar tus proyectos. Recuerda no usar espacios en ni caracteres especiales
con acentos.
Ahora en los factores de forma deja por defecto el SDK mínimo de ejecución en la
versión 11 de Android.

En la siguiente venta elige una actividad vacía (Empty Activity) cómo contenedor
principal para los ejemplos que veremos:
Finalmente cambia el título del archivo java para la actividad
por ActividadBotones.java al igual que su layout (actividad_botones.xml). Al
presionar Finish tendrás un proyecto de prueba el cual te servirá para seguir todo
el tutorial.
LA CLASE BUTTON
Un botón es un control con texto o imagen que realiza una acción cuando el usuario
lo presiona. La clase Java que lo represente es Button y puedes referirte a él dentro
de un layout con la etiqueta <Button> respectivamente.

Para agregar un botón a la actividad principal de tu app dirígete


a actividad_botones.xml y agrega la siguiente definición.

<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.herprogramacion.botones.ActividadBotones">

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="AGREGAR" />
</RelativeLayout>

Con ello centramos el botón en el relative layout.

El texto que especifica su acción especifícalo en el atributo android:text. En el


ejemplo anterior se usó la palabra "AGREGAR".
Este código debería mostrar en la ventana Preview la siguiente imagen:
ATRIBUTOS DE UN BOTÓN
Si quieres cambiar las propiedades de un botón recurre a los atributos que la
documentación presenta en formato Java o XML.

Debido a que Button extiende de TextView, puedes usar todos los atributos de esta
clase.
Algunos de los más utilizados son:

Atributo Descripción
android:text Permite cambiar el texto de un botón

Se usa para cambiar el fondo del botón. Puedes usar un recurso de


android:background archivo colors.xml o un drawable.

Determinar si el botón está habilitado ante los eventos del usuario


android:enabled Usa true (valor por defecto) para habilitarlo y false en caso contrario.

Asigna una posición al texto con respecto a los ejes x o y dependiendo de


la orientación deseada.
android:gravity Por ejemplo: Si usas top, el texto se alineará hacia el borde superior.

Representa al identificador del botón para diferenciar su existencia de


android:id otros views.

Almacena la referencia de un método que se ejecutará al momento de


android:onClick presionar el botón.

android:textColor Determina el color del texto en el botón

Determina un drawable que será dibujado en la orientación establecida.


Por ejemplo: Si usas el atributo android:drawableBottom, el drawable será
android:drawable* dibujado debajo del texto.
Teniendo en cuenta la anterior tabla te invito a ver los resultados que producen usar
algunos de esos atributos.

CAMBIAR TEXTO DE UN BOTÓN


Asigna una cadena directamente al atributo android:text para indicar la acción del
botón.

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="Agregar" />

Por defecto el texto del botón estará en mayúsculas, pero si quieres deshabilitar
esta característica usa el valor false en el atributo android:textAllCaps.

<Button
...
android:textAllCaps="false"/>
Ahora, si deseas cambiar el texto programáticamente usa el método setText().
Para ello abre ActividadBotones.java. Obtén la instancia del botón
con findViewById() y luego invoca setText() con una secuencia de caracteres como
parámetro.

public class ActividadBotones extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.actividad_botones);

Button boton = (Button) findViewById(R.id.button);


boton.setText("Ordenar");
}
}

Esto produce el siguiente resultado:

Ahora también es posible asignar un recurso string al texto del botón desde XML y
Java.
En caso de XML usa la notación de recurso @string o @android:string (strings del
sistema) de la siguiente forma:

<Button
...
android:text="@string/texto_agregar"/>

En Java solo usa el operador punto para llegar al identificador perteneciente a la


clase R:

Button boton = (Button) findViewById(R.id.button);


boton.setText(R.string.texto_agregar);
CAMBIAR COLOR DE FONDO
Modificar el fondo de un botón implica el cambio del atributo android:background por
un recurso de color o drawable.
Ejemplo:
Usar el color primario del proyecto como color de background de un botón
Solución:
Invoca la referencia @color/colorPrimary de tu archivo values/colors.xml:

<Button
...
android:background="@color/colorPrimary"/>

El resultado es:

Sin embargo, hacer esto hace perder la reacción de superficie que se tenía antes
por el Material Design.

La forma redondeada tampoco se hace presente.

Solo queda la elevación al momento de tocar el botón.

Para conservar el efecto y cambiar el color del botón usa el


atributo app:backgrountTint de la siguiente forma:

<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.herprogramacion.botones.ActividadBotones">

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
app:backgroundTint="@color/colorPrimary"
android:text="@string/texto_agregar" />
</RelativeLayout>

Así tendrías:

BOTÓN CON TEXTO E IMAGEN


En la sección de atributos viste que existen atributos con la
forma android:drawable* para alinear una imagen al texto de un botón.
Para demostrar su uso veamos el siguiente ejemplo sencillo.

Alinear a la izquierda del botón ordenar un icono asociado a pizzas.


Solución
Abre el layout actividad_botones.xml y agrega un botón centrado en el padre.
Cambia el color de texto a blanco (@android:color/white), usa un tinte de color rojo
(#ef9a9a) y alinea a la izquierda el siguiente drawable de pizza:
Tu código debería quedar de la siguiente forma:

<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.herprogramacion.botones.ActividadBotones">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/ic_pizza"
android:drawablePadding="8dp"
android:id="@+id/boton"
android:textColor="@android:color/white"
app:backgroundTint="#ef9a9a"
android:text="Ordenar"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>

Y el resultado sería:
Como ves, usé android:drawableLeft para ubicar la imagen en la izquierda. Si
compruebas con las sugerencias de Android tendrás varias posiciones: derecha,
abajo y arriba.

LA CLASE IMAGEBUTTON
ImageButton funciona exactamente cómo Button, solo que en lugar de traer un texto
en su background, viene una imagen para especificar la acción.
Para cambiar la imagen de un image button usa el atributo android:src. Obviamente
su valor es un drawable.
El contorno del background se conserva como lo hemos visto hasta ahora, la
diferencia está que en el centro se
ubicará la imagen elegida en src.
Si quieres que el background por defecto desaparezca, asigna un color transparente
o cambia el contenido con un list drawable (esto lo verás más adelante).

Ejemplo:
Cambiar la imagen de un image button con el icono de la app.
Solución
Lo primero es abrir el layout de la actividad y añadir un
elemento <ImageButton> centrado en el relative layout.
El icono de la aplicación actual se encuentra en la referencia @mipmap/ic_launcher.
Así que asigna este valor al atributo andriod:src.
Adicionalmente puedes el color del
sistema @android:color/transparent sobre android:background para eliminar
el contorno. Pero recuerda que esto elimina los efectos del Material Design.

<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/boton"
android:src="@mipmap/ic_launcher"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />

Ejecuta la app y verás la apariencia del botón final:

CREAR BOTÓN DESDE ANDROID STUDIO

Usa la pestaña Design que se ve en la vista de un layout para arrastrar y soltar un


botón desde la paleta o cambiar sus atributos.
1. Sitúate en la ventana Palette. Luego busca el elemento Button de la
sección Widgets
2. Lleva el puntero del mouse hacia el layout y ubícalo según tu objetivo. En mi caso
tengo un RelativeLayout, el cual permite orientar mi botón en lugares asociados al
contenido del padre y al de otros views.
Por el momento lo ubicaré en el centro absoluto del layout, donde el editor mostrará
líneas de guía para saber que valores estoy otorgando:
3. Una vez elegido el lugar donde se ubicará el botón, confirma con un click su
inserción. Esto mostrará en la ventana Properties todos los atributos del botón que
puedes editar.

4. Si deseas, da doble click sobre el botón en el layout para desplegar una caja de
edición rápida para el id y el texto.
TIPOS DE BOTONES EN MATERIAL DESIGN

La documentación sobre botones en el Material Design nos habla de tres tipos:


 Raised Buttons
 Flat Buttons
 Floating Action Buttons (FAB)
Los raised buttons son los que hemos visto hasta ahora. Tienen backgrounds
rectangulares, se elevan ante el click del usuario y su superficie reacciona con un
efecto ripple.

Se usan sobre layouts que tienen gran variedad de contenido para delimitar las
secciones o elementos. Además realzan la importancia de realizar una acción
relacionada.
Por el contrario, un flat button o botón sin bordes tiene reacción de superficie pero
no se eleva al ser presionado. Se usan para acciones en diálogos, toolbars y de
forma persistente en steppers.

El Floating action button tiene las mismas interacciones de elevación y ripple que el
raised button, solo que este tiene forma circular. Su objetivo es promover una acción
principal relacionada a una pieza de material.

MANEJAR LOS EVENTOS DE UN BOTÓN


Es de esperar que un botón dispara un evento al ser clickeado por un usuario, lo
que permitirá ejecutar la acción a la que hace referencia dicho view.

Para procesar el evento existen varias formas de proceder.

USAR EL ATRIBUTO ANDROID:ONCLICK


Anteriormente cuando viste la clase Button se mencionó la existencia
de android:onClick() para asignar un método que se ejecute cuando el usuario
presione el botón.
Para ello se requiere que el método cumpla con las siguientes condiciones:

1. Que sea público


2. Que sea tipo void
3. Que reciba un parámetro del tipo View
4. Debe declararse en la actividad que usa el mismo layout
Ejemplo:
Cambiar el texto de un Text View por el mensaje “Botón presionado: [hora_actual]”
al presionar un Button.
Solución:
Comienza por añadir un text view al layout. En mi caso lo ubicaré en el centro del
relative layout y por debajo pondré el botón:

<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.herprogramacion.botones.ActividadBotones">

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/texto_agregar"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A la espera..."
android:id="@+id/textView"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>

Ahora en la actividad ActividadBotones crearé un método para los clicks


llamado cambiarMensaje().
La idea es obtener el text view como campo para poder cambiar su texto
con setText() desde el método.
Para obtener la hora usa la clase Calendar y para formatear su estructura
usa SimpleDateFormat.
ActividadBotones.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class ActividadBotones extends AppCompatActivity {

private TextView texto;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.actividad_botones);

texto = (TextView) findViewById(R.id.textView);


}

public void cambiarMensaje(View v){


SimpleDateFormat formato = new SimpleDateFormat("HH:mm:ss");
Date fechaActual = Calendar.getInstance().getTime();

String s = formato.format(fechaActual);
texto.setText(String.format("Botón presionado: %s", s));
}
}

Lo siguiente es dirigirse al layout y asignar el método en el botón


con android:onClick. Al momento de hacerlo, el motor de Android Studio debe
sugerirte que cambiarMensaje() está disponible.

El atributo quedaría de la siguiente forma:

<Button
...
android:onClick="cambiarMensaje"/>

Al ejecutar la app y clickear el botón tendrás el cambio de texto por la hora actual.
USAR ESCUCHA ANÓNIMA ONCLICKLISTENER
Otra forma es crear una instancia anónima de la interfaz View.OnClickListener para
manejar los eventos del botón.
Esto requiere usar el método setOnClickListener() para asignar el listener al botón
y luego sobrescribir el controlador onClick() con las acciones a ejecutar.
Ejemplo:
Iniciar otra actividad al presionar un botón
Solución
Lo primero es añadir otra actividad al proyecto actual que tienes abierto (recuerda
quitar el text view que se tenía antes y la referencia de android:onClick()).
Ve al menú de herramientas y presiona File > New > Activity > Empty Activity
Nombra a la nueva actividad como “ActividadNueva” y confirma.

Lo siguiente es ir ActividadBotones y obtener la instancia del botón que tenemos


en onCreate().
Luego invoca el método setOnClickListener() desde la instancia y como parámetro
digita solamente "new O". Esto es suficiente para que Android Studio te recomiende
la creación de un nuevo OnClickListener.

Al presionar ENTER o clickear la sugerencia, Android Studio creará la escucha


anónima junto a la implementación del controlador onClick():

Button boton = (Button) findViewById(R.id.button);


boton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

}
});

Ahora dentro del controlador crea un nuevo Intent para iniciar la


actividad ActividaNueva. Seguido invoca startActivity() para hacer efectivo el inicio.

Button boton = (Button) findViewById(R.id.button);


boton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(ActividadBotones.this, ActividadNueva.class);
startActivity(i);
}
});

USAR ONCLICKLISTENER SOBRE EL CONTENEDOR


OnClickListener también puede ser implementada sobre el contenedor del botón
como lo es una actividad o un fragmento.
Así podrás sobrescribir el controlador onClick() para que tenga un alcance global
para todos los views que pertenezcan al contenedor. Lo que es de utilidad si se
deseas leer clicks sobre varios elementos al tiempo.
Ejemplo:
Cambiar el color del background de una actividad dependiendo de qué botón de 4
disponibles se presione.
Solución:
Pon 4 botones centrados horizontalmente y uno debajo de otro dentro del relative
layout. Usa los siguientes colores en sus textos: Verde azulado, Verde, Verde
claro y Lima.
actividad_botones.xml

<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.herprogramacion.botones.ActividadBotones">

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Verde azulado"
android:layout_centerHorizontal="true" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Verde"
android:id="@+id/button2"
android:layout_below="@+id/button"
android:layout_centerHorizontal="true" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Verde claro"
android:id="@+id/button3"
android:layout_below="@+id/button2"
android:layout_centerHorizontal="true" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Lima"
android:id="@+id/button4"
android:layout_below="@+id/button3"
android:layout_centerHorizontal="true" />

</RelativeLayout>

Implementa la escucha OnClickListener sobre la ActividadBotones:

public class ActividadBotones extends AppCompatActivity implements


View.OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.actividad_botones);
}

Si dejas el código como está, Android Studio te informará que hay un error porque
no has sobreescrito el controlador.
La solución manual sería escribir la firma y cuerpo del método como es requerido.
Sin embargo puedes usar la generación de código automático de Android Studio.

Presiona ALT + insert dentro del cuerpo de la clase y


selecciona Implement Methods…

Luego selecciona onClick() del menú y confirma.


Con ello construirás el cuerpo de forma automática:

@Override
public void onClick(View v) {

Lo que sigue es detectar los eventos de click con múltiples botones.

Una de las formas más sencilla es usar una sentencia switch, donde su expresión
de validez sea el identificador del view que viene como parámetro de onClick().
El algoritmo sería el siguiente:

 Asignar la escucha a todos los botones con el operador this.


 Obtener el view raíz de la jerarquía con getRootView().
 Abrir un switch con el id del view clickeado. El id se obtiene con el método getId().
 Elegir el color dependiendo del caso. Convierte una definición hexadecimal en
entero con Color.parseColor().
 Cambiar el background del contenedor con el método setBackgroundColor()
Veamos:

import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

public class ActividadBotones extends AppCompatActivity implements


View.OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.actividad_botones);

findViewById(R.id.button).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
findViewById(R.id.button3).setOnClickListener(this);
findViewById(R.id.button4).setOnClickListener(this);
}

@Override
public void onClick(View v) {

int color;

View contenedor = v.getRootView();

switch (v.getId()) {
case R.id.button:
color = Color.parseColor("#80CBC4"); // Verde azulado
break;
case R.id.button2:
color = Color.parseColor("#A5D6A7"); // Verde
break;
case R.id.button3:
color = Color.parseColor("#C5E1A5"); // Verde claro
break;
case R.id.button4:
color = Color.parseColor("#E6EE9C"); // Lima
break;
default:
color = Color.WHITE; // Blano
}

contenedor.setBackgroundColor(color);
}
}

Ejecuta la app y prueba clickear los 4 botones para cambiar el background de la


actividad.
PERSONALIZAR EL ESTILO DE UN BOTÓN

Ya viste algunos atributos que puedes cambiar en los botones para transformar su
apariencia. Con eso puedes ir a tu archivo styles.xml y crear estilos para estos
views.
A continuación te mostraré algunos casos que pueden presentarse a la hora de
querer personalizar un botón.

CAMBIAR BACKGROUND
Si quieres omitir la forma por defecto del botón y los efectos de reacción, puedes
probar usando un recurso drawable del tipo State List.
Este elemento representa múltiples drawables que serán usados en un mismo view
simulando cambio de estados.

Esto se ajusta perfectamente a los botones ya que su apariencia varía según la


interacción.

Ejemplo:
Crear background de un botón con diseño plano (Flat Design)
Solución:
Lo primero que harás es crear un nuevo drawable llamado bk_boton_plano.xml.
Para ello ve a la carpeta drawable, presiona click derecho y selecciona Drawable
resource file.

Confirma el nombre con OK:


La definición XML requiere que el nodo principal sea del tipo <selector>.
Dentro de este deben existir elementos <item> que definan el drawable que
asignará a cada estado del botón.
Existen cuatro estados primordiales:

 normal
 enfocado (state_focused)
 presionado (state_pressed)
 deshabilitado (state_enabled > false).
Con lo anterior el código quedaría así:

bk_boton_plano.xml

<?xml version="1.0" encoding="utf-8"?>


<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/boton_presionado"
android:state_pressed="true" />
<item android:drawable="@drawable/boton_enfocado"
android:state_focused="true" />
<item android:drawable="@drawable/boton_deshabilitado"
android:state_enabled="false" />
<item android:drawable="@drawable/boton_normal" />
</selector>

Cada drawable de estado se compone de una lista de capas de drawables para


simular un borde sombreado inferior.
El estado normal tiene asignado el drawable boton_normal.xml el cual tiene dos en
tono naranja profundo.
boton_normal.xml

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Sombra -->
<item android:top="4dp">
<shape>
<solid android:color="#FF7043" />
<corners android:radius="4dip" />
</shape>
</item>
<!-- Contenido -->
<item android:bottom="4dp">
<shape>
<solid android:color="#FF8A65" />
<corners android:radius="4dip" />
</shape>
</item>
</layer-list>

El estado de foco simplemente cambia los colores de ambas capas para visualizar
un cambio minimo de contraste.

boton_enfocado.xml

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Sombra -->
<item android:top="4dp">
<shape>
<solid android:color="#FFCA28" />
<corners android:radius="4dip" />
</shape>
</item>
<!-- Contenido -->
<item android:bottom="4dp">
<shape>
<solid android:color="#FFD54F" />
<corners android:radius="4dip" />
</shape>
</item>
</layer-list>

Y el botón presionado es exactamente lo mismo. Un aumento de opacidad en el


tono.

boton_presionado.xml

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Sombra -->
<item android:top="4dp">
<shape>
<solid android:color="#FFA726" />
<corners android:radius="4dip" />
</shape>
</item>
<!-- Contenido -->
<item android:bottom="4dp">
<shape>
<solid android:color="#FFB74D" />
<corners android:radius="4dip" />
</shape>
</item>
</layer-list>

Con esos drawables listos, ahora puedes ir al layout de la actividad y modificar el


atributo android:background para asignar la lista. Cambia el color de texto
con android:textColor a blanco para mejorar el contraste y si deseas desaparecer la
animación de elevación, usa android:stateListAnimator con el valor de @null.

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:textColor="@android:color/white"
android:background="@drawable/bk_boton_plano"
android:stateListAnimator="@null"
android:text="@string/texto_agregar" />

Este serían los estados logrados:


ESTILO BORDERLESS O BOTÓN SIN BORDES
Ya habías visto que el botón sin bordes se le denomina Flat button en el Material
Design.

Para crear dicho acabado puedes aplicar el


estilo Widget.AppCompat.Button.Borderless.
Por ejemplo…

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Llamar"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />

Produciría el siguiente resultado:


Si deseas que el color del texto sea el mismo del acento, entonces
usa Widget.AppCompat.Button.Borderless.Colored

¿Cómo elaborar una interfaz por medio de comandos?

¿Qué es la línea de comandos?

La ventana, que generalmente es llamada línea de comandos ó interfaz de


línea de comandos, es una aplicación basada en texto para ver, manejar y
manipular archivos en tu ordenador. Similar a Windows Explorer o Finder en Mac,
pero sin la interfaz gráfica. Otros nombres para la línea de comandos
son: cmd, CLI, prompt -símbolo de sistema-, console -consola- o terminal.

Abrir la interfaz de línea de comandos


Para empezar con algunos experimentos necesitarás abrir nuestra interfaz de
línea de comandos en primer lugar.

Opening: Windows
Opening: OS X
Opening: Linux

Símbolo del Sistema (Prompt)

Ahora deberías ver una pantalla blanca o negra que espera a que introduzcas tus
comandos.

Prompt: OS X and Linux


Prompt: Windows
Cada comando vendrá precedido por un $ o un > y un espacio, pero no debes
escribirlos tú mismo. El ordenador lo hará por ti. :)
Solo una pequeña anotación: en tu caso puede que haya algo
como C:\Users\ola> o Olas-MacBook-Air:~ ola$ antes del símbolo de
introducción, lo cual es 100% NORMAL.

La parte superior incluye el $ o el > que es llamado en la línea de comandos, o


mas corto prompt. Introduce algo allí.
En el tutorial, cuando queramos introducir un comando, incluye el $ o >, y
ocasionalmente más a la izquierda. Ignora la parte izquierda solamente
escribiendo el comando, el cuál inicia después de el prompt.

Tu primer comando (¡BIEN!)


Iniciemos por teclear este comando:
Your first command: OS X and Linux
Your first command: Windows
Y luego presiona enter. Esto será nuestro resultado:
command-line

$ whoami olasitarska
Como puedes ver, el computador ha solo impreso tu nombre de usuario.
Ordenado, ¿ah? :)

Intenta escribir cada comando; no copies y pegues. ¡De ésta manera lo


recordarás!

Fundamentos
Cada sistema operativo tiene un poco diferente la configuración de los comandos
para la consola, así que asegurate de seguir las instrucciones para tu sistema
operativo. Intentemos esto, ¿Verdad?

Directorio actual

Sería bueno saber dónde estamos ahora, ¿Correcto? Veamos. Escribe éste
comando y presiona enter:
Current directory: OS X and Linux
Current directory: Windows
Probablemente veremos algo similar en tu computador. Una vez que abres la
consola o la línea de comandos, usualmente inicias en tu directorio principal.

Aprende más sobre un comando

¡Muchos comandos pueden escribirse en el prompt que tiene construído una


ayuda que puedes leer! Por ejemplo, aprende más acerca de el comando del
directorio actual:

Command help: OS X and Linux


Command Help: Windows

Listar ficheros y directorios


Así que, ¿en qué estamos? Estaría bien saberlo. Veamos:
List files and directories: OS X and Linux
List files and directories: Windows

Cambiar el directorio actual

Ahora, vamos a nuestro directorio de escritorio:

Change current directory: OS X


Change current directory: Linux
Change current directory: Windows
Verifica si está cambiado actualmente:

Check if changed: OS X and Linux


Check if changed: Windows
¡Aquí está!

PRO tip: si tu escribes cd D y luego presionas tab en tu teclado, la línea de


comandos automáticamente llenará el resto de el nombre por el que puedes
navegar. Si hay mas que una carpeta iniciando con "D", presiona la tecla tab dos
veces para obtener una lista de opciones.

Crear un directorio

¿Cómo crear un práctico directorio para tu escritorio? Tú puedes hacerlo de esta


manera:

Create directory: OS X and Linux


Create directory: Windows
Éste pequeño comando creará una carpeta con el nombre práctica en tu
computador. ¡Tú puedes verificar si está allí en tu Escritorio o ejecutando uno de
los siguientes comandos ls o dir! Intentalo. :)
PRO tip: Si tu no quieres escribir el mismo comando una y otra vez, intenta
presionando la flecha arriba y flecha abajo en tu teclado para regresar a través
de los comandos recientemente usados.
¡Ejercicio!

Un pequeño reto para ti: en tu nuevo directorio creado práctica, crea un directorio
llamado prueba. (Usa los comandos cd y mkdir.)

Solución:

Exercise solution: OS X and Linux


Exercise solution: Windows
¡Felicidades! :)

Limpieza

No queremos dejar un enredo, así que removamos todo lo que hicimos hasta este
momento.

Primero, necesitamos regresar al Escritorio:

Clean up: OS X and Linux


Clean up: Windows
Usando los .. con el comando cd cambiaremos tu actual directorio al directorio
padre( que es, el directorio que contiene tu directorio actual).
Verifica dónde estás:

Check location: OS X and Linux


Check location: Windows
Es hora de eliminar el directorio practica:
Atención: Si eliminas los archivos usando del, rmdir o rm no se podrán
recuperar, esto significa ¡el borrado de los archivos será para siempre! Sé muy
cuidados@ coon este comando.

Delete directory: Windows Powershell, OS X and Linux


Delete directory: Windows Command Prompt
¡Hecho! Estás seguro que lo eliminaste realmente, verifica:

Check deletion: OS X and Linux


Check deletion: Windows

Salir
¡Eso es todo por ahora! Tú puedes ahora cerrar la línea de comandos o consola
sin problemas. Hazlo como un hacker, ¿vale? :)

Exit: OS X and Linux


Exit: Windows

Comando
Comando
(Mac OS / Descripción Ejemplo
(Windows)
Linux)

Comando
Comando
(Mac OS / Descripción Ejemplo
(Windows)
Linux)

exit exit Cierra la ventana exit

cd cd Cambia el directorio cd test

Mostrar el directorio
cd pwd cd (Windows) o pwd (Mac OS / Linux)
actual

Lista
dir ls dir
directorios/archivos

copy cp Copia de archivos copy c:\test\test.txt c:\windows\test.txt

move mv Mueve archivos move c:\test\test.txt c:\windows\test.txt

Crea un nuevo
mkdir mkdir mkdir testdirectory
directorio

rmdir (o
rm Eliminar un archivo del c:\test\test.txt
del)

rmdir /S rm -r Eliminar un Directorio rm -r testdirectory

man Obtener ayuda para un


[CMD] /? cd /? (Windows) o man cd (Mac OS / Linux)
[CMD] comando
¿ tamaños de botones ?

Codigo:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

class FrameEleccion extends JFrame{

public FrameEleccion(){

setTitle("Eleccion");
setBounds(500,500,400,400);

add(PanelEleccion, BorderLayout.NORTH);
PanelEleccion.setLayout(new GridLayout(0,1,1,10));

PanelEleccion.add(boton1);
PanelEleccion.add(boton2);
PanelEleccion.add(boton3);
PanelEleccion.add(boton4);

EventoEleccion eventoBotones=new EventoEleccion(this);

boton1.addActionListener(eventoBotones);
boton2.addActionListener(eventoBotones);
boton3.addActionListener(eventoBotones);
boton4.addActionListener(eventoBotones);

setVisible(true);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

class EventoEleccion implements ActionListener{

private FrameEleccion eleccion;

public EventoEleccion(FrameEleccion eleccion) {

this.eleccion = eleccion;

}
public void actionPerformed(ActionEvent e) {

JButton source = (JButton)e.getSource();

if (boton1 == source ){

FrameEntrada frameEntrada=new FrameEntrada();


eleccion.dispose();

}else if (boton2 == source ){

FrameSalida frameSalida=new FrameSalida();


eleccion.dispose();

}else if (boton3 == source ){

FrameAnadirDatos frameAnadirDatos=new FrameAnadirDatos();


eleccion.dispose();

}else if (boton4 == source){

eleccion.dispose();

private JPanel PanelEleccion=new JPanel();


private JButton boton1=new JButton("Entrada");
private JButton boton2=new JButton("Salida");
private JButton boton3=new JButton("Añadir datos");
private JButton boton4=new JButton("Cerrar");

}
Gracias de antemano.

java java-swing java-ee botón java-8

compartirmejorar esta pregunta


formulada el 11 ene. 18 a las 2:09
Acoidan Negrín Socorro
6111 medalla de plata1212 medallas de bronce
añade un comentario
2 respuestas

activasmás antiguas votos

1
El tamaño de los componentes, en este caso de los botones, tiene más que ver con
el tipo de Layout que establezcas.

Tu le has establecido este layout setLayout(new GridLayout(0,1,1,10)) a tu panel...


PanelEleccion.setLayout(new GridLayout(0,1,1,10));
El cual hace que aparezca cada uno de los botones en una sola fila 'ocupen todo el
ancho de cada una de las filas'.

He creado otro panel a tu código, y lo he añadido a la parte central del marco,


estableciéndole otro layout. Al cual le he añadido un par de botones.

private JPanel panelCentral = new JPanel();


private JButton botonPrueba = new JButton("Prueba");
private JButton botonPrueba2 = new JButton("Prueba2");

add(panelCentral, BorderLayout.CENTER);
panelCentral.setLayout(new FlowLayout());
Y ahora para poder cambiar el tamaño del botón 'botonPrueba2', le establezco un
tamaño mínimo, un tamaño máximo y un tamaño preferido, que será el
que establezca siempre que pueda.
botonPrueba2.setMinimumSize(new Dimension(20,20));
botonPrueba2.setMaximumSize(new Dimension(150,60));
botonPrueba2.setPreferredSize(new Dimension(120,30));
panelCentral.add(botonPrueba2)
Property String Object Type
Button.actionMap ActionMap
Button.background Color
Button.border Border
Button.contentAreaFilled Boolean
Button.darkShadow Color
Button.dashedRectGapHeight Integer
Button.dashedRectGapWidth Integer
Button.dashedRectGapX Integer
Button.dashedRectGapY Integer
Button.defaultButtonFollowsFocus
Button.disabledForeground
Boolean
Color Button.disabledGrayRange
Integer[ ] Button.disabledShadow
Color Button.disabledText
Button.disabledToolBarBorderBackground
Color
Color
Button.focus Color
Button.focusInputMap InputMap
Button.font Font
Button.foreground Color
Button.gradient List
Button.highlight Color
Button.icon Icon
Button.iconTextGap Integer
Button.light Color
Button.margin Insets
Button.rollover Boolean
Button.rolloverIconType String
Button.select Color
Button.shadow Color
Button.showMnemonics Boolean
Button.textIconGap Integer
Button.textShiftOffset Integer
Button.toolBarBorderBackground Color
ButtonUI String

¿posiciones botones?

amaño y posicion de un JButton

Soy principiante en JAVA y resulta que no consigo ni posicionar un boton creado


(JButton) en la ventana de la aplicacion, ni darle unas dimensiones. Por mucho
que le doy una posición y unas dimensiones, me sale con un tamaño enorme.
Este es el código . ¿Donde está el fallo?

Código:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculadora{
public static void main (String [] arg){
JFrame ventana = new JFrame("Calculadora");
ventana.setSize(400,600);
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ventana.setVisible(true);

JButton boton0 = new JButton(" 0 ");


boton0.setBackground( SystemColor.control );
boton0.setBounds(new Rectangle(50,50,100,75));
ventana.add(boton0);
}

#2 (permalink)
11/06/2009, 05:11
Fecha de Ingreso: abril-2009
itubal Mensajes: 113
(Desactivado) Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Tamaño y posicion de un JButton

Hola:

Java no funciona así. No no estoy al día ni me sé las ultimas novedades ni


cambios por lo que otras personas te podran indicar mejor.
Ten en cuenta que Java se pensó para multiples plataformas y ya no te digo el lio
que puede haber con resoluciones de pantalla etc..
Por tanto y para que todos los componentes de tu GUI se vean en cualquier
plataforma y resolución se inventaron un sistema que es un poco engorroso.
Solo un apunte, añade más botones y verás como ellos se ajustan.

Tendrás que aprender algo sobre "layouts". Puedes verlo en

Documentación de SUN
Te tendrás que currar eso con paneles y layouts etc...

Si te das una vuelta porDocumentancion del API de SUN Verás que JButton tiene
el metodo setBounds() porque lo hereda de Component.

Creo que una vez probé un IDE y no utilizaba los layouts, sino que directamente
ponia los componentes igual que quieres hacer tu.. pero ni me acuerdo como los
hacia, ni me acuerdo del IDE que era.
Un saludo

#3 (permalink)
11/06/2009, 05:29
Fecha de Ingreso: junio-2009
Mensajes: 13
jefergalvis
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Tamaño y posicion de un JButton

Hola:
JButton b1;
//creacion del boton
b1=new JButton("1");
b1.reshape(20,90,60,40);// x,y,ancho,largo
getContentPane().add(b1);

Espero que te sirva


#4 (permalink)
11/06/2009, 06:09
Fecha de Ingreso: abril-2009
itubal Mensajes: 113
(Desactivado) Antigüedad: 10 años, 5 meses
Puntos: 1
Respuesta: Tamaño y posicion de un JButton

No he probado ni setBounds() ni reshape()...

Pero si miras aqui.. Lo que dice SUN sobre reshape verás que reshape() es un
metodo que está obsoleto.

SI no te funciona setBounds... no sé que hará reshape.. pero compilar deberas


compilar con la opción para que no te cante por obsoleto.
Por cierto el metodo que propone es... setBounds().

#5 (permalink)
11/06/2009, 09:58
Fecha de Ingreso: mayo-2007
Mensajes: 210
vdpazmino
Antigüedad: 12 años, 4 meses
Puntos: 8
Respuesta: Tamaño y posicion de un JButton

Por lo que veo esta bien tu codigo, lo que te falta es la siguiente linea:

ventana.setLayout(null);

salu2

Última edición por vdpazmino; 11/06/2009 a las 11:02


#6 (permalink)
12/06/2009, 02:37
Fecha de Ingreso: mayo-2008
Mensajes: 75
matheo
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Tamaño y posicion de un JButton

Cita:
Iniciado por vdpazmino
Por lo que veo esta bien tu codigo, lo que te falta es la siguiente linea:

ventana.setLayout(null);

También podría gustarte