Warum werden meine Artikel nicht in JFrame angezeigt?

Lesezeit: 4 Minuten

Ich bin ziemlich neu bei JFrame und möchte wissen, warum meine Artikel nicht im Fenster angezeigt werden. Ich weiß, dass ich keinen ActionHandler habe, aber ich möchte nur, dass meine Textfelder in meinem Fenster angezeigt werden. Hier ist mein Code:

import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class FirstGUI extends JFrame{
    public void GUI(){
       setTitle("Welcome");
       setResizable(false);
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       setVisible(true);
       setSize(600,600);

       JLabel title = new JLabel();
       title.setText("Apple Inc. Member Login Port");
       title.setFont(new Font("Arial", Font.PLAIN, 24));

       JTextField login = new JTextField("Login",10);

       JPasswordField pass = new JPasswordField("Password");

       add(title);
       add(login);
       add(pass);

   }

    public static void main(String[] args){
        FirstGUI a = new FirstGUI();
        a.GUI();
    }
}

aber wenn ich es starte bekomme ich das:

Geben Sie hier die Bildbeschreibung ein

  • Ich glaube, Sie müssen Ihre Komponenten hinzufügen context pane und nicht direkt am Rahmen. Sehen docs.oracle.com/javase/tutorial/uiswing/components/…

    – PM77-1

    7. Mai 2013 um 0:58 Uhr

  • @ PM77-1 Ich glaube, seit Java 5 ist dies nicht mehr erforderlich JFrame#add Delegierten zum Inhaltsbereich für Ihre

    – Verrückter Programmierer

    7. Mai 2013 um 1:20 Uhr

aber wenn ich es starte bekomme ich das:

Sie erhalten einen leeren Bildschirm, weil Sie die Komponenten dem Rahmen hinzufügen, nachdem der Rahmen sichtbar ist.

  1. Wie bereits angedeutet, müssen Sie einen geeigneten Layout-Manager verwenden. FlowLayout ist am einfachsten zu beginnen.
  2. aufrufen setVisible(true) NACH dem Hinzufügen der Komponenten zum Rahmen.

Der Code sollte also eher so aussehen:

panel.add(...);
panel.add(...);
add(panel);
pack();
setVisible(true);

Benutzer-Avatar
Madhur Mehta

Ich stimme den Vorschlägen von MadProgrammer zu (+1)

Nun, lassen Sie uns einen Blick auf Ihr Programm werfen

Sie haben tatsächlich einen JFrame mit darin enthaltenen Komponenten erstellt. Es funktioniert auch gut, aber Ihre Frage “Warum werden meine Elemente nicht im JFrame angezeigt?” ist nicht, weil Sie etwas falsch gemacht haben, sondern weil Sie etwas verpasst haben, dh revalidate ()

Versuchen:

public static void main(String[] args){
        FirstGUI a = new FirstGUI();
        a.GUI();
        a.revalidate();
    }

Ich sage nicht, dass dies Ihnen eine perfekte Benutzeroberfläche geben wird. Was ich versuche zu sagen, ist, dass dies Ihnen helfen wird, den Swing besser zu verstehen. Erfahren Sie mehr über Swing-Layout-Manager und arbeiten Sie dann an Ihrer Benutzeroberfläche, um bessere Ergebnisse zu erzielen

revalidate(): Diese Komponente und alle darüber liegenden übergeordneten Komponenten sind als auszulegen markiert. Das bedeutet, dass der Layout Manager versucht, die Komponenten neu auszurichten. Wird häufig nach dem Entfernen von Komponenten verwendet. Es ist möglich, dass einige wirklich scharfe Swing-Leute dies übersehen. Ich denke, dass Sie dies nur wissen werden, wenn Sie tatsächlich Swing verwenden.

Benutzer-Avatar
Verrückter Programmierer

Der Standard-Layout-Manager für JFrame ist BorderLayout.

Dies bedeutet, dass Ihre Komponenten im Wesentlichen alle übereinander hinzugefügt wurden.

Versuchen Sie, den Layout-Manager in etwas wie zu ändern FlowLayout (zum Beispiel)…

Geben Sie hier die Bildbeschreibung ein

Schauen Sie sich an Ein visueller Leitfaden für Layout-Manager und Verwenden von Layout-Managern für mehr Details.

Vermeiden Sie auch setSize wo möglich verwenden Window#pack stattdessen

Aktualisieren

Ich möchte Sie auch vorstellen Anfängliche Threads die verwendet werden sollte, um Ihren UI-Code zu starten …

Einziger Grund:

setVisible(True); method for the frame should be put on the end of the code.

Wenn Sie diese Zeile oben im Code angeben, erstellen Sie einen Frame. Dies wird dieses Problem verursachen.

Fügen Sie die Komponenten nicht direkt zu Ihrem Rahmen hinzu. Fügen Sie stattdessen die hinzu Inhaltsbereich, wo ein JFrame alle Komponenten speichert, die es zeichnet. Normalerweise ist dies ein JPanel.

Hier ist ein Beispiel:

public class GUI
{

    private JPanel content;

    public void GUI
    {
        /*Other code*/

        content = new JPanel();
        add(content); //make content the content pane

        content.add(title);
        content.add(login);
        content.add(pass);
    }

Wenn das fehlschlägt, rufen Sie an setVisible(true) und setEnabled(true) auf alle Ihre Komponenten.

Nebenbei bemerkt möchten Sie vielleicht Ihre machen GUI Funktion ein Konstruktor.

Benutzer-Avatar
Mika Sundland

import javax.swing.*;
import java.awt.*;
class Myframec extends JFrame
{

    Myframec()
    {
        Container c = this.getContentPane();
        c.setLayout(null);

        this.setBounds(10,10,700,500);
        this.setTitle("Welcome");

        this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        panel.setBounds(0,0,700,500);
        panel.setBackground(Color.gray);
        panel.setLayout(null);
        c.add(panel);
        Font f = new Font("Arial",Font.BOLD,25);
        Font f1 = new Font("Arial",Font.BOLD,20);
        JLabel lable = new JLabel();
        lable.setBounds(130,10,400,100);
        lable.setText("Apple Inc. Member Login Port");
        lable.setFont(f);
        panel.add(lable);
        JTextField login = new JTextField("Login",10);
        login.setBounds(120,150,400,30);
        login.setFont(f1);
        panel.add(login);
        JPasswordField pass =new JPasswordField("Password");
        pass.setBounds(120,200,400,30);
        pass.setFont(f1);


        lable.setFont(f);
        panel.add(pass);
        c.setVisible(true);
        this.setVisible(true);
    }
    public static void main(String[] argm)
    {
        Myframec frame = new Myframec();
        frame.setVisible(true);
    }
}

1014210cookie-checkWarum werden meine Artikel nicht in JFrame angezeigt?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy