java JLabel未显示在内部JPanel中

cu6pst1q  于 11个月前  发布在  Java
关注(0)|答案(2)|浏览(110)

为什么Inner JPanel不显示JLabel文本?
我有一个外部的JPanel,和一个内部的JPanel来显示一些具有正确尺寸的文本。但是我不明白为什么它不会显示?

JPanel jp = new JPanel();
jp.setBackground(Color.decode("#ffffff"));
jp.setBounds(0, 35, 400, 315);

JPanel mostInner = new JPanel();
mostInner.setForeground(Color.black);
mostInner.setBounds(207, 5, 190, 240);
jp.add(mostInner);

JLabel jltxt = new JLabel();
jltxt.setText("Test");

mostInner.add(jltxt);

字符串

dced5bon

dced5bon1#

同样,最好避免使用null布局和setBounds(...)。虽然null布局和setBounds()似乎是Swing新手创建复杂GUI的最简单和最好的方法,但您创建的Swing GUI越多,在使用它们时遇到的困难就越严重。当GUI调整大小时,它们不会重新调整组件的大小,他们是一个皇家女巫,以加强或维护,他们完全失败时,放置在滚动窗格,他们看起来gawd-awful时,在所有平台或屏幕分辨率是从原来的不同。
例如,下面的代码创建了这个GUI:
x1c 0d1x的数据
它使用GridLayout将一个JPanel放置在另一个JPanel的右侧。如果我想在不同的相对位置添加更多组件,只需嵌套JPanel即可,每个JPanel都使用自己的布局。

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.*;

public class WorkWithLayouts extends JPanel {
    private static final long serialVersionUID = 1L;
    private static final int PREF_W = 400;
    private static final int PREF_H = 315;
    private static final String BG = "#ffffff";

    public WorkWithLayouts() {
        JPanel mostInner = new JPanel();
        mostInner.setForeground(Color.black);
        mostInner.setOpaque(false); // if you want the backing jpanel's background to show through

        // add title temporarily just to show where mostInner panel is
        mostInner.setBorder(BorderFactory.createTitledBorder("most inner")); // TODO: delete this

        JLabel jltxt = new JLabel();
        jltxt.setText("Test");
        mostInner.add(jltxt);

        setBackground(Color.decode(BG));
        setLayout(new GridLayout(1, 2));
        add(new JLabel()); // empty label
        add(mostInner);
    }

    @Override
    public Dimension getPreferredSize() {
        if (isPreferredSizeSet()) {
            return super.getPreferredSize();
        } else {
            return new Dimension(PREF_W, PREF_H);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            createAndShowGui();
        });
    }

    private static void createAndShowGui() {
        WorkWithLayouts mainPanel = new WorkWithLayouts();
        JFrame frame = new JFrame("Work With Layouts");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(mainPanel);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }
}

字符串

hs1ihplo

hs1ihplo2#

当我created a small program,它似乎工作正常:


的数据

import java.awt.*;
import javax.swing.*;

public class LabelNotVisible {
    public static void main(String[] arguments) {
        SwingUtilities.invokeLater(() -> new LabelNotVisible().createAndShowGui());
    }

    private void createAndShowGui() {
        JFrame frame = new JFrame("Stack Overflow");
        frame.setBounds(100, 100, 800, 200);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        JPanel jp = new JPanel();
        jp.setBackground(Color.decode("#ffffff"));
        //jp.setBounds(0, 35, 400, 315);

        JPanel mostInner = new JPanel();
        mostInner.setForeground(Color.black);
        //mostInner.setBounds(207, 5, 190, 240);
        jp.add(mostInner);

        JLabel jltxt = new JLabel();
        jltxt.setText("Test");

        mostInner.add(jltxt);

        frame.getContentPane().add(jp);
        frame.setVisible(true);
    }
}

字符串

相关问题