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

1

2

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()
    {
    }
}
Abomasum answered 14/10, 2012 at 21:15 Comment(9)
Please edit your question to include the error message. You need to bring up the Java Control Panel for your browser plugin to see it.Upbear
Is there a reason you don't want to use Swing? AWT is considered obsolete in most Java circles.Upbear
@Code-Guru there is no error message. I just plain don't know how, and cant find other resources. Reason for not using swing? No good reason, but at the moment I only know some AWT and no Swing, so i was just sticking with what I knowAbomasum
looking around and seeing no AWT stuff leads me to believe I should bite the bullet and teach myself swing for this though...Abomasum
I strongly suggest you learn Swing. Much of it is built on top of AWT, so it is very similar. As for the error message, there is one somewhere. It's been a while since I made applets, so I can't remember exactly how to pull it up...Upbear
Check out #12887283 for instructions on how to see the error messages. Then copy and paste them here.Upbear
@Code-Guru i did, and there is no error.Abomasum
After looking more closely at your code, I see that it shouldn't stop. However, you haven't added any controls to your applet, so you'll get a blank window.Upbear
yes, theres nothing added since I dont know how to get the layout managers to arrange as neededAbomasum
U
5

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.

Upbear answered 14/10, 2012 at 21:52 Comment(1)
this makes much more sense then what my previous thought process was.Abomasum

© 2022 - 2024 — McMap. All rights reserved.