ОБНОВЛЕНИЕ: Я получил обоснованную критику за публикацию неработающего кода. Я принял это близко к сердцу и обновляю этот пост полным рабочим примером. Я также обновляю описание соответственно:JPanel занимает больше места, чем нужно. Как я могу сжать его?
У меня очень простой графический интерфейс java swing, компоненты которого занимают то, что выглядит равным количеством вертикального (Y) пространства, которое используется наибольшим компонентом Y степени, но полностью без необходимости. Я попытался сжать те компоненты, которые не нуждаются в таком большом вертикальном пространстве, с использованием предпочтительных советов, но безрезультатно.
Основная схема проста: есть главное окно и три вертикальные панели. Макет - это простой GridLayout (и я бы предпочел сохранить его таким образом, если кто-то не покажет мне, что мне нужно, не может быть сделано с помощью GridLayout). Кажется, что все три панели занимают одинаковое количество вертикального пространства, хотя в случае ползунков это огромная трата пространства. Как я могу заставить каждый из суб-панелей использовать столько пространства, сколько им нужно? т. е. я хотел бы, чтобы два окна слайдера были только высотой, как ползунки, и их описание должно быть.
Код:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class test {
public static void main(String[] arg) {
JFrame mainWindow = new JFrame();
JSlider slider1 = new JSlider(0,100,50);
JSlider slider2 = new JSlider(0,100,50);
JPanel pnlSlider1 = new JPanel();
pnlSlider1.setLayout(new GridLayout(1,1)); // 1 row, 1 column
pnlSlider1.add(new JLabel("Description for slider1"));
pnlSlider1.add(slider1);
JPanel pnlSlider2 = new JPanel();
pnlSlider2.setLayout(new GridLayout(1,1)); // 1 row, 1 column
pnlSlider2.add(new JLabel("Description for slider2"));
pnlSlider2.add(slider2);
// label should now be to the left of slider
String content = "<html>Some rather long winded HTML content</html>";
JEditorPane ep = new JEditorPane("text/html", content);
// this is the main window panel
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(3,1)); // 3 rows, 1 column
panel.add(ep);
panel.add(pnlSlider1);
panel.add(pnlSlider2);
// tie it all together and display the window
mainWindow.setPreferredSize(new Dimension(300, 600));
mainWindow.setLocation(100, 100);
mainWindow.getContentPane().add(panel);
mainWindow.pack();
mainWindow.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
mainWindow.setVisible(true);
}
}
(удален разглагольствовать о не видевший никакого графического интерфейса кодирования достижений в 30 лет, поскольку это не имеет отношения к проблеме и, вероятно, не будет решена в этом посте либо)
1) Чтобы лучше помочь, отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверенный пример) или [SSCCE] (http://www.sscce.org/) (Короткий, самосохраненный, правильный пример). 2) Предоставить ASCII-искусство или простой рисунок макета GUI с минимальным размером и, если он изменен, с большей шириной и высотой. –
* «Как кто-то, кто получил визуальное программирование, начал с Visual Basic 1.0 в 1993 году, я с трудом понимаю, что эти проблемы могут сохраниться до 2015 года. Это наравне с чистой питьевой водой для всех на планете. нет оправдания тому, что он не существует повсеместно ». * Хм ..« существующий повсеместно »- это интересный способ выразить« использование макетов по мере их разработки ». Обратите внимание, что в 1993 году VB не нужно было создавать графические интерфейсы, разные платформы и PLAF (сменный внешний вид), это на порядок сложнее! –