问题描述
我正在学习上周的挥杆动作,我在GridBagConstraints上存在一些问题,需要在左上角放置一个按钮,而在GridBagConstraints中将所有其他按钮默认设置为?
import java.awt.*;
import javax.swing.*;
@SuppressWarnings("serial")
class MyPanel extends JPanel
{
JButton menu = new JButton("Menu"),button = new JButton("Puzzle");
GridBagConstraints gbc1 = new GridBagConstraints(),gbc2 = new GridBagConstraints();
private void setup()
{
gbc1.anchor = GridBagConstraints.FirsT_LINE_START;
gbc2.anchor = GridBagConstraints.CENTER;
gbc2.weightx = 1.0;
gbc2.weighty = 1.0;
}
public MyPanel()
{
this.setLayout(new GridBagLayout());
this.setup();
this.button.setPreferredSize(new Dimension(250,140));
this.add(menu,gbc1);
this.add(button,gbc2);
}
}
@SuppressWarnings("serial")
public class Test extends JFrame
{
public test()
{
this.setTitle("Test");
this.setContentPane(new MyPanel());
this.setResizable(false);
this.setSize(800,600);
this.setVisible(true);
}
public static void main(String args[])
{
SwingUtilities.invokelater(() -> new test());
}
}
我希望菜单位于上角。
我从here阅读,但我不明白这一点。能否请您解释一下GridBagConstraints来做到这一点。
我希望这个问题可以清楚理解,否则请在评论中让我知道。
编辑:
@camickr建议有效,但有一个小问题,“拼图按钮”不在提取中心。
谢谢。
解决方法
默认情况下,除非其中一个组件的weightx / weighty值不等于0,否则GridBagLayout将显示所有水平和垂直居中的组件。然后,该组件将填充框架中的多余空间。
因此,如果要在“顶部/左侧”放置一个组件,在“中心”放置一个组件,则需要:
- 使用“锚定”约束。这两个组件都会有所不同。
- 位于中心的组件将需要使用“ weightx / weighty”约束。
但是,更轻松的解决方案可能是将面板与不同的布局管理器组合使用。
例如:
services.Configure<ADSettings>(setup =>
{
setup.DomainPath = Configuration["ADConf:DomainPath"];
setup.DomainName = Configuration["ADConf:DomainName"];
setup.Filter = Configuration["ADConf:Filter"];
setup.ADUser = Configuration["ADConf:ADUser"];
setup.ADPassword = Configuration["ADConf:ADPassword"];
setup.DefaultPassword = Configuration["ADConf:DefaultPassword"];
});
services.AddDbContext<SicWebAppDbContext>(options =>
{
options
.UseLazyLoadingProxies()
.UseSqlServer(Configuration["ConnectionString"]);
});
因此,现在框架的“顶部”将包含一个面板,该面板的组件从左开始显示,而框架的“中心”将包含您的拼图,并以框架的其余空间为中心。
编辑:
我解决了这个问题,但是在中心部分将gridx和gridy设置为0,但是我并不完全了解这些设置
好吧,我提到您需要使用gridx / gridy约束。您应该始终使用这些约束,因为很明显要将组件添加到哪个网格。本教程中的示例始终指定这些值。
同时使用gridx / gridy都等于0确实没有道理。结果是您有两个组件试图共享同一网格。
删除setResizable(false)语句并缩小框架的大小,以查看按钮如何重新定位自身。
两个组件共享同一网格是不正常的。通常,您将在第一行拥有菜单,在第二行拥有按钮。这将使按钮在框架中水平居中,在菜单下方的空间中垂直居中。 你是做什么的