如何查看分层窗格内的组件
How to see the components inside a layered pane
我在 JLayeredPane
中放置了两个组件,但我无法使它们可见。这是一个相当 MCV
的代码。如何在 layeredPane
中查看我的 JTextField
和 JLabel
?
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EtchedBorder;
public class GUI extends JFrame {
JFrame mainframe = new JFrame();
JPanel centrejPanel = new JPanel();
JTextField keyText;
JLabel jLabel;
public GUI() {
mainframe.setLayout(new BorderLayout());
mainframe.setSize(1200, 700);
mainframe.getContentPane().add(centrejPanel, BorderLayout.CENTER);
keyText = new JTextField("hello");
keyText.setOpaque(false);
keyText.setCaretColor(Color.BLACK);
keyText.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
jLabel = new JLabel("hello");
jLabel.setFont(new Font("Palatino", Font.BOLD, 18));
jLabel.setVerticalAlignment(JLabel.TOP);
jLabel.setForeground(Color.GRAY);
JLayeredPane layeredPane = new JLayeredPane();
layeredPane.add(keyText, 1);
layeredPane.add(jLabel, 0);
centrejPanel.getRootPane().add(layeredPane);
mainframe.setVisible(true);
}
}
public class Main {
public static void main(String[] args) {
GUI gui = new GUI();
}
}
//mainframe.setLayout(new BorderLayout());
不需要。框架内容窗格的默认布局管理器是 BorderLayout。
//mainframe.getContentPane().add(centrejPanel, BorderLayout.CENTER);
不要将空面板添加到框架的内容窗格。只需将 LayeredPane 直接添加到内容窗格即可。
keyText.setBounds(0, 50, 100, 20);
...
jLabel.setBounds(0, 150, 100, 20);
JLayeredPane 使用空布局,因此您有责任设置添加到分层窗格的每个组件的大小和位置。
//centrejPanel.getRootPane().add(layeredPane);
不要将分层窗格添加到根窗格。甚至不知道这是否可行,但在任何情况下,内容窗格都会覆盖分层窗格。
阅读 Using Top Level Containers 上的 Swing 教程部分,了解所有框架层的结构。
mainframe.add(layeredPane);
只需将分层窗格直接添加到框架的内容窗格即可。阅读 How to Use LayeredPane 上的 Swing 教程,了解更多信息和工作示例。
学习新概念或组件时,始终从教程中的示例开始。
我在 JLayeredPane
中放置了两个组件,但我无法使它们可见。这是一个相当 MCV
的代码。如何在 layeredPane
中查看我的 JTextField
和 JLabel
?
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EtchedBorder;
public class GUI extends JFrame {
JFrame mainframe = new JFrame();
JPanel centrejPanel = new JPanel();
JTextField keyText;
JLabel jLabel;
public GUI() {
mainframe.setLayout(new BorderLayout());
mainframe.setSize(1200, 700);
mainframe.getContentPane().add(centrejPanel, BorderLayout.CENTER);
keyText = new JTextField("hello");
keyText.setOpaque(false);
keyText.setCaretColor(Color.BLACK);
keyText.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
jLabel = new JLabel("hello");
jLabel.setFont(new Font("Palatino", Font.BOLD, 18));
jLabel.setVerticalAlignment(JLabel.TOP);
jLabel.setForeground(Color.GRAY);
JLayeredPane layeredPane = new JLayeredPane();
layeredPane.add(keyText, 1);
layeredPane.add(jLabel, 0);
centrejPanel.getRootPane().add(layeredPane);
mainframe.setVisible(true);
}
}
public class Main {
public static void main(String[] args) {
GUI gui = new GUI();
}
}
//mainframe.setLayout(new BorderLayout());
不需要。框架内容窗格的默认布局管理器是 BorderLayout。
//mainframe.getContentPane().add(centrejPanel, BorderLayout.CENTER);
不要将空面板添加到框架的内容窗格。只需将 LayeredPane 直接添加到内容窗格即可。
keyText.setBounds(0, 50, 100, 20);
...
jLabel.setBounds(0, 150, 100, 20);
JLayeredPane 使用空布局,因此您有责任设置添加到分层窗格的每个组件的大小和位置。
//centrejPanel.getRootPane().add(layeredPane);
不要将分层窗格添加到根窗格。甚至不知道这是否可行,但在任何情况下,内容窗格都会覆盖分层窗格。
阅读 Using Top Level Containers 上的 Swing 教程部分,了解所有框架层的结构。
mainframe.add(layeredPane);
只需将分层窗格直接添加到框架的内容窗格即可。阅读 How to Use LayeredPane 上的 Swing 教程,了解更多信息和工作示例。
学习新概念或组件时,始终从教程中的示例开始。