Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 27
  1. #1

    adding window to a container

    buongiorno a tutti,
    sto cercando di implementare un interfaccia grafica in java.
    l'interfaccia è un frame che ho diviso in due parti: un menù ad albero e un altro frame nel quale vorrei che apparissero le mie classi che seleziono usando il mio albero.
    in esecuzione però mi da un eccezione:Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container

    come posso fare?

    ecco parte della classe menu:

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.tree.*;
    import javax.swing.event.*;
    import java.lang.reflect.*;
    import java.util.*;

    public class Menu
    {
    public static void main(String[] args)
    {
    JFrame frame = new MenuFrame();

    frame.show();
    }
    }

    class MenuFrame extends JFrame implements TreeSelectionListener
    {
    public MenuFrame()
    {
    setTitle("Menu");
    setSize(400,300);
    addWindowListener
    (
    new WindowAdapter()
    {
    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    }

    }
    );


    //costruisce l'albero
    TreeNode root = makeTree();
    model = new DefaultTreeModel(root);
    tree = new JTree(model);
    //tree.setEditable(true);
    //tree.setRootVisible(false);

    //imposta modalità di selezione
    tree.addTreeSelectionListener(this);
    int mode = TreeSelectionModel.SINGLE_TREE_SELECTION;
    tree.getSelectionModel().setSelectionMode(mode);


    JFrame command = new JFrame();

    JSplitPane splitPane;
    JPanel albero = new JPanel();
    albero.setLayout(new GridLayout(1, 2));
    albero.add(new JScrollPane(tree));

    splitPane = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT, albero, command );
    splitPane.setOneTouchExpandable( true );
    splitPane.setDividerLocation( 150 );
    splitPane.setContinuousLayout(true);
    splitPane.setOneTouchExpandable(true);


    //aggiunge riquadro di scorrimento e vi inserisce l'albero
    Container contentPane = getContentPane();
    contentPane.add(splitPane, "Center");

    }
    public void valueChanged(TreeSelectionEvent event) {
    try
    {
    String face = tree.getLastSelectedPathComponent().toString();
    Class cls = Class.forName(face);
    command.add(new JScrollPane((JComponent)cls.newInstance()));
    getContentPane().add(command);
    }catch(Exception e)

    {e.printStackTrace();}

    }
    public TreeNode makeTree()
    {
    ...........................
    }

    private DefaultTreeModel model;
    private JTree tree;
    private JFrame command;
    }



    vi ringrazio per l'attenzione

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: adding window to a container

    Originariamente inviato da ironcuzzo
    sto cercando di implementare un interfaccia grafica in java.
    l'interfaccia è un frame che ho diviso in due parti: un menù ad albero e un altro frame nel quale vorrei che apparissero le mie classi che seleziono usando il mio albero.
    in esecuzione però mi da un eccezione:Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container
    Spiegami che senso avrebbe mettere un JFrame dentro un JFrame!!

    Se vuoi realizzare una interfaccia MDI allora è un conto, usa JDesktopPane/JInternalFrame. Altrimenti non ha senso. Ripensa bene tutta la tua interfaccia utente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    dunque, premetto che sono alle prime armi, il fatto è che io vorrei far si che dal mio menu possa chiamare le mie classi che dovrebbero apparire a lato....quale sarebbe la solozione più corretta per farlo?

  4. #4
    e soprattutto quali sarebbero le modifiche che dovrei apportare al codice....

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ironcuzzo
    io vorrei far si che dal mio menu possa chiamare le mie classi che dovrebbero apparire a lato....
    Cioè??? Spiega meglio quale è l'obiettivo finale. Le tue classi ... quali?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    allora il codice del mio menù è presente....poi ho pensato di usare delle classi aggiuntive (una per ogni voce del menu ad albero) che estendono jframe che appaiono alla selezione della voce nell'albero...solo che io verrei che apparissero dentro il frame che ho creato.....è possibile...e se non lo è quale altra soluzione mi darebbe lo stesso risultato?

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Per farlo, come ti è già stato suggerito, devi utilizzare JDesktopPane e JInternalFrame, visto che ciò che chiedi di fare, in sostanza, è un'applicazione MDI (Multiple Document Interface).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ironcuzzo
    allora il codice del mio menù è presente....poi ho pensato di usare delle classi aggiuntive (una per ogni voce del menu ad albero) che estendono jframe che appaiono alla selezione della voce nell'albero...solo che io verrei che apparissero dentro il frame che ho creato.....è possibile...e se non lo è quale altra soluzione mi darebbe lo stesso risultato?
    Tu dici "che estendono jframe". Ma perché proprio JFrame? L'hai già vista la questione: non puoi mettere un JFrame dentro un JFrame.

    Se vuoi fare in modo che la tua applicazione abbia una area in cui tra N componenti, solo 1 venga visualizzato volta per volta, allora usa JTabbedPane o il layout manager CardLayout.

    Se non è questo che vuoi ... allora non ho capito io.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    hai capito...quindi la soluzione nella pratica quale sarebbe....dare un altra tipologia di estensione alle classi che voglio visualizzare volta per volta?

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da ironcuzzo
    hai capito...quindi la soluzione nella pratica quale sarebbe....dare un altra tipologia di estensione alle classi che voglio visualizzare volta per volta?
    Sì. Per la precisione JInternalFrame.

    PS: non si dice "dare un'estensione alle classi" (un'estensione, al massimo, la puoi dare ad un file)... si dice che una classe "estende" una classe, oppure che "deriva" da una classe.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.