Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从一个单独的班级开始一个JPanel(初学者)_Java_Swing_Jframe_Jpanel - Fatal编程技术网

Java 从一个单独的班级开始一个JPanel(初学者)

Java 从一个单独的班级开始一个JPanel(初学者),java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我尝试在一个单独的类中构建jpanel,分别调用它们并在其上添加不同的项。你能告诉我我做错了什么吗 MyFrame.java import javax.swing.*; import java.awt.*; public class MyFrame extends JFrame { public static void main(String[] args) { MyFrame frame = new MyFrame(); frame.setVisi

我尝试在一个单独的类中构建jpanel,分别调用它们并在其上添加不同的项。你能告诉我我做错了什么吗

MyFrame.java

import javax.swing.*;
import java.awt.*;

public class MyFrame extends JFrame {

    public static void main(String[] args) {

        MyFrame frame = new MyFrame();
        frame.setVisible(true);

    }

    public MyFrame() {

       setTitle("MyFrame");
       setSize(300, 200);
       setLocationRelativeTo(null);
       setDefaultCloseOperation(EXIT_ON_CLOSE);

       MyPanel panel = new MyPanel();

       JButton testButton = new JButton("Test");
       panel.add(testButton);

    }

}
MyPanel.java

import javax.swing.*;
import java.awt.*;

class MyPanel extends JPanel {

    public MyPanel() {

        this.setOpaque(true);
        this.setVisible(true); 

    }

}

您没有将面板变量添加到JFrame的contentPane中

加:

作为旁注:

public MyPanel() {

    this.setOpaque(true);
    this.setVisible(true); 

}
默认情况下,jpanel是不透明和可见的,因此MyPanel构造函数中的方法调用没有任何用处

旁注2:我很少扩展JFrame或任何其他顶级窗口,除非我被迫使用其中一个,因为我很少改变窗口的固有行为。我认为最好在需要时创建顶级窗口,即JFrames

旁注3:始终努力在Swing事件线程上启动Swing GUI。我也是

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            MyFrame frame = new MyFrame();
            frame.setVisible(true);
        }
    });
}
编辑 你问:

您编写了“让我们避免设置大小…”。。你能告诉我如何包装它,但要设定最小的框架尺寸吗

我喜欢重写JPanel的getPreferredSize方法,并让它返回一个有意义的维度

例如,您可以这样做,以确保GUI的大小至少为PREF_W by PREF_H:

import java.awt.Dimension;

import javax.swing.*;

public class ShowGetPreferredSize extends JPanel {
   private static final int PREF_W = 400;
   private static final int PREF_H = PREF_W;

   @Override
   public Dimension getPreferredSize() {
      Dimension superSize = super.getPreferredSize();
      if (isPreferredSizeSet()) {
         return superSize;
      }
      int w = Math.max(superSize.width, PREF_W);
      int h = Math.max(superSize.height, PREF_H);
      return new Dimension(w, h);
   }

   private static void createAndShowGui() {
      JFrame frame = new JFrame("ShowGetPreferredSize");
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.getContentPane().add(new ShowGetPreferredSize());
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

您没有将面板变量添加到JFrame的contentPane中

加:

作为旁注:

public MyPanel() {

    this.setOpaque(true);
    this.setVisible(true); 

}
默认情况下,jpanel是不透明和可见的,因此MyPanel构造函数中的方法调用没有任何用处

旁注2:我很少扩展JFrame或任何其他顶级窗口,除非我被迫使用其中一个,因为我很少改变窗口的固有行为。我认为最好在需要时创建顶级窗口,即JFrames

旁注3:始终努力在Swing事件线程上启动Swing GUI。我也是

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            MyFrame frame = new MyFrame();
            frame.setVisible(true);
        }
    });
}
编辑 你问:

您编写了“让我们避免设置大小…”。。你能告诉我如何包装它,但要设定最小的框架尺寸吗

我喜欢重写JPanel的getPreferredSize方法,并让它返回一个有意义的维度

例如,您可以这样做,以确保GUI的大小至少为PREF_W by PREF_H:

import java.awt.Dimension;

import javax.swing.*;

public class ShowGetPreferredSize extends JPanel {
   private static final int PREF_W = 400;
   private static final int PREF_H = PREF_W;

   @Override
   public Dimension getPreferredSize() {
      Dimension superSize = super.getPreferredSize();
      if (isPreferredSizeSet()) {
         return superSize;
      }
      int w = Math.max(superSize.width, PREF_W);
      int h = Math.max(superSize.height, PREF_H);
      return new Dimension(w, h);
   }

   private static void createAndShowGui() {
      JFrame frame = new JFrame("ShowGetPreferredSize");
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.getContentPane().add(new ShowGetPreferredSize());
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

非常感谢。哑错误^^您编写的让我们避免设置大小。。你能告诉我如何包装,但要设定最小的框架尺寸吗?谢谢。哑错误^^您编写的让我们避免设置大小。。你能告诉我如何包装它,但要设定最小的框架尺寸吗?