BoxLayout 在底部显示白线
BoxLayout shows white line at bottom
我尝试制作多条线,在垂直和水平方向上填充整个框架。我尝试使用带有 GridBagLayout 的 GridLayout 和现在的 BoxLayout - 同样的问题!调整大小的白线...
不知道应该用哪个LayoutManager,因为都是一样的问题!我想要一个响应式布局,所以我需要使用 LayoutManager 并且无法修复元素。有人可以帮助我吗?
Container parentPane = frame.getContentPane();
JPanel parentPanel = new JPanel();
parentPane.add(parentPanel);
parentPanel.setLayout( new javax.swing.BoxLayout(parentPanel, javax.swing.BoxLayout.Y_AXIS));
JPanel[] parentPanelFields = new JPanel[6];
for(int i = 0; i < 6; i++) {
parentPanelFields[i] = new JPanel();
parentPanelFields[i].setBackground(Color.RED);
if(i != 5) parentPanelFields[i].setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.WHITE));
parentPanel.add (parentPanelFields[i]);
}
代码的结果是完美的,但是在调整框架大小时,框架底部出现一条大白线...
完美的结果,但底部有一条大粗线:
这是我的第一个问题,但使用的是 GridBagLayout:
如何通过调整框架的大小使 Y 轴上的这些线没有这些白线?
请帮助我 - 我为这个问题绝望了 3 天...
非常感谢,
瓦尔迪
EDIT1:整个代码:
import java.awt.*;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class test {
public static void addComponentsToPane(JFrame frame) {
Container parentPane = frame.getContentPane();
JPanel parentPanel = new JPanel();
parentPane.add(parentPanel);
parentPanel.setLayout( new javax.swing.BoxLayout(parentPanel, javax.swing.BoxLayout.Y_AXIS));
JPanel[] parentPanelFields = new JPanel[6];
for(int i = 0; i < 6; i++) {
parentPanelFields[i] = new JPanel();
parentPanelFields[i].setBackground(Color.RED);
if(i != 5) parentPanelFields[i].setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.WHITE));
parentPanel.add (parentPanelFields[i]);
}
}
private static void createAndShowGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("GridBagLayout Source Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Set up the content pane.
addComponentsToPane(frame);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
EDIT2:来自 camickr 的解决方案:
首先从https://tips4java.wordpress.com/2008/11/02/relative-layout/(页面底部)
下载class RelativeLayout
第二步是为您的问题编写代码 -> 在我的例子中:
RelativeLayout rl = new RelativeLayout(RelativeLayout.Y_AXIS);
rl.setFill( true );
JPanel somePanel = new JPanel();
somePanel.setBackground(Color.BLACK);
somePanel.setLayout( rl );
JPanel blue = new JPanel();
blue.setBackground(Color.BLUE);
somePanel.add(blue, new Float(1));
parentPane.add(somePanel);
JPanel green = new JPanel();
green.setBackground(Color.GREEN);
somePanel.add(green, new Float(1));
parentPane.add(somePanel);
JPanel red = new JPanel();
red.setBackground(Color.RED);
somePanel.add(red, new Float(1));
parentPane.add(somePanel);
像其他 LayoutManager 一样使用 RelativeLayout!
如果您有 6 个面板添加到一个框架并且框架被打包,那么每个面板都会按预期显示。
如果将框架大小增加 5 个像素,则 space 不足以为每个面板提供一个额外的像素,因此底部有 5 个额外的像素,因为布局管理器不知道如何分配这些像素组件的额外像素。
如果您随后将框架再扩展 1 个像素,那么每个面板都会收到一个额外的像素,并且 space 将会消失。
您可以尝试使用 Relative Layout。此布局将根据您为布局管理器设置的 属性 将这些额外像素分配给 1 个或多个组件。
同样使用 Relative Layout
将不需要为每个组件添加边框。您可以设置 "gap property" 在每个组件之间保留 1 个像素。父面板的背景将显示出来。
编辑:
基本代码为:
RelativeLayout rl = new RelativeLayout(RelativeLayout.Y_AXIS);
rl.setFill( true ); // to fill horizontal width
rl.setGap( 1 ); // so you don't need the border
somePanel.setLayout( rl );
然后在循环中:
somePanel.add(someComponent, new Float(1.0f));
我尝试制作多条线,在垂直和水平方向上填充整个框架。我尝试使用带有 GridBagLayout 的 GridLayout 和现在的 BoxLayout - 同样的问题!调整大小的白线...
不知道应该用哪个LayoutManager,因为都是一样的问题!我想要一个响应式布局,所以我需要使用 LayoutManager 并且无法修复元素。有人可以帮助我吗?
Container parentPane = frame.getContentPane();
JPanel parentPanel = new JPanel();
parentPane.add(parentPanel);
parentPanel.setLayout( new javax.swing.BoxLayout(parentPanel, javax.swing.BoxLayout.Y_AXIS));
JPanel[] parentPanelFields = new JPanel[6];
for(int i = 0; i < 6; i++) {
parentPanelFields[i] = new JPanel();
parentPanelFields[i].setBackground(Color.RED);
if(i != 5) parentPanelFields[i].setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.WHITE));
parentPanel.add (parentPanelFields[i]);
}
代码的结果是完美的,但是在调整框架大小时,框架底部出现一条大白线...
完美的结果,但底部有一条大粗线:
这是我的第一个问题,但使用的是 GridBagLayout:
如何通过调整框架的大小使 Y 轴上的这些线没有这些白线?
请帮助我 - 我为这个问题绝望了 3 天...
非常感谢, 瓦尔迪
EDIT1:整个代码:
import java.awt.*;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class test {
public static void addComponentsToPane(JFrame frame) {
Container parentPane = frame.getContentPane();
JPanel parentPanel = new JPanel();
parentPane.add(parentPanel);
parentPanel.setLayout( new javax.swing.BoxLayout(parentPanel, javax.swing.BoxLayout.Y_AXIS));
JPanel[] parentPanelFields = new JPanel[6];
for(int i = 0; i < 6; i++) {
parentPanelFields[i] = new JPanel();
parentPanelFields[i].setBackground(Color.RED);
if(i != 5) parentPanelFields[i].setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.WHITE));
parentPanel.add (parentPanelFields[i]);
}
}
private static void createAndShowGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("GridBagLayout Source Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Set up the content pane.
addComponentsToPane(frame);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
EDIT2:来自 camickr 的解决方案:
首先从https://tips4java.wordpress.com/2008/11/02/relative-layout/(页面底部)
下载class RelativeLayout第二步是为您的问题编写代码 -> 在我的例子中:
RelativeLayout rl = new RelativeLayout(RelativeLayout.Y_AXIS);
rl.setFill( true );
JPanel somePanel = new JPanel();
somePanel.setBackground(Color.BLACK);
somePanel.setLayout( rl );
JPanel blue = new JPanel();
blue.setBackground(Color.BLUE);
somePanel.add(blue, new Float(1));
parentPane.add(somePanel);
JPanel green = new JPanel();
green.setBackground(Color.GREEN);
somePanel.add(green, new Float(1));
parentPane.add(somePanel);
JPanel red = new JPanel();
red.setBackground(Color.RED);
somePanel.add(red, new Float(1));
parentPane.add(somePanel);
像其他 LayoutManager 一样使用 RelativeLayout!
如果您有 6 个面板添加到一个框架并且框架被打包,那么每个面板都会按预期显示。
如果将框架大小增加 5 个像素,则 space 不足以为每个面板提供一个额外的像素,因此底部有 5 个额外的像素,因为布局管理器不知道如何分配这些像素组件的额外像素。
如果您随后将框架再扩展 1 个像素,那么每个面板都会收到一个额外的像素,并且 space 将会消失。
您可以尝试使用 Relative Layout。此布局将根据您为布局管理器设置的 属性 将这些额外像素分配给 1 个或多个组件。
同样使用 Relative Layout
将不需要为每个组件添加边框。您可以设置 "gap property" 在每个组件之间保留 1 个像素。父面板的背景将显示出来。
编辑:
基本代码为:
RelativeLayout rl = new RelativeLayout(RelativeLayout.Y_AXIS);
rl.setFill( true ); // to fill horizontal width
rl.setGap( 1 ); // so you don't need the border
somePanel.setLayout( rl );
然后在循环中:
somePanel.add(someComponent, new Float(1.0f));