我已包含代码的相关部分以供审核。目前,当我运行它时,我看到的只是一个大的灰色 JFrame,上面没有我的面板。我之前有一个面板可以工作,但是当我添加另一个面板时,第一个面板就会消失。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class StudyWindow
{
public StudyWindow()
{
//create frame to contain panels
JFrame frame = new JFrame("Leitner");
frame.setVisible(true);
frame.setSize(1000, 1000);
frame.setResizable(false);
//add main panel to house sub-panels
JPanel mainPanel = new JPanel();
BorderLayout mgr = new BorderLayout();
mainPanel.setLayout(mgr);
mainPanel.setSize(950, 950);
mainPanel.setBackground(Color.WHITE);
//add top text panel that shows either front or back of card
//not yet implemented
//add middle text panel for user to enter response
JPanel panel2 = new JPanel ();
JTextField response = new JTextField(10);
panel2.add(response);
mainPanel.add(panel2, BorderLayout.CENTER);
//add bottom panel with buttons and add action listeners to them
JPanel panel3 = new JPanel ();
JButton a = new JButton("Do not know");
JButton b = new JButton("Flip Card");
JButton c = new JButton("I know");
JButton d = new JButton("Exit");
panel3.add(a);
panel3.add(b);
panel3.add(c);
panel3.add(d);
a.addActionListener(new myActionListener());
b.addActionListener(new myActionListener());
c.addActionListener(new myActionListener());
d.addActionListener(new myActionListener());
mainPanel.add(panel3, BorderLayout.SOUTH);
}
}
最佳答案
- 首先将
frame.setVisible(true);
移至构造函数的末尾 - 确保将内容添加到框架中;
frame.add(mainPanel
) setSize
在面板上毫无意义,因为它们将根据布局管理器的需求进行更新- 对于 Windows,优先使用
pack
而不是setSize
,但请确保在调用它之前已先添加了所有组件。 - 您的面板不是白色的,因为
JPanel
默认情况下不透明(并且panel2
覆盖了mainPanel
的整个区域)
关于java - 为什么我的 JPanel 没有显示在我的 JFrame 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35761876/