gpt4 book ai didi

java - 如何在 Java (Swing) 中使用 GridBagLayout 在我的框架中生成此特定图像?

转载 作者:行者123 更新时间:2023-12-05 08:59:56 26 4
gpt4 key购买 nike

Desired main GUI

基本上,我该如何生成它?我很确定这是 GridBagLayout 的工作,但我无法思考如何正确调整“操作 Pane ”与“菜单栏”的大小。红线和黑线表示我认为您将在这种情况下使用的网格 (3x3),但我可能完全错了,可能有一种方法可以在不同的配置中完成。我试图弄乱 weightx , weighty , gridheight , gridwidth GridBagConstraints 中的值,但我无法在这里实现我的目标。

请注意,第二条红线应该正好是框架下半部分高度的三分之一。

这是我最近的尝试,尝试使用 3x6 网格(c 是 GridBagConstraints 对象,characterPortraits 包含所有肖像,currentScreen 是“操作 Pane ”):

c.fill = GridBagConstraints.BOTH;
c.weightx = 0.25;
c.weighty = (1/6);
c.gridx = 0;
c.gridy = 0;
c.gridheight = 3;
pane.add(characterPortraits.get(0), c);

c.gridx = 2;
pane.add(characterPortraits.get(1), c);

c.gridx = 0;
c.gridy = 3;
c.gridheight = 3;
pane.add(characterPortraits.get(2), c);

c.gridx = 2;
pane.add(characterPortraits.get(3), c);

//c.fill = GridBagConstraints.NONE;
c.weightx = 1.0;
c.weighty = 1.0;
c.gridx = 1;
c.gridy = 0;
c.gridheight = 3;
pane.add(currentScreen, c);

相反,这会在其象限的底部三分之一处生成每个肖像,并且操作 Pane 占据中心列的 5/6 而不是我想要的 4/6。任何想法都会有所帮助;谢谢! -B.

编辑:我将此应用程序设计为具有固定的窗口大小;人们可能会说这是糟糕的设计,但我实际上只是想感受一下 Swing 组件,并确保它们至少在固定窗口中按照我希望的方式运行。我想我可能允许最大化适当调整大小,但仅此而已。

最佳答案

尽管如此,您在最奇怪的位置添加 JMenuBar 对我来说似乎很奇怪。虽然你能做的是克服你在这一行中提到的困难

Instead, this produces each portrait in the bottom third of its quadrant, and the 
Action Pane taking 5/6 of the center column instead of 4/6, like I want it to.

就是在这个位置添加一个JPanel,把你的ActionPaneJmenuBar放到这个添加的JPanel上,以达到预期的结果。所以我在这个位置添加了 centerPanel 来演示如何实现这一点。

我希望这个输出是你所期望的:

OUTPUT

这是负责此输出的代码:

import java.awt.*;
import javax.swing.*;

public class GridBagPanelLayout
{
private JPanel portrait1;
private JPanel portrait2;
private JPanel portrait3;
private JPanel portrait4;
private JPanel centerPanel;

private JPanel actionPane;

private void createAndDisplayGUI()
{
JFrame frame = new JFrame("GridBag JPanel Layout Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

/*
* This JPanel will serve as the
* Content Pane, for the JFrame.
*/
JPanel contentPane = new JPanel();
contentPane.setOpaque(true);
contentPane.setBackground(Color.WHITE);
contentPane.setLayout(new GridBagLayout());

GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 0.33;
gbc.weighty = 0.5;
gbc.gridheight = 2;

portrait1 = new JPanel();
portrait1.setOpaque(true);
portrait1.setBackground(Color.BLUE);
portrait1.setBorder(
BorderFactory.createMatteBorder(
2, 2, 2, 2, Color.WHITE));
contentPane.add(portrait1, gbc);

gbc.gridx = 1;
gbc.gridy = 0;
gbc.weighty = 1.0;
gbc.gridheight = 4;

centerPanel = new JPanel();
centerPanel.setOpaque(true);
centerPanel.setBackground(Color.WHITE);
centerPanel.setLayout(new GridBagLayout());
GridBagConstraints constCenter = new GridBagConstraints();
constCenter.anchor = GridBagConstraints.FIRST_LINE_START;
constCenter.fill = GridBagConstraints.BOTH;
constCenter.gridx = 0;
constCenter.gridy = 0;
constCenter.weightx = 1.0;
constCenter.weighty = 0.975;

actionPane = new JPanel();
actionPane.setOpaque(true);
actionPane.setBackground(Color.MAGENTA);
actionPane.setBorder(
BorderFactory.createMatteBorder(
2, 2, 2, 2, Color.WHITE));
centerPanel.add(actionPane, constCenter);

constCenter.gridx = 0;
constCenter.gridy = 1;
constCenter.weighty = 0.025;

centerPanel.add(getMenuBar(), constCenter);
contentPane.add(centerPanel, gbc);

gbc.gridx = 2;
gbc.gridy = 0;
gbc.weighty = 0.5;
gbc.gridheight = 2;

portrait3 = new JPanel();
portrait3.setOpaque(true);
portrait3.setBackground(Color.BLUE);
portrait3.setBorder(
BorderFactory.createMatteBorder(
2, 2, 2, 2, Color.WHITE));
contentPane.add(portrait3, gbc);

gbc.gridx = 0;
gbc.gridy = 2;
//gbc.weighty = 0.5;
//gbc.gridheight = 2;

portrait2 = new JPanel();
portrait2.setOpaque(true);
portrait2.setBackground(Color.BLUE);
portrait2.setBorder(
BorderFactory.createMatteBorder(
2, 2, 2, 2, Color.WHITE));
contentPane.add(portrait2, gbc);

gbc.gridx = 2;
gbc.gridy = 2;
gbc.weighty = 0.5;
gbc.gridheight = 2;

portrait4 = new JPanel();
portrait4.setOpaque(true);
portrait4.setBackground(Color.BLUE);
portrait4.setBorder(
BorderFactory.createMatteBorder(
2, 2, 2, 2, Color.WHITE));
contentPane.add(portrait4, gbc);

frame.setContentPane(contentPane);
frame.setSize(500, 300);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

private JMenuBar getMenuBar()
{
JMenuBar menuBar = new JMenuBar();

JMenu fileMenu = new JMenu("File");
fileMenu.setOpaque(true);
fileMenu.setBackground(Color.BLACK);
fileMenu.setForeground(Color.WHITE);
JMenuItem newItem = new JMenuItem("NEW");
JMenuItem openItem = new JMenuItem("OPEN");
fileMenu.add(newItem);
fileMenu.add(openItem);

JMenu editMenu = new JMenu("Edit");
editMenu.setOpaque(true);
editMenu.setBackground(Color.BLACK);
editMenu.setForeground(Color.WHITE);
JMenuItem redoItem = new JMenuItem("Redo");
JMenuItem undoItem = new JMenuItem("Undo");
editMenu.add(redoItem);
editMenu.add(undoItem);

JMenu viewMenu = new JMenu("View");
viewMenu.setOpaque(true);
viewMenu.setBackground(Color.BLACK);
viewMenu.setForeground(Color.WHITE);
JMenuItem zInItem = new JMenuItem("Zoom In");
JMenuItem zOutItem = new JMenuItem("Zoom Out");
viewMenu.add(zInItem);
viewMenu.add(zOutItem);

menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(viewMenu);
menuBar.setOpaque(true);
menuBar.setBackground(Color.BLACK);

return menuBar;
}

public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new GridBagPanelLayout().createAndDisplayGUI();
}
});
}
}

关于java - 如何在 Java (Swing) 中使用 GridBagLayout 在我的框架中生成此特定图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11165323/

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