2

我是 SWT 新手,但对其他 GUI 布局管理器有丰富的经验。在将复合材料嵌套在另一个复合材料中时,我遇到了一个奇怪的问题。

在此处输入图像描述

http://www.swooby.com/swt/nestedcontrolproblem.png

如果我将 audiocontrol 作为独立 bean 运行,它可以正常工作。

如果我将它嵌套在另一个复合材料中运行,它就会开始变得有趣。

当我将此组合添加到更复杂的父级(6 列)时,嵌套组合似乎没有正确遵守其自己的类定义的水平跨度。

音频控件在不太复杂的父级(共 2 列)中布局良好。

我正在使用 Eclipse 可视化编辑器来布置这些,所以我没有编写任何我自己的代码来改变布局(除了将 Composite 类型更改为 CompositeAudio)。

重现此代码:Parent.java

package com.twistpair.qa;

import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;

public class Parent extends Composite {

    private AudioControl compositeAudio = null;

    public Parent(Composite parent, int style) {
        super(parent, style);
        initialize();
    }

    private void initialize() {
        GridLayout gridLayout = new GridLayout();
        gridLayout.numColumns = 2;
        this.setLayout(gridLayout);
        createCompositeAudio();
        setSize(new Point(97, 673));
    }

    /**
     * This method initializes compositeAudio   
     *
     */
    private void createCompositeAudio() {
        GridData gridData = new GridData();
        gridData.horizontalAlignment = GridData.CENTER;
        gridData.grabExcessHorizontalSpace = false;
        gridData.grabExcessVerticalSpace = false;
        gridData.horizontalSpan = 2;
        gridData.verticalAlignment = GridData.CENTER;
        compositeAudio = new AudioControl(this, SWT.NONE);
        compositeAudio.setLayout(new GridLayout());
        compositeAudio.setLayoutData(gridData);
    }

}  //  @jve:decl-index=0:visual-constraint="36,7"

音频控制.java:

package com.twistpair.qa;

import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Scale;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.widgets.Display;

public class AudioControl extends Composite {

    private CLabel cLabelAudio = null;
    private Button checkBoxRunning = null;
    private CLabel cLabelVolume = null;
    private Scale scaleVolumeLeft = null;
    private CLabel cLabelVuMeter = null;
    private Canvas canvasVuMeterLeft = null;
    private Button checkBoxMuteRx = null;
    private Button checkBoxMuteTx = null;
    private Button checkBoxMuteBoth = null;
    private Scale scaleVolumeRight = null;
    private Canvas canvasVuMeterRight = null;

    public AudioControl(Composite parent, int style) {
        super(parent, style);
        initialize();
    }

    private void initialize() {
        GridData gridData31 = new GridData();
        gridData31.horizontalAlignment = GridData.CENTER;
        gridData31.verticalAlignment = GridData.CENTER;
        GridData gridData21 = new GridData();
        gridData21.horizontalAlignment = GridData.CENTER;
        gridData21.verticalAlignment = GridData.CENTER;
        GridData gridData11 = new GridData();
        gridData11.horizontalSpan = 2;
        GridData gridData5 = new GridData();
        gridData5.horizontalSpan = 2;
        gridData5.verticalAlignment = GridData.CENTER;
        gridData5.horizontalAlignment = GridData.CENTER;
        GridData gridData4 = new GridData();
        gridData4.horizontalSpan = 2;
        gridData4.verticalAlignment = GridData.CENTER;
        gridData4.horizontalAlignment = GridData.CENTER;
        GridData gridData3 = new GridData();
        gridData3.horizontalSpan = 2;
        gridData3.verticalAlignment = GridData.CENTER;
        gridData3.horizontalAlignment = GridData.CENTER;
        GridData gridData2 = new GridData();
        gridData2.horizontalSpan = 2;
        GridData gridData1 = new GridData();
        gridData1.horizontalSpan = 2;
        GridData gridData = new GridData();
        gridData.horizontalSpan = 2;
        GridLayout gridLayout = new GridLayout();
        gridLayout.numColumns = 2;
        cLabelAudio = new CLabel(this, SWT.NONE);
        cLabelAudio.setText("Audio");
        cLabelAudio.setFont(new Font(Display.getDefault(), "Segoe UI", 9, SWT.BOLD));
        cLabelAudio.setLayoutData(gridData5);
        checkBoxRunning = new Button(this, SWT.CHECK);
        checkBoxRunning.setText("Running");
        checkBoxRunning.setLayoutData(gridData11);
        cLabelVolume = new CLabel(this, SWT.NONE);
        cLabelVolume.setText("Volume");
        cLabelVolume.setFont(new Font(Display.getDefault(), "Segoe UI", 9, SWT.BOLD));
        cLabelVolume.setLayoutData(gridData4);
        scaleVolumeLeft = new Scale(this, SWT.VERTICAL);
        scaleVolumeLeft.setLayoutData(gridData21);
        scaleVolumeRight = new Scale(this, SWT.VERTICAL);
        scaleVolumeRight.setLayoutData(gridData31);
        cLabelVuMeter = new CLabel(this, SWT.NONE);
        cLabelVuMeter.setText("VU Meter");
        cLabelVuMeter.setFont(new Font(Display.getDefault(), "Segoe UI", 9, SWT.BOLD));
        cLabelVuMeter.setLayoutData(gridData3);
        createCanvasVuMeterLeft();
        this.setLayout(gridLayout);
        this.setSize(new Point(151, 415));
        createCanvasVuMeterRight();
        checkBoxMuteRx = new Button(this, SWT.CHECK);
        checkBoxMuteRx.setText("Mute RX");
        checkBoxMuteRx.setLayoutData(gridData);
        checkBoxMuteTx = new Button(this, SWT.CHECK);
        checkBoxMuteTx.setText("Mute TX");
        checkBoxMuteTx.setLayoutData(gridData1);
        checkBoxMuteBoth = new Button(this, SWT.CHECK);
        checkBoxMuteBoth.setText("Mute Both");
        checkBoxMuteBoth.setLayoutData(gridData2);
    }

    /**
     * This method initializes canvasVuMeterLeft    
     *
     */
    private void createCanvasVuMeterLeft() {
        canvasVuMeterLeft = new Canvas(this, SWT.BORDER);
    }

    /**
     * This method initializes canvasVuMeterRight   
     *
     */
    private void createCanvasVuMeterRight() {
        canvasVuMeterRight = new Canvas(this, SWT.BORDER);
    }

}  //  @jve:decl-index=0:visual-constraint="10,10"

我的另一个问题是音频控件最初在两个 VU(左/右)画布下方有三个“静音 *”复选框。在一个不太复杂的父级中,布局主要是表现出来的,但是 VU 画布下方的三个复选框没有被创建。我使用了一个间谍程序来浏览正在运行的 UI,并且控件确实不存在。代码确实有我可以操作的有效对象。我认为这很奇怪,似乎只是通过移动复选框暂时解决了问题,但我认为这可能表明我的音频控制有问题。

有没有人看到过这两个问题?我搜索了网络和stackoverflow,没有看到任何直接相关的内容。

谢谢!

光伏

4

0 回答 0