Java 框架顶部的空白..我不';我不知道如何解决这个问题

Java 框架顶部的空白..我不';我不知道如何解决这个问题,java,swing,user-interface,Java,Swing,User Interface,这是我的代码。我有一些问题,我不知道如何解决,所以看 package testdnevnik; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JLabel; import javax.s

这是我的代码。我有一些问题,我不知道如何解决,所以看

package testdnevnik;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class StartWindow extends JPanel {

  JPanel jp = new JPanel();
  JPanel jp1 = new JPanel();
  JLabel jl = new JLabel();
  JLabel headline = new JLabel();
  JButton viewStudents = new JButton();
  JButton editStudents = new JButton();
  JButton addStudents = new JButton();
  JButton removeStudents = new JButton();

  public StartWindow () {

  jp.setLayout(new BorderLayout());
  // image for background
  jl.setIcon(new ImageIcon("img\\bg2.jpg"));

  jl.setPreferredSize(new Dimension(800,600));
  jl.setMaximumSize(new Dimension(800,600));
  jl.setMinimumSize(new Dimension(800,600));
  jl.setSize(800, 600);

  // headline
 headline.setText("Diary");
 headline.setLocation(200, 30);
 headline.setHorizontalAlignment(JLabel.CENTER);
 headline.setFont(new Font("Serif", Font.BOLD, 60));
 headline.setForeground(Color.ORANGE);
 headline.setSize(300, 50);
 headline.setVisible(true);

  // Buttons
 //View Students - Button
 viewStudents.setText("View All Students");
 viewStudents.setSize(200,40);
 viewStudents.setLocation(250 , 200);
 viewStudents.setVisible(true);

  // Edit Students - Button
 editStudents.setText("Edit Students");
 editStudents.setSize(200,40);
 editStudents.setLocation(250 , 300);
 editStudents.setVisible(true);

  // Add Students - Button
 addStudents.setText("Add New Students");
 addStudents.setSize(200,40);
 addStudents.setLocation(250 ,400);
 addStudents.setVisible(true);

  // Remove Students - Button
 removeStudents.setText("Remove Students");
 removeStudents.setSize(200,40);
 removeStudents.setLocation(250 , 500);
 removeStudents.setVisible(true);

 // panel
 jp.setPreferredSize(new Dimension(800,600));
 jp.setMaximumSize(new Dimension(800,600));
 jp.setMinimumSize(new Dimension(800,600));
 jp.setSize(800, 600);

 jp1.add(viewStudents); // add ViewStudents button to the panel
 jp1.add(editStudents); // add EditStudents button to the panel
 jp1.add(addStudents); // add AddStudents button to the panel
 jp1.add(removeStudents); // add RemoveStudents button to the panel
 jp1.add(headline); // add headline label to the panel
 jp.add(jl); // add background image to the panel

 add(jp);
 add(jp1);

 validate();
}

  public void checkStudents(int n) {
     int numberOfStudents = n;
        if (numberOfStudents == 0) {
           removeStudents.setEnabled(false);
     }
  }
}
这是主要课程

package testdnevnik;

import javax.swing.JFrame;

public class Diary {

  StartWindow startWindow = new StartWindow();

  JFrame frame = new JFrame("Diary");

  int n = 0;

  public Diary() {

     startWindow.checkStudents(n);

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setSize(800, 600);
     frame.setResizable(false);
     frame.setVisible(true);
     frame.add(startWindow);

  }

  public static void main(String[] args) {
     new Diary();
  }
}   
现在,关于这个问题……为什么我在框架顶部有一个空白?如何修复它


如果有人知道如何修复此问题,请提供帮助。

您的背景图像大小是多少
“img\\bg2.jpg”

您正在将帧大小设置为
800x600
,因此请确保图像与帧大小相同。或者您可以缩放图像以适合您的帧大小

不要使用setPreferredSize()、setMinimumSize()或setMaximumSize()。标签的大小将是图像的大小

不要使用frame.setSize(…)。而是使用frame.pack(),框架的大小将调整为添加到框架中的组件的首选大小

订单或代码应为:

frame.setResizable( false );
frame.add(startWindow)
frame.pack();
frame.setVisible(true);

最后,我认为主要的问题是您的StartWindow类是一个JPanel,默认情况下使用FlowLayout,默认情况下组件之间使用5像素的间距。您可以使用
setLayout(newborderlayout())更改布局现在顶部将没有间隙。

是的,帧大小为800x600,图像分辨率为800x600使用JLabel表示背景似乎完全错误。为什么不创建您自己的JPanel类,该类将在
painComponent
方法中的背景上打印图像,并将其实例用作您的面板?