我的 JSlider 和下面的文本之间有巨大的 space

Huge space between my JSlider and text underneath

我目前正在为 java 开发媒体播放器,并且借助 VLCJ 的强大功能,我正在努力实施均衡器调整 window。将有 11 个垂直滑块,它们下方有一个 JLabel,指示 hZ 频段和频段的 dB 级别。但是,滑块不断在自身和 JLabel 之间增加巨大的差距。我尝试将两个 JLabel 堆叠在一起,几乎没有间隙。我的代码如下。 (return 均衡器的东西还没有实现。在我开始添加功能之前,我只想要一个基本的 UI 工作)

import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;

import uk.co.caprica.vlcj.player.Equalizer;

public class VideoEQFrame {

    public VideoEQFrame() {
        //constructor
    }

    public Equalizer show() {
        JFrame frame = new JFrame("Effects");

        JPanel panel = new JPanel();

        JPanel sliders= new JPanel();

        JPanel gainObjects = new JPanel(new GridLayout(2, 0, 2, 0));
        JSlider gainS = new JSlider(JSlider.VERTICAL, -12, 12, 0);

        gainS.setMajorTickSpacing(2);
        gainS.setPaintTicks(true);
        gainS.setToolTipText("Adjust the gain");
        JLabel gainL = new JLabel("Text");
        gainObjects.add(gainS);
        gainObjects.add(gainL);
        sliders.add(gainObjects);

        panel.add(sliders);

        frame.add(panel);
        frame.setSize(new Dimension(600, 300));
        //frame.setResizable(false);
        frame.setVisible(true);

        Equalizer eq = new Equalizer(0);
        return eq;
    }

}

您正在使用 GridLayout 放置滑块和文本标签。这意味着它们将占据相同的高度。所以因为滑块有更大的高度,标签的高度也调整到这个高度。尝试使用另一个 LayoutManager,例如 BorderLayout,像这样:

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;

public class VideoEQFrame {

    public VideoEQFrame() {
        //constructor
    }

    public void show() {
        JFrame frame = new JFrame("Effects");

        JPanel panel = new JPanel();

        JPanel sliders= new JPanel();

        JPanel gainObjects = new JPanel(new BorderLayout());
        JSlider gainS = new JSlider(JSlider.VERTICAL, -12, 12, 0);

        gainS.setMajorTickSpacing(2);
        gainS.setPaintTicks(true);
        gainS.setToolTipText("Adjust the gain");
        JLabel gainL = new JLabel("Text");
        gainObjects.add(gainS, BorderLayout.CENTER);
        gainObjects.add(gainL, BorderLayout.PAGE_END);
        sliders.add(gainObjects);

        panel.add(sliders);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(panel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        //frame.setResizable(false);
        frame.setVisible(true);

//        Equalizer eq = new Equalizer(0);
//        return eq;
    }

    public static void main(final String[] args) {
        new VideoEQFrame().show();
    }
}