gpt4 book ai didi

java - 边框布局、网格布局、网格包布局?我应该使用哪个?

转载 作者:行者123 更新时间:2023-12-03 01:50:55 24 4
gpt4 key购买 nike

我正在尝试创建这个基本的 GUI,但无法正确设置我的面板。(数字是像素大小)

GUI

我尝试过使用本教程作为引用 ( http://www.youtube.com/watch?v=Kl3klve_rmQ ),但是我的效果始终不一样。

我的代码在类的顶部声明变量,然后创建一个添加组件(面板、按钮等)的构造函数,然后在主方法中调用构造函数。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

公共(public)类 FinalProject 扩展了 JPanel{

private static final long serialVersionUID = 1L;

static JPanel nav;
static JPanel queue;
static JPanel menu;

GridBagConstraints gbc = new GridBagConstraints();

public FinalProject()
{

nav = new JPanel();
nav.setLayout(new GridBagLayout());
nav.setBackground(Color.RED);
gbc.gridy = 0;
gbc.gridx = 0;
gbc.gridheight = 1;
gbc.gridwidth = 1;
add(nav, gbc);

queue = new JPanel();
queue.setLayout(new GridBagLayout());
queue.setBackground(Color.GREEN);
gbc.gridy = 1;
gbc.gridx = 1;
gbc.gridheight = 1;
gbc.gridwidth = 1;
add(queue, gbc);

menu = new JPanel();
menu.setLayout(new GridBagLayout());
menu.setBackground(Color.BLUE);
gbc.gridy = 2;
gbc.gridx = 2;
gbc.gridheight = 1;
gbc.gridwidth = 1;
add(menu, gbc);
}

public static void main(String[] args)
{
FinalProject p = new FinalProject();
JFrame f = new JFrame();

f.add(nav);
f.add(queue);
f.add(menu);

f.setTitle("Subway");
f.setSize(800, 500);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.setResizable(false);
f.add(p);
}

}

我应该如何使这个布局正确?面板中的面板、面板之间相互独立等等?

最佳答案

不,不要为此使用 GridBagLayout,因为您会增加比实际需要更多的复杂性。我自己尽量避免使用这种布局及其所有潜在的陷阱,通常您可以通过嵌套 JPanel 来获得所需的一切,每个 JPanel 都使用自己更简单的布局。例如在这里,您所需要的只是一个 BorderLayout:

  • 将顶部 JPanel 放置在 BorderLayout.NORTH 位置
  • 将左侧 JPanel 放置在 BorderLayout.WEST 位置
  • 将中心 JPanel 放置在 BorderLayout.CENTER 位置。

就是这样。

再次,请查看 Swing 和布局管理器教程,因为那里提供了很好的信息。

<小时/>

编辑
请注意,您的 JFrame 上没有显示任何内容,因为您没有将 JPanel 添加到 JFrame!

<小时/>

编辑2
例如:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagLayout;

import javax.swing.*;

public class SimpleLayout {
private static final Color GREEN = new Color(200, 255, 200);
private static final Color BLUE = new Color(200, 200, 255);

private static void createAndShowGui() {
JFrame frame = new JFrame("SimpleLayout");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// note that a JFrame's contentPane uses BorderLayout by default
frame.getContentPane().add(new ColorPanel(Color.pink, 800, 80), BorderLayout.NORTH);
frame.getContentPane().add(new ColorPanel(GREEN, 300, 420), BorderLayout.WEST);
frame.getContentPane().add(new ColorPanel(BLUE, 500, 420), BorderLayout.CENTER);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}

class ColorPanel extends JPanel {
private static final float FONT_POINTS = 24f;
private int prefW;
private int prefH;

public ColorPanel(Color color, int prefW, int prefH) {
setBackground(color);
this.prefW = prefW;
this.prefH = prefH;

// GBL can be useful for simply centering components
setLayout(new GridBagLayout());
String text = String.format("%d x %d", prefW, prefH);
JLabel label = new JLabel(text, SwingConstants.CENTER);
label.setFont(label.getFont().deriveFont(FONT_POINTS));
label.setForeground(Color.gray);
add(label);
}



@Override
public Dimension getPreferredSize() {
return new Dimension(prefW, prefH);
}
}
<小时/>

这显示为:

enter image description here

关于java - 边框布局、网格布局、网格包布局?我应该使用哪个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23224480/

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