J'ai un ensemble de JInternalFrame
dans un Jpanel
. et le JPanel
est gridlayout. Je dois définir un seul JInternalFrame
à sélectionner dans le conteneur (JPanel
). J'ai créé dynamiquement l'instance JInternalFrame
et l'ajouter au panneau. J'ai toujours la liste de JInternalFrame
mais comment en faire un seul pour définir sélectionné.Sélection parmi plusieurs JInternalFrames dans un conteneur (JPanel)
0
A
Répondre
3
Comme suggéré dans How to Use Internal Frames, "Habituellement, vous ajoutez des cadres internes à un volet de bureau." Cela vous permet d'utiliser activateFrame()
pour indiquer qu'un cadre a le focus. Dans ce example, un javax.swing.Action
est utilisé pour sélectionner des images d'un menu via setSelected()
. Une discussion supplémentaire peut être trouvée dans ce Q&A.
Addendum: Si vous souhaitez utiliser un JPanel
, peut-être d'obtenir une belle GridLayout
, une aproche est d'utiliser un InternalFrameListener
comme indiqué ci-dessous.
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.beans.PropertyVetoException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;
/** @see https://stackoverflow.com/questions/8389640 */
public class InternalGrid extends JPanel {
private final List<MyFrame> list = new ArrayList<MyFrame>();
public InternalGrid() {
super(new GridLayout(2, 2));
for (int i = 0; i < 4; i++) {
MyFrame f = new MyFrame("Frame", i);
list.add(f);
this.add(f);
}
}
private void display() {
JFrame f = new JFrame("InternalGrid");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new InternalGrid().display();
}
});
}
class MyFrame extends JInternalFrame {
MyFrame(String name, int i) {
super(name + String.valueOf(i), true, true, true, false);
this.pack();
this.setVisible(true);
this.setLayout(new FlowLayout());
this.add(new JLabel("Hi, I'm " + this.getTitle()));
this.addInternalFrameListener(new InternalFrameAdapter() {
@Override
public void internalFrameActivated(InternalFrameEvent e) {
for (MyFrame f : list) {
if (f != MyFrame.this) {
try {
f.setSelected(false);
} catch (PropertyVetoException ex) {
System.out.println(ex);
}
}
}
}
});
}
}
}
Questions connexes
- 1. Sélection d'une radio parmi plusieurs
- 2. Codeigniter: Sélection parmi plusieurs tables
- 3. Sélection parmi plusieurs tables dans Rails
- 4. Objet partagé entre plusieurs JInternalFrames
- 5. Sélection d'éléments parmi plusieurs choix ListView - android
- 6. Sélection parmi plusieurs tables sans doublon
- 7. Sélection parmi plusieurs tables avec plusieurs clauses where
- 8. Sélection parmi trois valeurs
- 9. Gestion de JInternalFrames dans un MDI Swing
- 10. Suppression d'un JPanel dans un JPanel ... dans un JPanel
- 11. Java Swing arrangement JInternalFrames
- 12. JQuery choisir parmi la sélection
- 13. Sélection d'un conteneur div
- 14. Question sur JInternalFrames
- 15. Naviguer parmi plusieurs activités
- 16. Choisissez parmi plusieurs lignes
- 17. Sélection parmi les langues CjK sur l'iPhone
- 18. Sélection du bon conteneur ItemsSource
- 19. JPanel dans un JPanel n'écoute pas KeyListener
- 20. JScrollPane avec JPanel dans un autre JPanel
- 21. Centrer Plusieurs divs flottants dans un conteneur
- 22. Comment choisir parmi plusieurs collections dans Matplotlib
- 23. Comment obtenir l'ordre z de JInternalFrames dans un JDesktopPane
- 24. Rechercher parmi plusieurs valeurs dans Doctrine
- 25. Paging parmi plusieurs racines cumulées
- 26. Partager pager parmi plusieurs jqgrid
- 27. Requêtes conditionnelles parmi plusieurs tables
- 28. Choisissez parmi plusieurs appareils dans XCode
- 29. Requête mysql, sélection parmi 3 tables
- 30. Linq. Choisissez parmi plusieurs tables
thank u ur réponse, mais j'ai une situation à utiliser dans un JPanel ici. – Pratap
trashgod est juste cependant; soit substituer le parent JPanel par un JDesktopPane, ou vous avez un cas que personne d'autre n'utilise. Vous pouvez commencer à placer chaque JInternalFrame dans son propre JDesktopPane et, lors du changement de sélection, sélectionner celui qui a déjà été sélectionné. –
@Joop soulève un bon point. Par exemple, «iconifiable» devient sans signification en dehors d'un volet de bureau. Code et image mis à jour. – trashgod