java - 我的 JSlider 和下面的文本之间有巨大的空间

标签 java swing jpanel jlabel jslider

我目前正在开发一个 Java 媒体播放器,借助 VLCJ 的强大功能,我正在致力于实现均衡器调整窗口。将有 11 个垂直 slider ,其下方有一个 JLabel,指示 hZ 频段和频段的 dB 级别。然而, slider 不断在其自身和 JLabel 之间添加巨大的间隙。我尝试将两个 JLabel 堆叠在一起,几乎没有间隙。我的代码如下。 (返回均衡器的东西还没有实现。我只想在开始添加功能之前有一个基本的 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来放置 slider 和文本标签。这意味着它们将占据相同的高度。因此,由于 slider 的高度较大,标签的高度也会调整为该高度。尝试使用另一个 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();
    }
}

关于java - 我的 JSlider 和下面的文本之间有巨大的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59581855/

相关文章:

java - 在 LIBGDX 中隐藏敌人

java - 在 Java Swings 中自定义 JTextField - 向 JTextField 添加简单/复合/自定义边框

java - 2011 年 Swing 应用程序的首选可视化编辑器 Eclipse 插件是什么?

java - Swing 灯箱效果

java - JFrame中如何排列多个面板

java - DecimalFormat.parse() 忽略指数

java - Play Framework - 使用 dist 命令部署后出现 "No query defined for that name [...]"错误

java - JPA : reference to a generated JoinTable

java - 使用字符串列表作为组合框的来源

java - 设置 JButton 大小