Domanda

Questo mi sta facendo molto arrabbiato, ho lavorato su questo per 2 giorni, ho 2 libri aperti e hanno guardato attraverso di loro, e ancora non riesco a trovare questo programma per eseguire il modo in cui voglio correre. Ci sto arrivando al punto in cui se questo non risolve il problema, ho smesso.

Voglio un'applicazione semplice cornice. Ha un JComboBox centrato nella parte superiore. Accanto ad essa è un campo di testo abbastanza grande da mostrare cifre numeriche, quali "$ 49.99" Qui di seguito è un posto per un'area di testo che mostra i termini di servizio Sotto c'è la casella di controllo accettare i termini di servizio Sotto c'è 2 pulsanti "Accetta" e "Decline"

Ho lavorato su questo per 2 giorni, qui è la codifica:

public class Bar extends JFrame implements ActionListener
{
    public Bar(final JFrame frame)
    {
        String[] tests = { "A+ Certification", "Network+ Certification", "Security+ Certification", "CIT Full Test Package" };
        JButton button = new JButton("Click Meh");
        add(new JLabel("Welcome to the CIT Test Program "));
        add(new JLabel("Please select which Test Package from the list below."));
        frame.setVisible(true);
        frame.setSize(250,250);
        JPanel pane1 = new JPanel(new FlowLayout());
        JPanel pane2 = new JPanel(new FlowLayout());

        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        JMenu editMenu = new JMenu("Edit");
        JMenu helpMenu = new JMenu("Help");
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(helpMenu);
        JMenuItem newMenu = new JMenuItem("New  (Ctrl+N)");
        JMenuItem openMenu = new JMenuItem("Open  (Ctrl+O)");
        JMenuItem saveMenu = new JMenuItem("Save  (Ctrl+S)");
        saveMenu.addActionListener(this);
        JMenuItem exitMenu = new JMenuItem("Exit  (Ctrl+W)");
        JMenuItem cutMenu = new JMenuItem("Cut  (Ctrl+X)");
        JMenuItem copyMenu = new JMenuItem("Copy  (Ctrl+C)");
        JMenuItem pasteMenu = new JMenuItem("Paste  (Ctrl+V)");
        JMenuItem infoMenu = new JMenuItem("Help  (Ctrl+H)");
        fileMenu.add(newMenu);
        fileMenu.add(openMenu);
        fileMenu.add(saveMenu);
        fileMenu.add(exitMenu);
        editMenu.add(cutMenu);
        editMenu.add(copyMenu);
        editMenu.add(pasteMenu);
        helpMenu.add(infoMenu);
        frame.setJMenuBar(menuBar);
        JComboBox packageChoice =  new JComboBox(tests);
        frame.add(packageChoice);


    }

     public void actionPerformed(ActionEvent e)
  {
  Object source = e.getSource();
  {
  }

}

EDIT: Ho dimenticato di aggiungere il secondo programma

public class JFrameWithPanel
{
    public static void main(String[] args)
    {
         JPanel panel = new Bar(new JFrame("CIT Test Program"));
    }
}

Come faccio a ottenere questo di avere tutto dove voglio e presentarsi? Sono molto confuso a causa di questo e ora a malapena capito come funzionano Frames.

È stato utile?

Soluzione

Componenti in Swing devono essere disposti in un certo ordine.

Si inizia con un JFrame. Gli unici componenti che vengono inseriti nel JFrame sono JMenuBar e un JPanel. Non aggiungere altri componenti in un JFrame. Si aggiunge componenti in un JPanel.

Ecco il codice di Nick, riorganizzato per definire i componenti nell'ordine corretto. Ho usato GridLayout perché era più veloce. Si dovrebbe usare GridBagLayout, come ha detto Nivas.

public class Bar {

    private static final long serialVersionUID = 1L;

    public Bar(final JFrame frame) {
        JMenuBar menuBar = buildMenuBar();
        frame.setJMenuBar(menuBar);

        JPanel masterPanel = new JPanel(new GridLayout(2, 1));

        JPanel pane1 = new JPanel(new GridLayout(3, 1));
        pane1.add(new JLabel("Welcome to the CIT Test Program "));
        pane1.add(new JLabel("Please select which Test Package from the list below."));
        JButton button = new JButton("Click Me");
        pane1.add(button);

        JPanel pane2 = new JPanel(new GridLayout(1, 1));
        String[] tests = { "A+ Certification", "Network+ Certification",
                "Security+ Certification", "CIT Full Test Package" };
        JComboBox packageChoice = new JComboBox(tests);
        pane2.add(packageChoice);

        masterPanel.add(pane1);
        masterPanel.add(pane2);

        frame.add(masterPanel);
        frame.pack();

        frame.setVisible(true);
//      frame.setSize(250, 250);

    }

    public JMenuBar buildMenuBar() {
        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        JMenu editMenu = new JMenu("Edit");
        JMenu helpMenu = new JMenu("Help");
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(helpMenu);
        JMenuItem newMenu = new JMenuItem("New  (Ctrl+N)");
        JMenuItem openMenu = new JMenuItem("Open  (Ctrl+O)");
        JMenuItem saveMenu = new JMenuItem("Save  (Ctrl+S)");
        saveMenu.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub

            }
        });
        JMenuItem exitMenu = new JMenuItem("Exit  (Ctrl+W)");
        JMenuItem cutMenu = new JMenuItem("Cut  (Ctrl+X)");
        JMenuItem copyMenu = new JMenuItem("Copy  (Ctrl+C)");
        JMenuItem pasteMenu = new JMenuItem("Paste  (Ctrl+V)");
        JMenuItem infoMenu = new JMenuItem("Help  (Ctrl+H)");
        fileMenu.add(newMenu);
        fileMenu.add(openMenu);
        fileMenu.add(saveMenu);
        fileMenu.add(exitMenu);
        editMenu.add(cutMenu);
        editMenu.add(copyMenu);
        editMenu.add(pasteMenu);
        helpMenu.add(infoMenu);
        return menuBar;
    }
}

Mi sono trasferito il codice JMenuBar nel proprio metodo in modo, si spera, il resto del codice è più facile da capire.

Ho un maestro JPanel, che tutti gli altri componenti sono aggiunti a.

ho usato un'altra JPanel per contenere i due JLabels e il JButton.

Ho usato un terzo JPanel per tenere il JComboBox.

Il modello di base è la seguente:

  • Definire il JPanel.
  • Definisci i componenti.
  • Aggiungi i componenti al JPanel.
  • Aggiungi il JPanel al master JPanel
  • Aggiungi il JPanel master per il JFrame.

Altri suggerimenti

Nick. Penso che la prima cosa che dovete cancellare è quello di sapere esattamente quello che vuoi.

I ti ha aiutato in questa domanda https: //stackoverflow.com/questions/3055777/how-to -...

Da quello che stai descrivendo si dispone già di che cosa avete bisogno. Cosa c'è di sbagliato con questo:

alt text

Quindi, credo davvero che si dovrebbe descrivere chiaramente ciò che si desidera, al fine di ottenerlo.

potrebbe aiutare, ma è necessario definire chiaramente che cosa il vostro problema.

1. Il vostro secondo programma non si compilano. Si sta tentando di assegnare un JFrame a un JPanel.

E 'dovuto essere

 JFrame frame = new Bar(new JFrame("CIT Test Program")); 

2. Funziona. Ciò che si vuole è lì. Ma non come lo vuoi, perché non avete detto java come si desidera visualizzare. Provare a usare un LayoutManager come GridBagLayout .

Se siete in fretta per creare una GUI, prova un IDE come NetBeans che rende il vostro lavoro più facile tramite drag and drop.

EDIT:

Un esempio:

public class TestN extends JFrame
{
    private JLabel label ;
    private JComboBox combo;
    private JButton button;
    public TestN()
    {
        label = new JLabel("Label:");
        combo = new JComboBox();
        combo.addItem("Item 1");
        combo.addItem("Item 2");
        combo.addItem("Item 3");

        setLayout(new GridBagLayout());

        GridBagConstraints c1 = new GridBagConstraints();
        c1.gridx = 0;
        c1.gridy = 0;
        c1.weightx = 1;
        c1.weighty = 1;
        add(label, c1);

        GridBagConstraints c2 = new GridBagConstraints();
        c2.gridx = 1;
        c2.gridy = 0;
        c2.weightx = 1;
        c2.weighty = 1;
        add(combo, c2);

        button = new JButton("Ok");
        GridBagConstraints c3 = new GridBagConstraints();
        c3.gridx = 2;
        c3.gridy = 0;
        c3.weightx = 1;
        c3.weighty = 1;
        add(button, c3);

        setTitle("Test");
        setSize(200,100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args)
    {
        new TestN();
    }
}

Disclaimer: Questo è un esempio di base solo per dare un esempio. Non vuole essere il codice di produzione; -)

Hai:

public class Bar extends JFrame implements ActionListener
{
    public Bar(final JFrame frame)
    {
        String[] tests = { "A+ Certification", "Network+ Certification", "Security+ Certification", "CIT Full Test Package" };
        JButton button = new JButton("Click Meh");
        add(new JLabel("Welcome to the CIT Test Program "));
        add(new JLabel("Please select which Test Package from the list below."));
        frame.setVisible(true);
        frame.setSize(250,250);

Ogni oggetto eredita Bar da JFrame (cioè un oggetto Bar è un tipo di JFrame), ma si passa in un oggetto JFrame diversa (il parametro frame) nel costruttore. È quindi chiamare alcuni metodi per l'oggetto Bar - come l'aggiunta di due oggetti JLabel - e un po 'sul passato-in JFrame -. Come ad esempio i metodi setVisible e setSize

In modo da avere due diversi oggetti JFrame e fare un po 'di lavoro per ciascuno di essi, e solo uno di loro è mai impostato per essere visibile.

Sembra che è l'unico motivo si sta passando nel JFrame al costruttore è quello di impostare il titolo della finestra. Se si passa in un String con il titolo al costruttore Bar e super(title); poi chiamata come la prima linea del costruttore Bar allora non sarà necessario il passato-in JFrame a tutti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top