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