gpt4 book ai didi

java - 如何在不使用 swing 类/方法的情况下嵌套布局管理器?

转载 作者:行者123 更新时间:2023-11-30 06:28:09 25 4
gpt4 key购买 nike

我需要用 Java 6 制作一个小程序,640*480 像素,底部有一个工具栏,上面有一些按钮、滚动条和标签。我能想到的最好的方法是使用 BorderLayout,使 BorderLayout.SOUTH 区域成为 GridBagLayout(将包含控件),并且BorderLayout 的其余部分为 null,作为使用控件绘制图形的地方。我在网上找不到任何不使用swing的资源,而且我对swing一无所知,无法推断出它们在做什么或如何将其翻译成awt代码。这就是我现在所在的位置。代码在 init() 中突然结束,因为这是布局管理器开始的地方。感谢您提供的任何帮助。如果您需要更多信息,请联系我。

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Bounce extends Applet implements ActionListener, AdjustmentListener
{
private static final long serialVersionUID = 1L;
private Graphics page;
//buttons
String shapeButtonText = "Square";
Button shape = new Button(shapeButtonText);
Button quit = new Button("Quit");
Button run = new Button("Run");
Button tail = new Button("Tail");
Button clear = new Button("Clear");

//labels
Label speedLabel = new Label("Speed", Label.CENTER);
Label sizeLabel = new Label("Size", Label.CENTER);

//scrollbars
private final int barHeight = 20;
private final int SLIDER_WIDTH = 10;
private final int MAXSPEED = 110;
private final int MINSPEED = 0;
private final int UNIT_INC = 1;
private final int BLOC_INC = 10;
private final int MAX_SIZE = 110;
private final int MIN_SIZE = 10;
Scrollbar speedBar = new Scrollbar(Scrollbar.HORIZONTAL, MINSPEED, SLIDER_WIDTH, 0, MAXSPEED);
Scrollbar sizeBar = new Scrollbar(Scrollbar.HORIZONTAL, MIN_SIZE, SLIDER_WIDTH, 0, MAX_SIZE);


//methods
public void init()
{
//set up objects
//speed scroll bar
speedBar.setUnitIncrement(UNIT_INC);
speedBar.setBlockIncrement(BLOC_INC);
speedBar.setValue(MAXSPEED/2);

//size scrollbar
sizeBar.setUnitIncrement(UNIT_INC);
sizeBar.setBlockIncrement(BLOC_INC);
sizeBar.setValue(MAX_SIZE/2);

//draw the window
BorderLayout window = new BorderLayout();
GridBagLayout toolbar = new GridBagLayout();
//?
}

public void start()
{
}

public void run()
{
}

public void actionPerformed(ActionEvent e)
{
}

public void adjustmentValueChanged(AdjustmentEvent e)
{
}

public void stop()
{
}

public void destory()
{
}
}

最佳答案

让我们澄清一些事情。 LayoutManagerContainer(例如 FramePanelApplet 使用code>) 来计算组件在 Container 中的位置和大小。这意味着谈论“嵌套LayoutManager”是不正确的。另一方面,您可以将 Container 相互嵌套,并为每个容器提供自己的 LayoutManager。我相信这就是你想要做的。

让我用一个人为的例子来说明这一点:

public class MyGUI {
public static void main(String[] args) {
Frame f = new Frame("Layout Example");
Panel mainPanel = new Panel(new BorderLayout());
f.add(mainPanel);

Panel toolBar = new Panel(new FlowLayout());
toolBar.add(new Button("Button 1"));
toolBar.add(new Button("Button 2"));
mainPanel.add(tollBar.NORTH);

Panel statusBar = new Panel(new FlowLayout());
statusBar.add(new Label("Status"));
mainPanel.add(statusBar);

f.pack();
f.show();
}
}

请注意,您需要为每个 LayoutManager 创建一个新的 Panel。或者更确切地说,您创建的每个 Panel 都需要一个 LayoutManager。此外,通过将 Frame 替换为 JFrame,将 Panel 替换为 JPanel,可以轻松地将此示例从 AWT 更改为 Swing, Button 使用 JButtonLabel 使用 JLabel

附注上面的代码没有测试。不过,它应该说明此处涉及的概念。

关于java - 如何在不使用 swing 类/方法的情况下嵌套布局管理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12886600/

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