gpt4 book ai didi

java - BoxLayout 在底部留下像素线

转载 作者:行者123 更新时间:2023-12-01 23:15:26 26 4
gpt4 key购买 nike

如所附屏幕截图所示 - 黄线来自底层 BoxLayout 面向的 JPanel。更改为 BorderLayout 删除黄线:

Basic BorderLayout display, coloured for convenience

代码示例如下:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class FrameDemo {

private String[] suits = {"hearts", "spades", "diamonds", "clubs", "joker"};

public static void main(String[] args) {
new FrameDemo();
}

public FrameDemo() {
JFrame mainframe = new JFrame();
mainframe.setPreferredSize(new Dimension(800, 600));
mainframe.setLocationByPlatform(true);
mainframe.setTitle("Playing Card Game! v0.1");

mainframe.getContentPane().setLayout(new BorderLayout());

JPanel top = new JPanel();
top.setBackground(Color.BLUE);
top.setPreferredSize(new Dimension(800, 50));
JPanel left = new JPanel();
left.setBackground(Color.RED);
left.setPreferredSize(new Dimension(50, 500));
JPanel centre = new JPanel();
centre.setBackground(Color.YELLOW);
centre.setLayout(new BoxLayout(centre, BoxLayout.Y_AXIS));
JPanel right = new JPanel();
right.setBackground(Color.GREEN);
right.setPreferredSize(new Dimension(50, 500));
JPanel bot = new JPanel();
bot.setBackground(Color.GRAY);
bot.setPreferredSize(new Dimension(800, 50));

for(String suit : suits) {
if(!(suit.equals("joker"))) {
JPanel layer = new JPanel();
layer.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10));
layer.setBackground(Color.BLACK);
centre.add(layer);
}
}

mainframe.add(top, BorderLayout.NORTH);
mainframe.add(left, BorderLayout.WEST);
mainframe.add(centre, BorderLayout.CENTER);
mainframe.add(right, BorderLayout.EAST);
mainframe.add(bot, BorderLayout.SOUTH);

mainframe.setDefaultCloseOperation(
WindowConstants.DO_NOTHING_ON_CLOSE);

mainframe.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

mainframe.pack();
mainframe.setVisible(true);
}

}

我尝试过在 Color.BLACK JPanel 上设置边框,但似乎没有多大作用。 Swing 为什么要这样做?可以修复吗?

注意:无论我是否使用setPreferredSize(),都会显示此信息。

最佳答案

Why is Swing doing this?

添加到中心面板的每个面板的首选高度为 20。BoxLayout 需要缩放每个面板都填充整个可用空间。完成此缩放后,看起来似乎存在某种舍入问题。

Can it be fixed?

不确定您的具体要求是什么?

如果您尝试使每个组件具有相同的高度,则可以使用 Relative Layout 。它有一个属性,允许您指定如何处理舍入结果的剩余像素。

编辑:

仔细查看您的代码,问题是:

//mainframe.setPreferredSize(new Dimension(800, 600));

切勿设置框架的大小。这是布局管理器的工作。您手动设置的大小包括标题栏和边框,因此所有面板都比您希望的小,并且不能被 10 整除。

//mainframe.setPreferredSize(new Dimension(800, 600));

关于java - BoxLayout 在底部留下像素线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21289569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com