【发布时间】:2018-12-30 23:24:17
【问题描述】:
我的屏幕底部有一个奇怪的白色边框。它在左下角,也就是TimeView.java
这是我的 ContentPane.java
package views;
import java.awt.BorderLayout;
import javax.swing.BoxLayout;
import javax.swing.JPanel;
public class ContentPane extends JPanel {
private static final long serialVersionUID = 1L;
private GameView gameView;
private PlayView playView;
private TimeView timeView;
public ContentPane() {
this.setLayout(new BorderLayout());
}
public void setGameView(GameView gameView, PlayView playView, TimeView timeView) {
this.gameView = gameView;
this.playView = playView;
this.timeView = timeView;
JPanel subPanel = new JPanel();
subPanel.setLayout(new BoxLayout(subPanel, BoxLayout.Y_AXIS));
subPanel.add(gameView);
subPanel.add(timeView);
this.add(playView, BorderLayout.CENTER);
this.add(subPanel, BorderLayout.WEST);
}
}
这是 GameView.java
package views;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
public class GameView extends JPanel {
private static final long serialVersionUID = 1L;
public GameView() {
this.setBackground(Color.decode("#2A2828"));
this.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.GRAY));
this.setPreferredSize(new Dimension(200, 300));
}
}
这是 TimeView.java
package views;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class TimeView extends JPanel {
private static final long serialVersionUID = 1L;
public TimeView() {
this.setBackground(Color.decode("#2A2828"));
this.setPreferredSize(new Dimension(200, 500));
}
}
这是 PlayView.java
package views;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JPanel;
public class PlayView extends JPanel {
private static final long serialVersionUID = 1L;
public PlayView() {
this.setBackground(Color.decode("#1F1F40"));
this.setPreferredSize(new Dimension(1100, 800));
}
}
我已经尝试在 TimeView 上放置一个空边框,但仍然会出现奇怪的白色边框。
如果有人可以向我解释导致此问题的原因,那就太好了。
编辑:
这是 MainFrame.java
package views;
import javax.swing.JFrame;
public class MainFrame extends JFrame {
private static final long serialVersionUID = 1L;
public void setupGui(ContentPane contentPane) {
this.setTitle("TagMan By Jesse");
this.setContentPane(contentPane);
this.setSize(1300, 800);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setResizable(false);
}
}
【问题讨论】:
-
你能把调用 setVisible(true) 的代码贴在 JFrame 上吗?
-
@BabaNew 我已经编辑了我的帖子。
-
在
setSize之后调用this.setResizable(false);是您的主要问题,尽管依赖setSize也是一个坏主意 -
@MadProgrammer 我已经删除了
this.setResizable(false);,但问题仍然存在。为什么我不应该使用setSizebtw? -
@idontunderstandarrays 您不应该使用
setSize,因为可用的内容大小是窗口大小减去装饰。您应该使用布局管理 API 和Window#pack,它将以首选大小“打包”内容周围的窗口。据我了解,您“可能”是int舍入的受害者,其中(类似于BoxLayout)正在尝试计算可用空间,并产生一个浮点值,然后将其舍入为@987654337 @自动......这一切都只是一团糟