虽然我正在添加x * y按钮,但是JInteralFrame
GridLayout(x, y)
并a:link {
text-decoration: none!important;
}
nav li a {
color: #fff;
font-size: 14px;
position: relative;
letter-spacing: 2px;
text-transform: uppercase;
-webkit-transition: all 0.4s ease;
transition: all 0.4s ease;
margin: 15px;
}
a:after {
content: "";
position: absolute;
height: 2px;
background-color: white;
width: 0;
left: 50%;
bottom: 0;
-webkit-transform: translateX(-50%);
-ms-transform: translateX(-50%);
transform: translateX(-50%);
-webkit-transition: 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55) all;
transition: 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55) all;
}
a:hover {
color: tomato;
}
a:active:after {
width: 100%;
}
body{background-color:black}
并没有填满整个窗口的原因是什么?为什么周围会有白色空间,如下图所示?
如果我稍微调整一下,我可以删除网格布局周围的所有空白区域,如下面的第二张图片,但我不明白为什么情况并非如此。
答案 0 :(得分:1)
为什么周围会出现白色空间,如下图所示?
GridLayout
为每个组件分配完全相同的宽度或高度,但对于GUI 20(例如)组件范围,只能实现GUI拉伸的每20个像素。它将任何“剩余”像素的空间排列到左侧和右侧的组件。
要解决这个问题,您可以改为使用GridBagLayout
并调整行和列的权重,以允许某些组件以几乎无法察觉的方式接管剩余空间(组件大小的差异)给用户。
答案 1 :(得分:1)
为什么周围会出现白色空间,如下图所示?
安德鲁的回答解释了GridLayout的问题。
但是我不知道是否可以使用任何其他标准JDK布局管理器修复此问题。
查看Relative Layout。它是一个布局管理器,允许您为组件提供相对于彼此的大小,因此很容易使所有组件的大小相同。当有额外像素时,您可以设置“舍入策略”以将像素分配给不同的组件。
布局稍微复杂一些,因为单个布局管理器无法完成。在下面的示例中,您需要一个使用RelativeLayout
进行垂直布局的面板。然后,您需要为每一行创建一个单独的面板,这些面板将使用具有水平布局的RelativeLayout
。
import java.awt.*;
import javax.swing.*;
public class SSCCE extends JPanel
{
SSCCE()
{
int size = 10;
setBackground( Color.RED );
Float constraint = new Float(1.0f);
RelativeLayout vertical = new RelativeLayout(RelativeLayout.Y_AXIS);
vertical.setRoundingPolicy( RelativeLayout.EQUAL );
vertical.setFill(true);
setLayout( vertical );
for (int i = 0; i < size; i++)
{
RelativeLayout horizontal = new RelativeLayout(RelativeLayout.X_AXIS);
horizontal.setRoundingPolicy( RelativeLayout.EQUAL );
horizontal.setFill(true);
JPanel row = new JPanel( horizontal );
for (int j = 0; j < size; j++)
{
row.add(new JButton(), constraint);
}
add(row, constraint);
}
}
private static void createAndShowGUI()
{
JFrame frame = new JFrame("SSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new SSCCE());
frame.pack();
frame.setLocationByPlatform( true );
frame.setVisible( true );
}
public static void main(String[] args) throws Exception
{
EventQueue.invokeLater( () -> createAndShowGUI() );
/*
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
*/
}
}