Note that there are some explanatory texts on larger screens.

plurals
  1. POLayering of a HMI in Java Swing
    primarykey
    data
    text
    <p>I ask for your help because I want to develop an interface for a chat (I'm training with Sockets etc .). The problem is (I'm getting mad with it), I know exactly what I want but I can't do it!</p> <p>An image of what I expect :</p> <p><img src="https://i.stack.imgur.com/cueWl.jpg" alt="The theorical case"></p> <p>I used different JPanel to implement the different views and after that I tried to mix it with a GridBagLayout.</p> <p>The best I can obtain is this (I colored the header and the console panels) :</p> <p><img src="https://i.stack.imgur.com/XMn0V.jpg" alt="In practice"></p> <p>I implemented the different panels in different classes and I implement the main view in one class, so there is the mainView code :</p> <pre><code>import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.UIManager; import com.awax.tchat.client.panels.Header; import com.awax.tchat.client.panels.MessageBox; import com.awax.tchat.client.panels.ServerBox; import com.awax.tchat.client.panels.TchatBox; import com.awax.tchat.client.panels.UsersBox; public class TchatView extends JFrame { private static final long serialVersionUID = 1L; protected TchatModel tchatModel; protected TchatController tchatController; protected JMenuBar menuBar; // Barre des menus de la fenêtre protected JMenu menuFichier; // Menu Fichier protected JMenu menuAide; // Menu Aide protected Header header; // Entête du tchat protected MessageBox messageBox; // Boîte d'envoi des messages protected ServerBox serverBox; // Boîte connexion au serveur protected TchatBox tchatBox; // Affichage de la console protected UsersBox usersBox; // Boîte d'affichage des utilisateurs connectés public TchatView () { super("Tchat - v0.1 Alpha"); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setLocation(200, 100); this.setSize(new Dimension(1000, 800)); try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); } catch (Exception e) { e.printStackTrace(); } } /* * Méthodes publiques */ // Permet d'initialiser les différents panels de l'interface public void initView () { this.header = new Header(); this.messageBox = new MessageBox(this.tchatModel, this.tchatController); this.serverBox = new ServerBox(this.tchatModel, this.tchatController); this.tchatBox = new TchatBox(this.tchatModel, this.tchatController); this.usersBox = new UsersBox(this.tchatModel, this.tchatController); setStyle(); this.addWindowListener(new Window_Listener()); } /* * Méthodes protégées */ // Permet de créer les éléments de la fenêtre protected void setStyle () { GridBagConstraints gbc = new GridBagConstraints(); initMenuBar(); this.setLayout(new GridBagLayout()); gbc.weightx = 1.; gbc.weighty = 1.; gbc.anchor = GridBagConstraints.FIRST_LINE_START; gbc.fill = GridBagConstraints.HORIZONTAL; this.add(this.header, gbc); gbc.gridx = 0; gbc.gridy = 1; gbc.gridwidth = 1; gbc.gridheight = 2; gbc.anchor = GridBagConstraints.NORTHWEST; gbc.fill = GridBagConstraints.BOTH; this.add(this.tchatBox, gbc); gbc.gridx = 1; gbc.gridy = 0; gbc.gridwidth = 1; gbc.gridheight = 1; gbc.anchor = GridBagConstraints.FIRST_LINE_END; gbc.fill = GridBagConstraints.NONE; this.add(this.serverBox, gbc); gbc.gridx = 1; gbc.gridy = 2; gbc.gridwidth = 1; gbc.gridheight = 1; gbc.anchor = GridBagConstraints.PAGE_START; gbc.fill = GridBagConstraints.WEST; this.add(this.usersBox, gbc); gbc.gridx = 0; gbc.gridy = 3; gbc.gridwidth = 2; gbc.gridheight = 1; gbc.anchor = GridBagConstraints.FIRST_LINE_START; gbc.fill = GridBagConstraints.BOTH; this.add(this.messageBox, gbc); } // Permet de créer la barre des menus de la fenêtre protected void initMenuBar () { JMenuItem item1, item2, item3, item4; this.menuBar = new JMenuBar(); this.menuFichier = new JMenu("Fichier"); this.menuAide = new JMenu("Aide"); item1 = new JMenuItem("Item1"); item2 = new JMenuItem("Item2"); item3 = new JMenuItem("Item3"); item4 = new JMenuItem("Item4"); this.menuFichier.add(item1); this.menuFichier.add(item2); this.menuAide.add(item3); this.menuAide.add(item4); this.menuBar.add(this.menuFichier); this.menuBar.add(this.menuAide); this.setJMenuBar(this.menuBar); } /* * Listeners */ protected class Window_Listener implements WindowListener { @Override public void windowActivated (WindowEvent arg0) { } @Override public void windowClosed (WindowEvent arg0) { } @Override public void windowClosing (WindowEvent arg0) { tchatController.disconnectFromServer(); } @Override public void windowDeactivated (WindowEvent arg0) { } @Override public void windowDeiconified (WindowEvent arg0) { } @Override public void windowIconified (WindowEvent arg0) { } @Override public void windowOpened (WindowEvent arg0) { } } /* * Accesseurs */ public TchatModel getModel () { return tchatModel; } public void setModel (TchatModel tchatModel) { this.tchatModel = tchatModel; } public TchatController getController () { return tchatController; } public void setController (TchatController tchatController) { this.tchatController = tchatController; } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload