Я пытаюсь создать графический интерфейс с JXTaskPane
, в котором панель HTML-редактора показывает длинный текст, а затем ниже двух ползунков. Необходимо иметь полную ширину окна, разделенную на 50/50 между меткой и ползунком, следующий слайдер должен иметь 1/3 ширины для метки и 2/3 для ползунка.Нужен репетитор GridBagLayout для манекенов, пожалуйста ... с рабочим примером
Для того, чтобы этот пример работал, вам необходимо SwingX, download the jar here.
Есть несколько проблем, с кодом:
- На первом запуске, элементы не нарисованы правильно. Окно должно быть изменено, или панель задач закрыта и снова открыта. Может ли кто-нибудь порекомендовать способ исправить это?
- Несмотря на то, что параметр заполнения
GridBagConstraint
установлен на использование полной ширины горизонтали, компоненты используют примерно половину ширины окна и нарисованы в центре. Как я могу заставить их использовать всю ширину и высотуJXTaskPane
? - Хотя
slider2
имеет своюgridwidth
собственность 2, Почему это так? Я пробовал играть с параметромweightx
, но это просто изменяет внешний вид в случайном порядке до чуть более широкой или немного более узкой, но в том, что кажется случайным и довольно непредсказуемым. Как сделать эту метку 1/3 шириной ползунка?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import org.jdesktop.swingx.JXTaskPane;
class test {
public static void main(String[] arg) {
JFrame mainWindow = new JFrame();
JXTaskPane taskPane = new JXTaskPane();
JSlider slider1 = new JSlider(0,100,50);
JSlider slider2 = new JSlider(0,100,50);
taskPane.setCollapsed(false);
// slider 1 with its label in a simple GridLayout
JPanel pnlSlider1 = new JPanel();
pnlSlider1.setLayout(new GridLayout(1,1)); // 1 row, 1 column
pnlSlider1.add(new JLabel("Description for slider1"));
pnlSlider1.add(slider1);
// slider 2 with its label is in a GridBagLayout, the label should be 1/3 of the width of the slider
JPanel pnlSlider2 = new JPanel();
pnlSlider2.setLayout(new GridBagLayout());
GridBagConstraints c2 = new GridBagConstraints();
c2.fill = GridBagConstraints.HORIZONTAL;
c2.gridx = 0;
c2.gridy = 0;
c2.gridwidth = 1;
c2.weighty = 1;
c2.weightx = 1;
pnlSlider2.add(new JLabel("Description for slider2"), c2);
c2.gridx = 1;
c2.gridwidth = 2;
c2.weightx = 1;
pnlSlider2.add(slider2, c2);
// label should now be to the left of slider
String content = "<html>Some rather long winded HTML content Some rather long winded HTML content Some rather long winded HTML content Some rather long winded HTML content ";
content += "Some rather long winded HTML content Some rather long winded HTML content Some rather long winded HTML content Some rather long winded HTML content Some rather long winded HTML content";
content += "Some rather long winded HTML content Some rather long winded HTML content Some rather long winded HTML content </html>";
JEditorPane ep = new JEditorPane("text/html", content);
// this is the main window panel
//JPanel panel = new JPanel();
taskPane.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 0;
taskPane.add(ep, c);
c.gridy = 1;
taskPane.add(pnlSlider1, c);
c.gridy = 2;
c.insets = new Insets(10,0,0,0);
taskPane.add(pnlSlider2, c);
// tie it all together and display the window
mainWindow.setPreferredSize(new Dimension(600, 600));
mainWindow.setLocation(100, 100);
mainWindow.getContentPane().add(taskPane);
mainWindow.pack();
mainWindow.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
mainWindow.setVisible(true);
}
}
вы можете опубликовать пример вывода с помощью экрана или изображение – Madhan
Это то, что выглядит в начальной загрузке окна: http://www.inside.net/files/panel1.png, и вот что выглядит после изменения размера: http://www.inside.net /files/panel2.png. Обратите внимание на огромное количество пространства вокруг элементов управления и неправильное расстояние ползунка/метки2. – Balthasar
* «Для запуска этого примера вам понадобится SwingX» *. Лучше всего заменить сторонние API, например, кодом с помощью одного компонента из Swing, и, как правило, это возможно для проблем с раскладкой. –