Foro sobre Java SE > ¿Cómo hacer que un botón llame a JPanels de otro Void?
Este código ni siquiera compila.
Las variables MainPane y Item1Det (por cierto, las variables en Java deben comenzar con letra minúscula), son locales en los métodos que las declaran.
El código si me compila, obviamente no coloque el código completo que son alrededor de 7000 lineas, solo coloque un esquema de la parte que me da error.
Gracias por el consejo.
¿Entonces no hay formas de utilizarlas en otros métodos?
Yo solo veo lo que has publicado; y tal y como lo haces, si las variables son locales al método, es imposible que se puedan acceder desde otro método.
¿Esas 7000 líneas están en una única clase?
Si, están en la misma clase. Sabes porque metí los paneles en un método porque si no los separo me da un error que dice algo así "El método a alcanzado el limite máximo de bytes 65535" busque por internet y todos recomiendan separar el método en partes, pero al parecer no funciona con elementos Jpanels. Y al separarlos solo me daba este error y pensaba que tenia solución, pero bueno me doy por vencido, tendré que crear otro tipo de formulario que no me ocupe tanto bytes. También he pensado en crear un metodo para lo demás (botones, etiquetas, y campos de textos y solo llamarlos cuando necesite crear un panel con esos items asi no tengo que hacer tantos panels.
Guenas.
Si una clase te ocupa 7000 lineas o un método pesa 64K, probablemente estas efectuando un enfoque incorrecto. Yo diría que eso es mas programación procedural metida en una clase que programación orientada a objetos.
Crea tus propios beans para cada parte del interfaz. Que cada uno de ellos se encargue de sus propias tareas. Cuando tengas los beans mas profundos ves metiéndolos en nuevos beans que los engloben y sigue haciendo lo mismo hacia arriba.
Al final tendrás muchas clases pequeñas con pocos métodos de bajo peso.
Un saludo
Como bien dice @Paposo, tienes un serio problema de arquitectura.
Sigue un ejemplo sobre el asunto: cada mensaje representa un archivo .java diferente.
El test es ejecutable, para que puedas comprobar que funciona correctamente.
No hay declaración de packages, por lo que puedes situar las clases donde te parezca oportuno.
/**
<p>
@author Carlos Hoces
*/
public class Test {
/**
@param args the command line arguments
*/
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new NewJFrame().setVisible(true);
}
});
}
}
/**
<p>
@author Carlos Hoces
*/
public class NewJFrame extends javax.swing.JFrame {
/** Creates new form NewJFrame */
public NewJFrame() {
initComponents();
}
/** 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() {
jPanel1 = new NewJPanel1();
jPanel2 = new NewJPanel2();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Panel 1")); // NOI18N
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 165, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 255, Short.MAX_VALUE)
);
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Panel 2")); // NOI18N
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 174, Short.MAX_VALUE)
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel2, 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()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addContainerGap())
);
pack();
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
// End of variables declaration
}
/**
<p>
@author Carlos Hoces
*/
public class NewJPanel1 extends javax.swing.JPanel {
/** Creates new form NewJPanel */
public NewJPanel1() {
initComponents();
}
/** 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() {
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);
}// </editor-fold>
// Variables declaration - do not modify
// End of variables declaration
}
/**
<p>
@author Carlos Hoces
*/
public class NewJPanel2 extends javax.swing.JPanel {
/** Creates new form NewJPanel */
public NewJPanel2() {
initComponents();
}
/** 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() {
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);
}// </editor-fold>
// Variables declaration - do not modify
// End of variables declaration
}
Muchas gracias, la verdad es que recién estoy aprendiendo a programar, y ahora gracias a uds estoy aprendiendo mas :) Gracias @Paposo por el consejo ahora tratare de ser mas modular y gracias @choces por el código, me dio una idea de como tengo que hacerlo :).
Hola amigos quisiera que me ayudasen con el siguiente error:
Resulta que tengo dos paneles separados en void pero sus botones (Que hace visible al otro) me dan error.
En esa parte están los errores.
public void menusDet()
public void menuPrin()
Aquí esta el código
public class FMform {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
FMform window = new FMform();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public FMform() {
initialize();
menuPrin();
menusDet();
}
public void initialize() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.setBounds(100, 100, 450, 300);
frame.getContentPane().setLayout(new CardLayout(0, 0));
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
JOptionPane.showMessageDialog(null,"Gracias",null, JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
});
}
public void menuPrin() {
final JPanel MainPane = new JPanel();
frame.getContentPane().add(MainPane, "name_24955855700893");
MainPane.setLayout(null);
JButton btnAceptar = new JButton("Aceptar");
btnAceptar.setBounds(345, 235, 89, 23);
MainPane.add(btnAceptar);
btnAceptar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
MainPane.setVisible(false);
Item1Det.setVisible(true); //Aqui me marca error, como si no existiera el panel
}
});
} //Cierro el void
public void menusDet() {
final JPanel Item1Det = new JPanel();
frame.getContentPane().add(Item1Det, "name_27068341279622");
Item1Det.setLayout(null);
JButton btnMenuDet1 = new JButton("Menú");
btnMenuDet1.setBounds(345, 238, 89, 23);
Item1Det.add(btnMenuDet1);
btnMenuDet1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
MainPane.setVisible(true); //Aqui me marca error, como si no existiera el panel
Item1Det.setVisible(false);
}
});
}//Cierro el void
}//Cierro la clase
Si me preguntan porque los tengo separados, es porque necesito hacerlos así, porque si los junto me da error de limite de la clase 65535 bytes (Tengo mas paneles pero todos me dan el mismo error).
Muchas gracias de antemano.