Я создаю Java-приложение Swing, которое использует элемент управления JProgressBar. Элемент управления выглядит хорошо в Linux и Windows, но он слишком велик для моих предпочтений в Mac. Я хотел бы изменить его высоту.
Я строю весь макет с помощью ящиков, т.е. создаю горизонтальный ящик и т. Д. Я понимаю, что все, что я положил в коробку, должно занимать все пространство.
Вот мой код (это некрасиво):
this.iconLabel = new JLabel();
this.nameLabel = new JLabel();
this.statusProgressbar = new JProgressBar();
this.pausePush = new PushButton();
this.resumePush = new PushButton();
this.actionPush = new PushButton();
this.statusLabel = new JLabel("...");
this.clientTask = null;
this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
this.setOpaque(false);
this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
this.add(this.iconLabel);
Box container = Box.createVerticalBox();
Box box = Box.createHorizontalBox();
box.setOpaque(false);
box.add(this.nameLabel);
box.add(Box.createHorizontalGlue());
container.add(box);
this.pausePush.setVisible(false);
this.resumePush.setVisible(false);
this.actionPush.setVisible(false);
box = Box.createHorizontalBox();
box.setOpaque(false);
box.add(this.statusProgressbar);
box.add(this.pausePush);
box.add(this.resumePush);
box.add(this.actionPush);
container.add(box);
this.nameLabel.setFont(new Font(UIManager.getFont("TabbedPane.font").getFamily(), 0, 12));
this.statusLabel.setFont(new Font(UIManager.getFont("TabbedPane.font").getFamily(), 0, 9));
box = Box.createHorizontalBox();
box.setOpaque(false);
box.add(this.statusLabel);
box.add(Box.createHorizontalGlue());
container.add(box);
this.add(container);
Я изо всех сил пытаюсь найти правильный способ расположения всех компонентов, таких как высота 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);
}
}