如何设置JSlider的大小?

时间:2014-02-17 17:23:22

标签: java swing jslider

我已经在网上搜索了这个问题的解决方案,但没有找到任何有效的方法。

我在JPanel中有一个垂直JSlider,它使用GridBagLayout和GridBagConstraints来定位面板上的对象。

目前我有以下代码:

    gbc.gridy = 1;
    add(button1,gbc);

    gbc.gridy = 2;
    add(button2,gbc);

    gbc.gridy = 3;
    add(slider,gbc);

物体沿着面板垂直放置。

滑块始终以相同的尺寸(长度)显示。试图使用setPreferredSize - 没有用。试图使用gridheight以便滑块跨越两行 - 也不起作用。试图更改滑块的实际最小值和最大值,没有帮助。

GridBagLayout不应该尊重首选大小吗?

编辑:还尝试在主JPanel中创建anoter JPanel,将其布局设置为FlowLayout,BoxLayout或GridLayout,并为其添加滑块。没改变一件事。非常奇怪。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

使用不同的布局管理器(或将滑块放在嵌套的JPanel中,使用不同的布局管理器),拉伸 JSlider。在示例中,我使用BorderLayout

enter image description here

import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.SwingUtilities;

public class DifferentSizeSlider extends JPanel{
    public DifferentSizeSlider() {
        JPanel topPanel = new JPanel(new BorderLayout());
        topPanel.add(new JSlider());

        JPanel bottomPanel = new JPanel(new GridLayout(1, 2));
        bottomPanel.add(new JSlider());
        bottomPanel.add(new JPanel());

        setLayout(new GridLayout(2, 1));
        add(topPanel);
        add(bottomPanel);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                JOptionPane.showMessageDialog(null, new DifferentSizeSlider());
            }
        });
    }
}

使用您的代码示例

编辑

enter image description here

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.SwingUtilities;

public class DifferentSizeSlider extends JPanel{
    public DifferentSizeSlider() {
        JPanel topPanel = new JPanel(new BorderLayout());
        topPanel.setPreferredSize(new Dimension(400, 50));
        topPanel.add(new JSlider());

        JButton jbtOne = new JButton("Button");
        JButton jbtTwo = new JButton("Button");

        GridBagConstraints gbc = new GridBagConstraints();
        setLayout(new GridBagLayout());

        gbc.gridy = 0;
        add(jbtOne,gbc);  

        gbc.gridy = 1;
        add(jbtTwo,gbc);

        gbc.gridy = 2;
        add(topPanel, gbc);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                JOptionPane.showMessageDialog(null, new DifferentSizeSlider());
            }
        });
    }
}

答案 1 :(得分:1)

要更改swing组件的大小,请使用setPrefferedSize()方法

setPreferredSize(new Dimension(300, 80));

您可能必须使用带有flowLayout的单独面板作为滑块,然后将该面板添加到。某些布局管理器可能不会采用首选大小。