How do I nest layout managers without using swing classes/methods?

橙三吉。 提交于 2019-12-12 18:11:51

问题


I need to make an applet in Java 6, 640*480 pixels, with a toolbar on the bottom with some buttons, scrollbars, and labels. The best way I could think of was using a BorderLayout, making the BorderLayout.SOUTH region a GridBagLayout (which would contain the controls), and the rest of the BorderLayout area null, as a place for grapics to be drawn with the controls. I can't find any resources online that don't use swing, and I don't know anything about swing to deduce what they are doing or how to translate it into awt code. Here is where I am now. The code ends abruptly in init(), since that's where the layout mangers start. Thank you for any help you have. Let me know if you need more information then what is here.

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()
    {
    }
}

回答1:


Let's clarify a few things. A LayoutManagers are used by a Container (such as Frame, Panel, or Applet) to calculate position and size of the components inside the Container. This means that it is incorrect to talk about "nesting LayoutManagers". On the other hand you can nest Containers inside each other and give each one its own LayoutManager. I believe this is what you want to do.

Let me illustrate this with a contrived example:

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();
    }
}

Notice that you need to create a new Panel for each LayoutManager. Or rather each Panel that you create needs a LayoutManager. Also, this example can easily be changed from AWT to Swing by replacing Frame with JFrame, Panel with JPanel, Button with JButton, and Label with JLabel.

p.s. The above code is not tested. It should illustrate the concepts involved here, though.



来源:https://stackoverflow.com/questions/12886600/how-do-i-nest-layout-managers-without-using-swing-classes-methods

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!