【问题标题】:Huge space between my JSlider and text underneath我的 JSlider 和下面的文本之间有巨大的空间
【发布时间】:2020-01-03 16:18:19
【问题描述】:

我目前正在开发用于 java 的媒体播放器,并且借助 VLCJ 的强大功能,我正在实现均衡器调整窗口。将有 11 个垂直滑块,下方有一个 JLabel,指示 hZ 频段和频段的 dB 级别。但是,滑块不断在其自身和 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;
    }

}

【问题讨论】:

    标签: java swing jpanel jlabel jslider


    【解决方案1】:

    您正在使用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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 2019-05-25
      • 2022-10-19
      • 2019-07-17
      相关资源
      最近更新 更多