【问题标题】:JSlider not drawing on null layout JPanelJSlider 未在空布局 JPanel 上绘图
【发布时间】:2012-03-15 19:26:28
【问题描述】:

我有一个布局为空的 JPanel,我正在尝试添加一个 JSlider:

        slider = new JSlider();


        slider.setSize(300,30);
        slider.setPreferredSize(new Dimension(300,30));
        int x = (Constants.getScreenWidth()/2)-(slider.getWidth()/2);
        int y = (Constants.getScreenHeight()/2)-(slider.getHeight()/2);
        y = y - 100;
        slider.setLocation(x,y);
        slider.setBounds(x-(slider.getWidth()/2),y-(slider.getHeight()/2),300,30);


        add(slider);

但是滑块没有显示出来。我已经打印了滑块,它是:

javax.swing.JSlider[,420,320,300x30,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=288,maximumSize=,minimumSize=,preferredSize=java.awt.Dimension[width=300,height=30],isInverted=false,majorTickSpacing=0,minorTickSpacing=0,orientation=HORIZONTAL,paintLabels=false,paintTicks=false,paintTrack=true,snapToTicks=false,snapToValue=true]

为什么我看不到滑块?

【问题讨论】:

  • 永远不要手动调整大小/定位 - 这是 layoutManager 的工作 ;-)

标签: java swing jpanel jslider null-layout-manager


【解决方案1】:
  • 删除你为setLayout(null);设置的slider.setLayout(null);它的父级JPanel.setLayout(null);

  • 免责声明永远不要使用AbsoluteLayoutJComponent 放置到Container

我可以在没有代码行的情况下显示 JSlider

int x = (Constants.getScreenWidth()/2)-(slider.getWidth()/2);
int y = (Constants.getScreenHeight()/2)-(slider.getHeight()/2);
y = y - 100;
slider.setLocation(x,y);
slider.setBounds(x-(slider.getWidth()/2),y-(slider.getHeight()/2),300,30);
  • 使用InsetsJComponent 放置到Container

这段代码在屏幕上显示了 JSlider

import javax.swing.*;
import java.awt.*;

public class NullLayoutManagerWithJSlider extends JFrame {

    private JFrame frame = new JFrame();
    private static final long serialVersionUID = 1L;

    public NullLayoutManagerWithJSlider() {
        JSlider slider = new JSlider();
        slider.setPreferredSize(new Dimension(300, 30));        
        frame.setLayout(null);
        frame.add(slider);

        Insets mmInsets = frame.getInsets();
        Dimension sizeMmInn = null;
        slider.setPreferredSize(new Dimension(300, 30));
        sizeMmInn = slider.getPreferredSize();
        slider.setBounds(20 + mmInsets.left, 16 + mmInsets.top, sizeMmInn.width, sizeMmInn.height);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(100, 100);
        frame.setSize(new Dimension(600, 400));
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                NullLayoutManagerWithJSlider cf = new NullLayoutManagerWithJSlider();
            }
        });
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    相关资源
    最近更新 更多