Siguiendo con la tónica de las clases de Algoritmo y Programación de mi Universidad, aquí les dejo como hacer una tabla de multiplicar con JFrame utilizando JLabel para mostrar la información.

import java.awt.GridLayout;
import javax.swing.*;

/* @author angel */
public class TablaMultConFrame extends javax.swing.JFrame {

import java.awt.GridLayout;
import javax.swing.*;

/**
*
* @author angel
*/
public class TablaMultConFrame extends javax.swing.JFrame {

/**
* Creates new form TablaMultConFrame
*/
public TablaMultConFrame() {
initComponents();
// atraigo el foco hacia el primer campo del frame
txt_multiplo.requestFocus();
}

/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings(«unchecked»)
// <editor-fold defaultstate=»collapsed» desc=»Generated Code»>
private void initComponents() {

pnl_titulo = new javax.swing.JPanel();
lbl_titulo = new javax.swing.JLabel();
btn_volver = new javax.swing.JButton();
fila = new javax.swing.JPanel();
pnl_botones = new javax.swing.JPanel();
btn_limpiar = new javax.swing.JButton();
btn_ejecutar = new javax.swing.JButton();
btn_salir = new javax.swing.JButton();
pnl_multiplo = new javax.swing.JPanel();
lbl_multiplo = new javax.swing.JLabel();
txt_multiplo = new javax.swing.JTextField();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

pnl_titulo.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 5, 10));

lbl_titulo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
lbl_titulo.setText(«Tabla de Multiplicar segun Nùmero Dado»);
pnl_titulo.add(lbl_titulo);

btn_volver.setText(«Volver»);
btn_volver.setToolTipText(«Volver al Menu Principal»);
pnl_titulo.add(btn_volver);

fila.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
fila.setPreferredSize(new java.awt.Dimension(376, 202));

javax.swing.GroupLayout filaLayout = new javax.swing.GroupLayout(fila);
fila.setLayout(filaLayout);
filaLayout.setHorizontalGroup(
filaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
filaLayout.setVerticalGroup(
filaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 240, Short.MAX_VALUE)
);

pnl_botones.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 35, 5));

btn_limpiar.setText(«Limpiar»);
btn_limpiar.setToolTipText(«Limpie los resultados»);
btn_limpiar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btn_limpiarActionPerformed(evt);
}
});
pnl_botones.add(btn_limpiar);

btn_ejecutar.setText(«Ejecutar»);
btn_ejecutar.setToolTipText(«Ejecute este rograma»);
btn_ejecutar.setPreferredSize(new java.awt.Dimension(80, 27));
btn_ejecutar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btn_ejecutarActionPerformed(evt);
}
});
pnl_botones.add(btn_ejecutar);

btn_salir.setText(«Salir»);
btn_salir.setToolTipText(«Salir del Programa»);
btn_salir.setPreferredSize(new java.awt.Dimension(80, 27));
btn_salir.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btn_salirActionPerformed(evt);
}
});
pnl_botones.add(btn_salir);

lbl_multiplo.setText(«Tabla del:»);
pnl_multiplo.add(lbl_multiplo);

txt_multiplo.setHorizontalAlignment(javax.swing.JTextField.CENTER);
txt_multiplo.setToolTipText(«Introduzca aqui el numero a multiplicar»);
txt_multiplo.setPreferredSize(new java.awt.Dimension(75, 27));
pnl_multiplo.add(txt_multiplo);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(pnl_botones, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addGap(6, 6, 6)
.addComponent(fila, javax.swing.GroupLayout.DEFAULT_SIZE, 350, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(pnl_multiplo, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(pnl_titulo, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(pnl_titulo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(pnl_multiplo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(fila, javax.swing.GroupLayout.DEFAULT_SIZE, 240, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(pnl_botones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
);

pack();
setLocationRelativeTo(null);
}// </editor-fold>

private void btn_ejecutarActionPerformed(java.awt.event.ActionEvent evt) {
// capturo el multiplo q voy a utilizar para crear la tabla
int mult = Integer.parseInt(txt_multiplo.getText());
// configuro el panel «fila» para q sea gridLayout
GridLayout layout = new GridLayout(10, 1, 2, 2);
// aqui quise intentar con flowlayout pero no me gustò… prueben uds
//FlowLayout layout = new FlowLayout(FlowLayout.CENTER,5, 5);
fila.setLayout(layout);
// creo un arreglo de Jlabels que me llegue hasta 10 q es lo q necesito
JLabel[] lbl_mlta = new JLabel[11];

/* casting del contador q cambiará para q en la tabla se despliegue el
multiplicador desde el 1 hasta el 10 */
int contador = 1;

// ciclo q se repetirá en el q creo la tabla como es necesario
for (int i=1; i <= 10 ; i++){
lbl_mlta[i] = new JLabel(mult + » x » + contador + » = » + (contador * mult),JLabel.CENTER);
contador++;// aumento el contador aqui porq sino me multiplica siempre por el mismo numero
fila.add(lbl_mlta[i]);// añado los Jlabels creados al panel «fila»
setVisible(true);// hago visible el panel «fila»
}
}

private void btn_salirActionPerformed(java.awt.event.ActionEvent evt) {
// para el boton salida:
System.exit(0);
}

private void btn_limpiarActionPerformed(java.awt.event.ActionEvent evt) {
// Para limpiar el panel y la caja de texto donde coloco el multiplo
txt_multiplo.setText(«»);
fila.removeAll();
fila.repaint();
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate=»collapsed» desc=» Look and feel setting code (optional) «>
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if («Nimbus».equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(TablaMultConFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>

/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new TablaMultConFrame().setVisible(true);
}
});
}

// Variables declaration – do not modify
private javax.swing.JButton btn_ejecutar;
private javax.swing.JButton btn_limpiar;
private javax.swing.JButton btn_salir;
private javax.swing.JButton btn_volver;
private javax.swing.JPanel fila;
private javax.swing.JLabel lbl_multiplo;
private javax.swing.JLabel lbl_titulo;
private javax.swing.JPanel pnl_botones;
private javax.swing.JPanel pnl_multiplo;
private javax.swing.JPanel pnl_titulo;
private javax.swing.JTextField txt_multiplo;
// End of variables declaration
}

Es de hacer notar que es un poco intrincado hacer 10 JLabels (como quise hacerlo al principio…. novatadas mías..!), luego meterle los datos que necesito y por ultimo hacer que se muestren los resultados de la multiplicación porque quedaría un script sumamente largo y poco practico y entendible, así que lo que hacemos es crear los JLabels en forma de arreglo y con un bucle o ciclo o como quieran llamarlo, los metemos en un JPanel – gridLayout con toda la información y cálculos que necesitamos que se muestren y listo.