java JLabel未显示在内部JPanel中

cu6pst1q  于 2023-11-15  发布在  Java
关注(0)|答案(2)|浏览(135)

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

  1. JPanel jp = new JPanel();
  2. jp.setBackground(Color.decode("#ffffff"));
  3. jp.setBounds(0, 35, 400, 315);
  4. JPanel mostInner = new JPanel();
  5. mostInner.setForeground(Color.black);
  6. mostInner.setBounds(207, 5, 190, 240);
  7. jp.add(mostInner);
  8. JLabel jltxt = new JLabel();
  9. jltxt.setText("Test");
  10. mostInner.add(jltxt);

字符串

dced5bon

dced5bon1#

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

  1. import java.awt.Color;
  2. import java.awt.Dimension;
  3. import java.awt.GridLayout;
  4. import javax.swing.*;
  5. public class WorkWithLayouts extends JPanel {
  6. private static final long serialVersionUID = 1L;
  7. private static final int PREF_W = 400;
  8. private static final int PREF_H = 315;
  9. private static final String BG = "#ffffff";
  10. public WorkWithLayouts() {
  11. JPanel mostInner = new JPanel();
  12. mostInner.setForeground(Color.black);
  13. mostInner.setOpaque(false); // if you want the backing jpanel's background to show through
  14. // add title temporarily just to show where mostInner panel is
  15. mostInner.setBorder(BorderFactory.createTitledBorder("most inner")); // TODO: delete this
  16. JLabel jltxt = new JLabel();
  17. jltxt.setText("Test");
  18. mostInner.add(jltxt);
  19. setBackground(Color.decode(BG));
  20. setLayout(new GridLayout(1, 2));
  21. add(new JLabel()); // empty label
  22. add(mostInner);
  23. }
  24. @Override
  25. public Dimension getPreferredSize() {
  26. if (isPreferredSizeSet()) {
  27. return super.getPreferredSize();
  28. } else {
  29. return new Dimension(PREF_W, PREF_H);
  30. }
  31. }
  32. public static void main(String[] args) {
  33. SwingUtilities.invokeLater(() -> {
  34. createAndShowGui();
  35. });
  36. }
  37. private static void createAndShowGui() {
  38. WorkWithLayouts mainPanel = new WorkWithLayouts();
  39. JFrame frame = new JFrame("Work With Layouts");
  40. frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  41. frame.add(mainPanel);
  42. frame.pack();
  43. frame.setLocationByPlatform(true);
  44. frame.setVisible(true);
  45. }
  46. }

字符串

展开查看全部
hs1ihplo

hs1ihplo2#

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


的数据

  1. import java.awt.*;
  2. import javax.swing.*;
  3. public class LabelNotVisible {
  4. public static void main(String[] arguments) {
  5. SwingUtilities.invokeLater(() -> new LabelNotVisible().createAndShowGui());
  6. }
  7. private void createAndShowGui() {
  8. JFrame frame = new JFrame("Stack Overflow");
  9. frame.setBounds(100, 100, 800, 200);
  10. frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  11. JPanel jp = new JPanel();
  12. jp.setBackground(Color.decode("#ffffff"));
  13. //jp.setBounds(0, 35, 400, 315);
  14. JPanel mostInner = new JPanel();
  15. mostInner.setForeground(Color.black);
  16. //mostInner.setBounds(207, 5, 190, 240);
  17. jp.add(mostInner);
  18. JLabel jltxt = new JLabel();
  19. jltxt.setText("Test");
  20. mostInner.add(jltxt);
  21. frame.getContentPane().add(jp);
  22. frame.setVisible(true);
  23. }
  24. }

字符串

展开查看全部

相关问题