Java 在JFrame上调用JPanel

Java 在JFrame上调用JPanel,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我打电话给我制作成JFrame的JPanel有困难 JPanel称为“子网面板”=> 在我的JFrame中,我做了一个按钮 private void jButtonActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: String a = JOptionPane.showInpu

我打电话给我制作成JFrame的JPanel有困难

JPanel称为“子网面板”=>

在我的JFrame中,我做了一个按钮

private void jButtonActionPerformed(java.awt.event.ActionEvent evt) {                                          
    // TODO add your handling code here:
    String a = JOptionPane.showInputDialog(null, "Geef de naam in : ", 
    "Naam", 1);
    String b = JOptionPane.showInputDialog(null, "Geef het netwerkadres in : ", 
    "Netwerkadres", 1);
    String c = JOptionPane.showInputDialog(null, "Geef het subnetmask in : ", 
    "Subnetmask", 1);

    this.add(new SubnetPanel(a,b,c) {
             @Override
             public void paintComponent( Graphics g ) {
                super.paintComponent(g);
                Graphics2D g2 = (Graphics2D)g;

                Line2D line = new Line2D.Double(10, 10, 40, 40);
                g2.setColor(Color.blue);
                g2.setStroke(new BasicStroke(10));
                g2.draw(line);
             }
        });
        this.setVisible( true );

} 
但是当我执行JFrame并单击按钮时,JFrame不会出现。 有人能帮我吗


谢谢

虽然已将面板添加到框架中,但它最初将位于(0,0),大小为0×0,因此您将无法看到它。您需要调整其大小和位置,例如在框架上调用
pack()

从可见框架中添加(或删除)组件的基本代码是:

panel.add(...);
panel.revalidate();
panel.repaint();
在您的情况下,“面板”将是JFrame的内容窗格


此外,当您进行自定义绘制时,还需要覆盖面板的
getPreferredSize()
方法,以便布局管理器可以使用此信息设置面板的大小/位置。

您可能忘记了在
JButton
上添加
ActionListner

这样试试

    JButton jButton = new JButton("Click"); // Your actual button is here
    jButton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {                
            jButtonActionPerformed(e);
        }
    });

你看到了什么?只是面板?还是只是镜框?或者面板和框架?现在我只有一个我编码的JPanel和一个空的JFrame,只有一个JButton和
私有的void JButtonActionPerformed(java.awt.event.ActionEvent evt){}
我在使用netbeans,所以我想我不需要这个?netbeans在后台做什么?检查代码并找到
addActionListener()
method。在我的例子中,它应该是:
panel.add(SubnetPanel)“panel”变量是否引用了框架的“content pane”?向框架添加组件时,组件将添加到框架的“content pane”(仅为JPanel)。阅读上Swing教程中的部分,了解JFrame的结构。
    JButton jButton = new JButton("Click"); // Your actual button is here
    jButton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {                
            jButtonActionPerformed(e);
        }
    });