Question

Cela me rend très en colère, je l'ai travaillé pendant 2 jours, ont 2 livres ouverts et ont regardé à travers eux, et ne peut toujours pas obtenir ce programme pour exécuter la façon dont je veux courir. Je reçois au point où, si cela ne l'aide, je quitte.

Je veux une application Frame SIMPLE. Il a un JComboBox centré en haut. À côté de lui est assez champ de texte grand pour montrer que des chiffres tels que « 49,99 $ » Ci-dessous, il est un endroit pour une zone de texte montrant termes de service En dessous, la case à cocher qui accepte les termes de service En dessous, 2 boutons « Accepter » et « déclin »

J'ai travaillé pendant 2 jours, voici le codage:

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: Oublié d'ajouter le deuxième programme

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

Comment puis-je obtenir ce que tout soit là où je veux et afficher? Je suis très confus à cause de cela et maintenant à peine obtenir même comment le travail Cadres.

Était-ce utile?

La solution

Composants Swing doivent être posés dans un certain ordre.

Vous commencez avec un JFrame. Les seuls éléments qui sont placés dans le JFrame sont JMenuBar et un JPanel. Vous ne pas ajouter d'autres composants dans un JFrame. Vous ajoutez des composants dans un JPanel.

Voici le code de Nick, réorganisé pour définir les composants dans l'ordre correct. Je GridLayout parce qu'il était plus rapide. Vous devez utiliser GridBagLayout, comme l'a dit 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;
    }
}

Je déplacé le code JMenuBar dans sa propre méthode afin, nous l'espérons, le reste du code est plus facile à comprendre.

J'ai JPanel maître, que tous les autres composants sont ajoutés à.

J'utilisé une autre JPanel pour tenir les deux JLabels et le JButton.

I utilisé un troisième JPanel pour maintenir le JComboBox.

Le modèle de base est la suivante:

  • Définir le JPanel.
  • Définir les composants.
  • Ajoutez les composants à la JPanel.
  • Ajoutez les JPanel au maître JPanel
  • Ajoutez le maître JPanel à la JFrame.

Autres conseils

Nick. Je pense que la première chose que vous devez effacer est de savoir exactement ce que vous voulez.

Je vous ai aidé dans cette question https: //stackoverflow.com/questions/3055777/how-to -...

D'après ce que vous avez déjà vous décrire ce que vous avez besoin. Quel est le problème avec ceci:

Alors, je pense vraiment que vous devriez décrire clairement ce que vous voulez, afin de l'obtenir.

Nous vous aider, mais vous devez définir clairement ce que votre problème.

1. Votre deuxième programme wont compilation. Vous essayez d'assigner un JFrame à un JPanel.

Il aurait été

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

2. Ça marche. Ce que vous voulez est là. Mais pas comme vous le voulez, parce que vous ne l'avez pas dit java comment vous voulez afficher. Essayez d'utiliser un LayoutManager comme GridBagLayout .

Si vous êtes pressé de créer une interface graphique, essayez un IDE comme NetBeans qui rend votre travail plus facile par glisser-déposer.

EDIT:

Exemple:

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();
    }
}

Avertissement: Ceci est un exemple de base juste pour donner un exemple. Non destiné à être le code de production; -)

Vous avez:

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);

Chaque objet Bar hérite de JFrame (à savoir un objet de Bar est un type de JFrame), mais on passe dans un objet JFrame différent (le paramètre de frame) dans le constructeur. Puis appelez quelques Vous méthodes sur l'objet Bar - telles que l'ajout des deux objets JLabel - et quelques-uns sur le JFrame passé en -. Telles que les méthodes de setVisible et setSize

Vous avez donc deux objets JFrame différents et que vous faites un travail à chacun d'eux et un seul d'entre eux est toujours prêt à être visible.

Il semble que est la seule raison pour laquelle vous passez dans le JFrame au constructeur est de définir le titre de la fenêtre. Si vous passez dans un String avec le titre au constructeur de Bar puis appel super(title); la première ligne du constructeur de Bar alors vous aurez pas besoin du tout passé dans JFrame

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top