布局管理器不起作用

时间:2010-01-11 01:51:07

标签: java swing grouplayout

我在GUI中做了一个布局,但它没有用,所有组件都是一个接一个地出现。

这是我的代码:

import javax.swing.*;
public class main extends JFrame {
public main() {
    try {

        add(new FYP_Tx.GUI());

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(800, 600);
        setLocationRelativeTo(null);
        setTitle("FYP Video Platform");
        setResizable(true);
        setVisible(true);

    } catch (Exception e) {
        System.out.println("Exception: " + e.toString());
    }
}

public static void main(String[] args) {
    new main();
}
}



public class GUI extends JPanel implements Runnable, ActionListener, ItemListener {

private JButton btnStart, btnStop, btnPause, btnFile;
private JLabel lblDisplay, lblSNR, lblStatus, lblConfig;
private JCheckBox chkLoop, chkNeg;
private Thread animator;
private JFileChooser fileChooser;
private JList lstML;
private JTextField txtSNR;
private boolean pauseAnimator, loop;
Matlab_options matlab = new Matlab_options();

public GUI() {
    GroupLayout guiLayout = new GroupLayout(this);

    lblDisplay = new JLabel();
    lblStatus = new JLabel();
    lblConfig = new JLabel();
    lblSNR = new JLabel("SNR: ");
    btnStart = new JButton("Start");
    btnStop = new JButton("Stop");
    btnPause = new JButton("Pause");
    btnFile = new JButton("Open File");
    chkLoop = new JCheckBox("Loop");
    chkNeg = new JCheckBox("Negative SNR");
    txtSNR = new JTextField(3);
    txtSNR.setText("10");
    lblDisplay.setDoubleBuffered(true);

    btnStart.setEnabled(false);
    btnStop.setEnabled(false);
    btnPause.setEnabled(false);

    btnStart.setActionCommand("start");
    btnStop.setActionCommand("stop");
    btnPause.setActionCommand("pause");
    btnFile.setActionCommand("file");

    guiLayout.setAutoCreateContainerGaps(true);
    guiLayout.setAutoCreateGaps(true);
    GroupLayout.SequentialGroup hGroup = guiLayout.createSequentialGroup();
    GroupLayout.SequentialGroup vGroup = guiLayout.createSequentialGroup();

    hGroup.addGroup(guiLayout.createParallelGroup().addComponent(lblDisplay));
    hGroup.addGroup(guiLayout.createParallelGroup().addComponent(btnStart).addComponent(btnStop).addComponent(btnPause).addComponent(chkLoop));
    hGroup.addGroup(guiLayout.createParallelGroup().addComponent(btnFile).addComponent(chkLoop));
    guiLayout.setHorizontalGroup(hGroup);

    vGroup.addGroup(guiLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(lblDisplay).addComponent(btnStart).addComponent(btnFile));
    vGroup.addGroup(guiLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(btnStop).addComponent(chkLoop));
    guiLayout.setVerticalGroup(vGroup);

    btnStart.addActionListener(this);
    btnStop.addActionListener(this);
    btnPause.addActionListener(this);
    btnFile.addActionListener(this);
    chkLoop.addItemListener(this);
    chkNeg.addItemListener(this);
}

public void addNotify() {
    super.addNotify();
    loop = false;
    lblDisplay.setSize(400, 400);
    lblDisplay.setVisible(true);
    animator = new Thread(this);
}

public void paint(Graphics g) {
    super.paint(g);
    Toolkit.getDefaultToolkit().sync();
    g.dispose();
}

`

1 个答案:

答案 0 :(得分:3)

您是否必须为JPanel设置Layoutmanager?

    public GUI() {
        GroupLayout guiLayout = new GroupLayout(this);
        this.setLayout(guiLayout);
 ......
    }