Frage

Das macht mich sehr wütend, ich habe für 2 Tage daran gearbeitet, habe 2 Bücher geöffnet und haben durch sie sieht, und immer noch nicht dieses Programm bekommen kann, wie ich will es laufen laufen. Ich bin zu dem Punkt, wo, wenn dies nicht hilft, ich beenden.

Ich möchte eine einfache Rahmenapplikation. Es hat eine JComboBox an der Spitze zentriert. Gleich daneben ist ein Textfeld groß genug Ziffern wie „$ 49.99“ zeigen Darunter ist ein Ort für einen Textbereich Bezug auf Service zeigt Darunter das Kontrollkästchen, um die Nutzungsbedingungen einverstanden ist Darunter 2 Tasten ist „Übernehmen“ und „Ablehnen“

Ich habe für 2 Tage daran gearbeitet, hier ist die Codierung:

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: Haben Sie das zweite Programm hinzufügen

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

Wie kann ich dies alles haben, wo ich es will und zeigen? Ich bin sehr verwirrt, weil dieser und jetzt kaum noch bekommen, wie Frames Arbeit.

War es hilfreich?

Lösung

Komponenten in Swing haben in einer bestimmten Reihenfolge angeordnet werden.

Sie beginnen mit einem JFrame. Die einzigen Komponenten, die in der JFrame platziert werden, sind ein JMenuBar und ein JPanel. Sie haben noch keine andere Komponenten in einem JFrame hinzufügen. Sie fügen Komponenten in einem JPanel.

Hier ist Nicks Code neu organisiert, um die Komponenten in der richtigen Reihenfolge zu definieren. Früher habe ich Gridlayout, weil es schneller war. Sie sollten GridBagLayout verwenden, wie Nivas sagte.

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

Ich zog den JMenuBar Code in seine eigene Methode so, hoffentlich, der Rest des Codes ist leichter zu verstehen.

Ich habe einen Master JPanel, dass alle anderen Komponenten zugesetzt werden.

habe ich eine andere JPanel die beiden JLabels zu halten und die JButton.

Ich habe eine dritte JPanel die JComboBox zu halten.

Das Grundmuster ist wie folgt:

  • Legen Sie die JPanel.
  • Legen Sie die Komponenten.
  • Fügen Sie die Komponenten auf die JPanel.
  • Fügen Sie die JPanel zum Master JPanel
  • Fügen Sie den Master JPanel zum JFrame.

Andere Tipps

Nick. Ich denke, das erste, was Sie heraus löschen müssen, ist genau zu wissen, was Sie wollen.

Ich helfe Ihnen bei dieser Frage https: //stackoverflow.com/questions/3055777/how-to -...

Von dem, was Sie beschreiben, die Sie bereits haben, was Sie brauchen. Was ist los mit diesem:

Also, ich glaube wirklich, sollten Sie klar beschreiben, was Sie wollen, um es zu bekommen.

Wir helfen Ihnen, aber Sie müssen klar definieren, was dein Problem ist.

1. Ihr zweites Programm würde nicht kompilieren. Sie versuchen, eine JFrame zu einem JPanel zuzuweisen.

Es sollte gewesen sein

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

2. Es klappt. Was Sie wollen, ist da. Aber nicht, wie Sie es wollen, weil Sie nicht Java gesagt haben, wie Sie es angezeigt werden soll. Versuchen Sie es mit einem Layout wie GridBagLayout .

Wenn Sie in Eile sind, eine GUI zu erstellen, versuchen, eine IDE wie NetBeans, die Ihre Arbeit einfacher per Drag & Drop macht.

EDIT:

Ein Beispiel:

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: Dies ist ein einfaches Beispiel nur ein Beispiel zu geben. Nicht gemeint Produktionscode sein; -)

Sie haben:

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

Jedes Bar Objekt erbt von JFrame (das heißt ein Bar Objekt ist eine Art von JFrame), aber sie in einem anderen JFrame Objekt übergeben (der frame Parameter) im Konstruktor. Anschließend rufen Sie einige Methoden auf dem Bar Objekt - wie die beiden JLabel Objekte hinzugefügt - und einige auf der übergebenen in JFrame -. Wie die setVisible und setSize Methoden

Sie haben also zwei verschiedene JFrame Objekte und Sie tun etwas Arbeit zu jedem von ihnen und nur einer von ihnen ist immer sichtbar sein gesetzt.

Es sieht aus, als der einzige Grund ist, dass Sie in der JFrame an den Konstruktor übergeben werden, ist der Titel des Fensters. Wenn Sie in einem String mit dem Titel an dem Bar Konstruktor und dann Aufruf super(title); als die erste Zeile des Bar Konstruktor übergeben, dann werden Sie nicht brauchen, die übergebenen in JFrame überhaupt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top