Au moment où j'écris une petite application client. J'ai une fenêtre avec une JTextArea (zone d'affichage pour la sortie du serveur) et une liste d'utilisateurs.gauche Masquer/composant droit d'un JSplitPane (ou autre mise en page)
Mon plan est d'afficher/masquer cette liste d'utilisateurs sur un élément de menu, mais je ne sais pas comment. Mes idées:
Utilisez un BorderLayout: sans JScrollPane pour la liste. Il fonctionne, mais je ne peux pas changer la largeur de la liste des utilisateurs (Parce que BorderLayout.WEST et BorderLayout.EAST ignorent la largeur)
Utilisez un BorderLayout avec un JScrollPane pour la liste des utilisateurs et afficher/masquer les JScrollPane -> Ne fonctionne pas, ne me demandez pas pourquoi ... de toute façon, cette façon n'est pas une bonne solution
Utilisez un JSplitPane, définissez le poids de redimensionnement à 0.9. Lorsque la liste des utilisateurs devrait disparaître, je minimise le bon composant (aka la liste des utilisateurs) -> Comment?
Mon code au moment:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
public class SplitPaneTest extends JFrame implements ActionListener
{
private JSplitPane splitPane;
private JTextArea textDisplay;
private JList<String> listUser;
private JScrollPane scrollTextDisplay;
private JScrollPane scrollListUser;
private JCheckBox itemShowUser;
public static void main(String[] args)
{
new SplitPaneTest();
}
public SplitPaneTest()
{
setTitle("Chat Client");
setMinimumSize(new Dimension(800, 500));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
textDisplay = new JTextArea();
listUser = new JList<>();
DefaultListModel<String> modelUser = new DefaultListModel<>();
listUser.setModel(modelUser);
modelUser.addElement(new String("User 1"));
modelUser.addElement(new String("User 2"));
modelUser.addElement(new String("User 3"));
scrollTextDisplay = new JScrollPane(textDisplay);
scrollListUser = new JScrollPane(listUser);
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
splitPane.setLeftComponent(scrollTextDisplay);
splitPane.setRightComponent(scrollListUser);
splitPane.setResizeWeight(0.9);
setContentPane(splitPane);
JMenuBar menubar = new JMenuBar();
JMenu menuWindow = new JMenu("Window");
itemShowUser = new JCheckBox("Show user list");
itemShowUser.addActionListener(this);
itemShowUser.setSelected(true);
menuWindow.add(itemShowUser);
menubar.add(menuWindow);
setJMenuBar(menubar);
setVisible(true);
}
public boolean isUserListEnabled()
{
return itemShowUser.isSelected();
}
public void setUserListEnabled(boolean status)
{
scrollListUser.setVisible(status);
}
@Override
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource() == itemShowUser)
{
boolean status = isUserListEnabled();
setUserListEnabled(status);
}
}
}
Et le résultat est:
Et caché JScrollPane scrollListUser:
Quelqu'un peut-il me donner un tipp? La liste d'utilisateurs est toujours visible (je pensais que le JSplitPane repeindrait ..). Je viens de Qt (C++) et dans Qt je pourrais utiliser un widget dock - mais Swing n'en a pas et utiliser des libs tiers .... Je ne sais pas - peut-être il y a une solution.
Merci beaucoup;) – swaechter