Имеется задача: на форме должны быть два JList'а, завёрнутых в JScrollPane'ы. Над каждым из них есть JLabel'ы, подписывающие их. Между ними есть ещё что-то.
Проблема: если текст в лэйблах разной длины, то при уменьшении окна скроллпейны будут становиться разной ширины, соответственно ширине лэйблов.
Вопрос: как сделать, чтобы GridBagLayout при масштабировании не смотрел на ширину лейблов, или иначе, чтобы скроллпейны всегда были одинаковой ширины?
Код:
import java.awt.*;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import javax.swing.*;
public class SwingTest11
{
/**
* @param args
*/
public static void createAndShowGUI()
{
JFrame f = new JFrame();
f.getContentPane().setLayout(new GridBagLayout());
f.setSize(new Dimension(640,480));
GridBagConstraints c = new GridBagConstraints();
JList jl1 = new JList(new DefaultListModel()),
jl2 = new JList(new DefaultListModel());
((DefaultListModel)jl1.getModel()).add(0, "fgsfds");
((DefaultListModel)jl2.getModel()).add(0, "fgsfdsfgsfdsfgsfds");
final JScrollPane jsp1 = new JScrollPane(),
jsp2 = new JScrollPane();
jsp1.setViewportView(jl1);
jsp2.setViewportView(jl2);
jsp1.setMaximumSize(new Dimension(100,100));
jsp2.setMaximumSize(new Dimension(100,100));
jsp1.setPreferredSize(new Dimension(344, 425));
jsp2.setPreferredSize(new Dimension(344, 425));
JButton b = new JButton("Button!");
JLabel jlab1 = new JLabel("loooooooooong label is long"),
jlab2 = new JLabel("short");
jlab1.setLabelFor(jsp1);
jlab2.setLabelFor(jsp2);
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.weightx = 0;
// c.weighty = 1;
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.WEST;
f.getContentPane().add(jlab1,c);
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 1;
c.weightx = 0.5;
c.weighty = 1;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.WEST;
f.getContentPane().add(jsp1,c);
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 1;
c.weightx =0;
f.getContentPane().add(b,c);
c = new GridBagConstraints();
c.gridx = 2;
c.gridy = 0;
c.weightx = 0;
// c.weighty = 1;
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.WEST;
f.getContentPane().add(jlab2,c);
c = new GridBagConstraints();
c.gridx = 2;
c.gridy = 1;
c.weightx = 0.5;
c.weighty = 1;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.WEST;
f.getContentPane().add(jsp2,c);
f.pack();
f.show();
f.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e)
{
System.out.println("left: "+jsp1.getWidth()+"\nrigth: "+jsp2.getWidth());
}
});
}
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run()
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InstantiationException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalAccessException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (UnsupportedLookAndFeelException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
createAndShowGUI();
}});
}
}
Вывод на консоль:
До:
left: 468
rigth: 468
left: 488
rigth: 488
После:
left: 291
rigth: 183
Ответ на:
комментарий
от naryl
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Дошлифовать Swing GUI desktop application (2016)
- Форум Java GUI (2012)
- Форум неработает обновление данных в таблице [java] (2012)
- Форум WebSocketServer и Timer Java (2018)
- Форум javafx (java 7 se) роняет X server! (2013)
- Форум Java, awt/swing, проблемы с фокусом. (2008)
- Форум Изменение размера пера после применения аффинного преобразования координат (2007)
- Форум android udp error (2014)
- Форум Крешится да и всё тут (2012)
- Форум Парсер на Java не парсит все что требуется (2017)