Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.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 控制压杆高度_Java_Macos_Swing_Jprogressbar - Fatal编程技术网

Java 控制压杆高度

Java 控制压杆高度,java,macos,swing,jprogressbar,Java,Macos,Swing,Jprogressbar,我正在创建一个利用JProgressBar控件的JavaSwing应用程序。这个控件在Linux和Windows上看起来不错,但在Mac上太大了,我不喜欢。我想改变它的高度 我正在通过框构建整个布局,即createHorizontalBox等。我知道,无论我在框中放置什么,都应该占用整个空间 这是我的代码(很难看): 我正在努力找到正确的方法来布局所有组件,例如JProgressBar高度都可以控制 你能帮忙吗 更新:下面是一个演示问题的小程序 package test; import jav

我正在创建一个利用JProgressBar控件的JavaSwing应用程序。这个控件在Linux和Windows上看起来不错,但在Mac上太大了,我不喜欢。我想改变它的高度

我正在通过框构建整个布局,即createHorizontalBox等。我知道,无论我在框中放置什么,都应该占用整个空间

这是我的代码(很难看):

我正在努力找到正确的方法来布局所有组件,例如JProgressBar高度都可以控制

你能帮忙吗

更新:下面是一个演示问题的小程序

package test;

import java.awt.Dimension;
import java.awt.Font;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.UIManager;

public class Test {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();

        frame.setSize(500, 500);

        panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
        panel.setOpaque(false);
        panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

        JLabel nameLabel = new JLabel("...");
        JProgressBar statusProgressbar = new JProgressBar();
        JLabel statusLabel = new JLabel("...");

        Box container = Box.createVerticalBox();
        Box box = Box.createHorizontalBox();

        box.setOpaque(false);
        box.add(nameLabel);
        box.add(Box.createHorizontalGlue());

        container.add(box);

        statusProgressbar.setPreferredSize(new Dimension(0, 5)); // NOT WORKING

        box = Box.createHorizontalBox();

        box.setOpaque(false);
        box.add(statusProgressbar);

        container.add(box);

        nameLabel.setFont(new Font(UIManager.getFont("TabbedPane.font").getFamily(), 0, 9));
        statusLabel.setFont(new Font(UIManager.getFont("TabbedPane.font").getFamily(), 0, 9));

        box = Box.createHorizontalBox();

        box.setOpaque(false);
        box.add(statusLabel);
        box.add(Box.createHorizontalGlue());

        container.add(box);

        panel.add(container);

        frame.add(panel);
        frame.setVisible(true);
    }

}

布局通常遵循组件的首选尺寸。

布局通常遵循组件的首选尺寸

  • 如果空间可用,长方体布局将尝试将零部件拉伸到其最大尺寸。因此,请确保“首选高度”和“最大高度”的值相同,以免拉伸

  • 进度条的大小可由LAF确定。金属LAF使用“ProgressBar.horizontalSize”。查看,您可能可以为Mac定制它

  • 如果空间可用,长方体布局将尝试将零部件拉伸到其最大尺寸。因此,请确保“首选高度”和“最大高度”的值相同,以免拉伸

  • 进度条的大小可由LAF确定。金属LAF使用“ProgressBar.horizontalSize”。查看,您可能可以为Mac定制它


  • 为了更快地获得更好的帮助,请发布一条。为了更快地获得更好的帮助,请发布一条。@Pass:我们无法知道什么对您有效,什么对您无效,因为我们无法编译和运行您发布的代码。如上所述,考虑创建和发布一个小的可编译和可运行的例子,一个“PASS”:我们无法知道什么是有用的或什么是不适合您的,因为我们不能编译和运行您的发布代码。如上所述,考虑创建并发布一个小的可编译和可运行的示例,一个.StasUpRealsStBar。this.statusProgressbar.setMaximumSize(statusProgressbarDimension);//当我在测试程序中对其进行单独测试时,我做到了这一点。但是,当我尝试更新进度条时,GUI有点出错。@通过,正确的解决方案是重写getMaximumSize()方法,返回正确的值,即最大宽度和首选高度。this.statusProgressbar.setPreferredSize(statusProgressbarDimension);this.statusProgressbar.setMaximumSize(statusProgressbarDimension);//当我在测试程序中对其进行单独测试时,我做到了这一点。但是,当我试图更新进度条时,GUI有点出错。@通过,正确的解决方案是重写getMaximumSize()方法,返回正确的值,即最大宽度和首选高度。
    package test;
    
    import java.awt.Dimension;
    import java.awt.Font;
    
    import javax.swing.BorderFactory;
    import javax.swing.Box;
    import javax.swing.BoxLayout;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JProgressBar;
    import javax.swing.UIManager;
    
    public class Test {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame();
            JPanel panel = new JPanel();
    
            frame.setSize(500, 500);
    
            panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
            panel.setOpaque(false);
            panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
    
            JLabel nameLabel = new JLabel("...");
            JProgressBar statusProgressbar = new JProgressBar();
            JLabel statusLabel = new JLabel("...");
    
            Box container = Box.createVerticalBox();
            Box box = Box.createHorizontalBox();
    
            box.setOpaque(false);
            box.add(nameLabel);
            box.add(Box.createHorizontalGlue());
    
            container.add(box);
    
            statusProgressbar.setPreferredSize(new Dimension(0, 5)); // NOT WORKING
    
            box = Box.createHorizontalBox();
    
            box.setOpaque(false);
            box.add(statusProgressbar);
    
            container.add(box);
    
            nameLabel.setFont(new Font(UIManager.getFont("TabbedPane.font").getFamily(), 0, 9));
            statusLabel.setFont(new Font(UIManager.getFont("TabbedPane.font").getFamily(), 0, 9));
    
            box = Box.createHorizontalBox();
    
            box.setOpaque(false);
            box.add(statusLabel);
            box.add(Box.createHorizontalGlue());
    
            container.add(box);
    
            panel.add(container);
    
            frame.add(panel);
            frame.setVisible(true);
        }
    
    }