Heim > Java > javaLernprogramm > Warum werden GUI-Komponenten in einem JFrame mithilfe von BorderLayout verdeckt?

Warum werden GUI-Komponenten in einem JFrame mithilfe von BorderLayout verdeckt?

Patricia Arquette
Freigeben: 2024-11-07 16:59:03
Original
335 Leute haben es durchsucht

Why are GUI components obscured in a JFrame using BorderLayout?

GUI-Komponente in JFrame verdeckt

Wie ein Benutzer beobachtete, verhindert ein Problem im GUI-Code, dass alle Komponenten korrekt angezeigt werden. Insbesondere verdeckt das obere Bedienfeld die anderen Bedienfelder.

Ursache:

Dieses Problem entsteht durch das in JFrame verwendete BorderLayout-Layout. Standardmäßig werden Komponenten, die ohne bestimmte Einschränkungen hinzugefügt wurden, automatisch in der MITTLEREN Position platziert, sodass nur eine Komponente sichtbar ist.

Lösung:

Um dieses Layoutproblem zu beheben , ändern Sie den Code wie folgt:

f.add(top, BorderLayout.PAGE_START); // Add top panel to PAGE_START position
f.add(mid); // Add mid panel with default BorderLayout.CENTER constraint
f.add(bot, BorderLayout.PAGE_END); // Add bot panel to PAGE_END position
Nach dem Login kopieren

Zusätzliche Optimierungen:

  1. Remove f.setSize(500, 500); und rufen Sie pack() vor setVisible(true) auf, um ein besser passendes Fenster zu erhalten.
  2. Verwenden Sie f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); um das GUI-Fenster ordnungsgemäß zu entsorgen.
  3. Entfernen in.setVisible(true); und out.setVisible(true); da Komponenten automatisch sichtbar sind, wenn sie einem JFrame hinzugefügt werden.
  4. Änderung der öffentlichen Klasse EncDecExample erweitert JFrame zur öffentlichen Klasse EncDecExample für eine bessere Codeorganisation.

Vervollständigen Sie den optimierten Code:

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;

public class EncDecExample implements ActionListener {
    final static JPanel top = new JPanel();
    final static JPanel mid = new JPanel();
    final static JPanel bot = new JPanel();
    final static JTextField in = new JTextField(10);
    final static JTextField out = new JTextField(10);
    final static JButton enc = new JButton("Encrypt");
    final static JButton dec = new JButton("Decrypt");
    final static JFrame f = new JFrame("Encryption/decryption");

    public static void main(String[] args) {
        f.setSize(500, 500);
        f.setResizable(false);
        out.setEditable(false);
        out.setText("Hello");
        top.add(in);
        mid.add(enc);
        mid.add(dec);
        bot.add(out);
        f.add(top, BorderLayout.PAGE_START);
        f.add(mid);
        f.add(bot, BorderLayout.PAGE_END);
        f.pack();
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        f.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == enc && !in.getText().equalsIgnoreCase("")) {
            out.setText(e(in.getText(), 5));
        } else if (e.getSource() == dec && !in.getText().equalsIgnoreCase("")) {
            out.setText(d(in.getText()));
        }
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum werden GUI-Komponenten in einem JFrame mithilfe von BorderLayout verdeckt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage