java - java - 如何在Java swing中用背景色填充整个面板?
问题描述
我最近开始学习 Java,现在正在尝试使用 Swing,所以我对此还是很陌生。我正在尝试使用(在此示例中)1 行和 1 列来制作 gridbaglayout,所以我在布局中添加了一个带有一些背景颜色的 JPanel,但是背景颜色似乎只出现在文本的长度上,而不是整个面板。我希望背景颜色在行的整个长度上保持不变,
另外,我必须添加第二个带有大 weightx 的列,以确保我的面板不会自动居中,有没有更好的方法来实现呢?
这是我目前拥有的代码,
public static void main(String args[]) {
JFrame mainFrame = new JFrame();
mainFrame.setSize(900, 600);
mainFrame.setLayout(new GridBagLayout());
JPanel roll = new JPanel();
roll.setBackground(new Color(190, 177, 245));
JLabel wageChangeTag = new JLabel("Change");
GridBagConstraints gRoll = new GridBagConstraints();
gRoll.gridx = 0;
gRoll.gridy = 0;
gRoll.weightx = 5;
gRoll.anchor = GridBagConstraints.CENTER;
roll.add(wageChangeTag, gRoll);
////////////// MAIN GRID//////////////////
GridBagConstraints gc = new GridBagConstraints();
gc.gridx = 0;
gc.gridy = 0;
gc.weightx = 5;
gc.anchor = GridBagConstraints.FIRST_LINE_START;
gc.weighty = 5;
mainFrame.add(roll, gc);
gc.gridx++;
gc.weightx = 0.1;
mainFrame.add(new JLabel(), gc);
mainFrame.setVisible(true);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
解决方案
你看到的画的其实都是你的 JPanel,和你里面的标签无关。例如,您可以通过为其添加边框来看到这一点(在您设置背景之后:
roll.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
现在让它水平扩展,请尝试在您的 JPanel GridBagConstraints 中添加以下行:
gc.fill = GridBagConstraints.HORIZONTAL;
推荐阅读
- python - 使用静态分析和 Jedi 查找 Python 基类
- javascript - 使用 vega-embed 的 Vega-lite 重置视图
- css - CSS:文本不可见
- sql - SQL如何根据父子关系同时插入/更新/删除
- netdata - 多台服务器的网络数据显示,就像在他们的云上显示的那样。我可以在没有云的情况下做到这一点吗?
- r - 有条件地识别观察
- pine-script - 如何在 Pine Editor 中添加代码以交叉检查同一股票代码的不同时间范围的图表
- c# - 如何以非常具体的方式格式化 Serilog JSON 输出
- amazon-web-services - 无法更新 aws 传输服务器上的安全组
- vscode-debugger - 有没有办法在用 Vite 启动的 VsCode 中调试代码?