sirve - titledborder java example
Mejores prácticas de la GUI de Java/Swing(desde el punto de vista del código) (2)
Dado que parece haber algún argumento sobre lo que constituye "mejores prácticas", le daré lo que he encontrado que funciona mejor para mí y mi razonamiento:
1. Cada ventana debe extender JFrame o JDialog (dependiendo del tipo de ventana). Esto facilita el control de las propiedades de la ventana sin especificar un objeto específico cada vez. Sin embargo, este es un caso más general, ya que se sabe que lo hago en ambos sentidos.
2. El método main()
debe estar en una clase separada. Esto aumenta la probabilidad de poder usar sus clases de ventana en otros lugares, ya que no están vinculados a implementaciones específicas. Técnicamente no hace una diferencia, pero el código de inicio de la aplicación simplemente no pertenece a una ventana.
3. Los oyentes deben estar en clases internas anónimas. Su clase de nivel superior no debe implementar ningún oyente. Esto evita que hacks como llamar a los métodos de escucha desde cualquier lugar excepto el objeto al que están conectados.
Aquí hay una aplicación simple con un solo marco para demostrar estas prácticas:
public class Main {
public static void main(String[] args) {
final String text = args[0];
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final MyWindow wnd = new MyWindow(text);
wnd.setVisible(true);
}
});
}
}
public class MyWindow extends JFrame {
public MyWindow(String text) {
super("My Window");
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
MyWindow.this.setVisible(false);
MyWindow.this.dispose();
}
});
final JButton btn = new JButton(text);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(MyWindow.this, "Button Pressed", "Hey", JOptionPane.INFORMATION_MESSAGE);
}
});
setLayout(new FlowLayout());
add(btn);
pack();
}
}
Como contraste con este wiki , estoy buscando la forma correcta de implementar los controles de Swing GUI desde un punto de vista de codificación.
He estado en una búsqueda para aprender Java y sus herramientas de GUI, pero encuentro tutorial de Internet después de tutorial de Internet que contiene todo lo main
y sé que esto no está bien.
También probé sistemas RAD como Netbeans y otros editores "visuales", pero cuando llego a la codificación tengo un montón de código que no sé la mitad de lo que hace, así que tengo la intención de aprender a mano el cambio de código, y conozco los controles básicos y el diseño, pero quiero hacerlo de la manera correcta.
¿Hay un modelo o estándar que me falta?
preguntas de ejemplo ...
¿Extiendo JFrame y creo mi propio objeto de marco? (Yo asumiría que sí)
¿Encapsulo el menú principal dentro de ese objeto de marco? o creo su propio? etc ...
¿Cómo separo la lógica "Ver" de la lógica "Aplicación"?
Básicamente, estoy buscando lo que es el estándar de la industria, sobre cómo organizar el código GUI.
Estoy de acuerdo con todos los puntos de Jonathan .
Cada ventana debe extender JFrame o JDialog ...
El método main () debe estar en una clase separada ...
Los oyentes deben estar en clases internas anónimas ...
También me gustaría añadir lo siguiente:
4.) Utilice GridBagLayout (GBL) con criterio. GBL es un Administrador de diseño muy poderoso, difícil de aprender, pero muy poderoso.
5.) Considera codificar a mano toda tu IU. Personalmente, no soy un fan del código producido por los editores visuales. Pero, dicho esto, no he usado un editor visual en varios años. Podrían ser mejores en este punto.
6.) Utilice JPanels con criterio. Mire su interfaz de usuario y determine qué componentes deben comportarse de la misma manera que los cambios de tamaño de la pantalla y luego agrupe esos componentes en un JPanel. Considere usar JPanels dentro de JPanels para obtener su comportamiento de cambio de tamaño correcto.
Normalmente tomo un enfoque ligeramente diferente al hacer que mis componentes manejen los eventos que Jonathan, pero creo que su enfoque es un poco más limpio que el mío.
Además, estudiar realmente el uso de MVC y Layered Architecture. Realmente es mejor no mezclar UI y la lógica empresarial.