Tema Jpanel
Tema Jpanel
Tema Jpanel
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.
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.
<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>
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
<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.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.actividad_botones);
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"/>
<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.
<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:
<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" />
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
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.
<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>
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;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.actividad_botones);
String s = formato.format(fechaActual);
texto.setText(String.format("Botón presionado: %s", s));
}
}
<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.
}
});
<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>
@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.
@Override
public void onClick(View v) {
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:
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
@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;
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);
}
}
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.
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.
normal
enfocado (state_focused)
presionado (state_pressed)
deshabilitado (state_enabled > false).
Con lo anterior el código quedaría así:
bk_boton_plano.xml
<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
<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>
boton_presionado.xml
<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>
<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" />
<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" />
Opening: Windows
Opening: OS X
Opening: Linux
Ahora deberías ver una pantalla blanca o negra que espera a que introduzcas tus
comandos.
$ whoami olasitarska
Como puedes ver, el computador ha solo impreso tu nombre de usuario.
Ordenado, ¿ah? :)
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.
Crear un directorio
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:
Limpieza
No queremos dejar un enredo, así que removamos todo lo que hicimos hasta este
momento.
Salir
¡Eso es todo por ahora! Tú puedes ahora cerrar la línea de comandos o consola
sin problemas. Hazlo como un hacker, ¿vale? :)
Comando
Comando
(Mac OS / Descripción Ejemplo
(Windows)
Linux)
Comando
Comando
(Mac OS / Descripción Ejemplo
(Windows)
Linux)
Mostrar el directorio
cd pwd cd (Windows) o pwd (Mac OS / Linux)
actual
Lista
dir ls dir
directorios/archivos
Crea un nuevo
mkdir mkdir mkdir testdirectory
directorio
rmdir (o
rm Eliminar un archivo del c:\test\test.txt
del)
Codigo:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
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);
boton1.addActionListener(eventoBotones);
boton2.addActionListener(eventoBotones);
boton3.addActionListener(eventoBotones);
boton4.addActionListener(eventoBotones);
setVisible(true);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
this.eleccion = eleccion;
}
public void actionPerformed(ActionEvent e) {
if (boton1 == source ){
eleccion.dispose();
}
Gracias de antemano.
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.
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?
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);
#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:
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);
Pero si miras aqui.. Lo que dice SUN sobre reshape verás que reshape() es un
metodo que está obsoleto.
#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
Cita:
Iniciado por vdpazmino
Por lo que veo esta bien tu codigo, lo que te falta es la siguiente linea:
ventana.setLayout(null);