Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何设置JSlider的大小?_Java_Swing_Jslider - Fatal编程技术网

Java 如何设置JSlider的大小?

Java 如何设置JSlider的大小?,java,swing,jslider,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); 对象沿面板垂直放置 滑块始终以相同的大

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

我在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内创建另一个JPanel,将其布局设置为FlowLayout、BoxLayout或GridLayout,并向其添加滑块。什么也没变。很奇怪


有什么想法吗?

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

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());
            }
        });
    }
}


使用您的代码示例编辑

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());
            }
        });
    }
}


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


您可能需要为滑块使用带有flowLayout的单独面板,然后将该面板添加到。一些版面管理员可能不会选择首选尺寸。

谢谢您的回答。正如我在问题中所写,我尝试了这种方法,但没有改变任何事情。这很奇怪,因为我认为
GridBagLayout
应该尊重首选尺寸。不是吗?我不熟悉GridBagLayout,但我在使用JTable时遇到了类似的问题。我最后不得不嵌套面板,以便setPreferedSize()能够执行。这个链接可能会有所帮助。您可以设置约束,使零部件跨越多列或多行。您可能将滑块限制为一个单元格。谢谢,但正如我在问题中所说,我已经尝试使用gridy和gridheight来解决此问题,但没有成功。另外,setpreferredsize方法也没有帮助。无论如何,谢谢你的帮助谢谢,但由于某种原因,它仍然不起作用。我将我的JSlider放在带有FlowLayout的JPanel中,为JPanel设置一个首选大小,并将其添加到主JPanel中。还是没有改变什么。尝试了几种不同的首选尺寸,仍然没有帮助。尝试了BorderLayout、BoxLayout和GridLayout,仍然没有更改。有什么想法吗?FlowLayout尊重滑块的首选大小。你需要一个不需要的布局。我也试过BorderLayout。这两种布局给我的结果的不同之处在于,flow布局使滑块在边缘显示为“切割”,好像它不适合它的单元格,而border布局将滑块缩小到一个小尺寸(我当前的问题)。我认为我的问题是主JPanel不尊重嵌套JPanel的首选大小。出于某种原因,使用
gbc.gridheight
使嵌套面板穿过两个单元格,不会改变任何“我也尝试过…”如果您无法解决,请尝试发布一个MCTaRE,如peeskillet现在提供的2个示例。为了更快地获得更好的帮助,请发布一个(最小的完整测试和可读示例)。
setPreferredSize(new Dimension(300, 80));