Java 如何设置JSlider的大小?
我在网上搜索了这个问题的解决方案,但没有找到任何有效的方法 我在JPanel中有一个垂直JSlider,它使用GridBagLayout和GridBagConstraints在面板上定位对象 目前我有以下代码: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); 对象沿面板垂直放置 滑块始终以相同的大
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));