Java 将一个JPanel类放入另一个类的JFrame中
我必须插入一个JFrame,另一个类的JPanel。 我在JFrame中有一个jMenuItem,我希望,当我单击jMenuItem时,会出现JPanelJava 将一个JPanel类放入另一个类的JFrame中,java,swing,netbeans,jframe,jpanel,Java,Swing,Netbeans,Jframe,Jpanel,我必须插入一个JFrame,另一个类的JPanel。 我在JFrame中有一个jMenuItem,我希望,当我单击jMenuItem时,会出现JPanel private void searchStudMenuItemActionPerformed(java.awt.event.ActionEvent evt) { searchStud s = new searchStud()
private void searchStudMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
searchStud s = new searchStud();
s.setVisible(true);
changePanel(s);
}
private void changePanel(JPanel panel) {
getContentPane().removeAll();
getContentPane().add(panel);
getContentPane().doLayout();
update(getGraphics());
}
searchStud是包含JPanel的类。
当我执行程序并单击JMenuItem时,什么都没有发生。。。
我尝试在线搜索,但我发现的不起作用。实际组件(我想是JFrame)已更改,必须重新验证:
private void changePanel(JPanel panel) {
getContentPane().removeAll();
getContentPane().add(panel);
revalidate();
}
仅使用以下最小代码进行测试:
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
@SuppressWarnings("serial")
public class Test extends JFrame {
public static void main(String[] args) {
new Test();
}
private static class searchStud extends JPanel {
searchStud() {
add(new JLabel("SEARCH STUD"));
}
}
private Test() {
SwingUtilities.invokeLater(this::initGUI);
}
private void initGUI() {
JButton button = new JButton("Search");
button.addActionListener(this::searchStudMenuItemActionPerformed);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
add(button);
setSize(300, 200);
validate();
setLocationRelativeTo(null);
setVisible(true);
}
private void searchStudMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
searchStud s = new searchStud();
s.setVisible(true);
changePanel(s);
}
private void changePanel(JPanel panel) {
getContentPane().removeAll();
getContentPane().add(panel);
revalidate();
}
}
你能用
invalidate()吗;验证()代码>,在更新之后(getGraphics())代码>完成,但什么也没发生。。。我试图在控制台中打印一个字符串,以查看JPanel是否已到达并且实际已到达,但没有显示为videoUse revalidate()。validate()是较旧的AWT方法。revalidate()是为Swing添加的较新方法。