Я пытаюсь иметь многострочные метки и метки изображений в вертикальном BoxLayout.Для многострочных меток я использую JTextArea с setEditable (false).Для меток изображений я использую JLabel ([ImageIcon]).
Следующий код показывает, что текстовая область имеет много места под ней, и я этого не хочу.Для простоты я добавил текстовые метки вместо меток изображений.
Мне нужно сложить текстовую область и метки сверху вниз.После каждой текстовой области метка должна следовать непосредственно ниже, а после последней метки должно быть пустое пространство до нижней части окна.
Возможно, лучше использовать другой менеджер макетов, но я думаю, что это проблема JTextArea.Любое решение поможет.
Спасибо.
вот скомпилированный код:
import java.awt.Color;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
public class BoxLay extends JFrame
{
private static final long serialVersionUID = 1L;
public static void main(final String[] args)
{
new BoxLay();
}
private BoxLay()
{
setTitle("BoxLayout TestDummy");
setSize(800, 450);
setResizable(true);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.getContentPane().setLayout(new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS));
final JTextArea area1 = new JTextArea();
area1.setText("First Text - Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... ");
area1.setLineWrap(true);
area1.setWrapStyleWord(true);
area1.setEditable(false);
area1.setBackground(Color.RED);
this.add(area1);
final JLabel label1 = new JLabel("DIRECTLY BELOW FIRST TEXT");
this.add(label1);
final JTextArea area2 = new JTextArea();
area2.setText("Second Text - Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... Dynamic text of any length... ");
area2.setLineWrap(true);
area2.setWrapStyleWord(true);
area2.setEditable(false);
area2.setBackground(Color.RED);
this.add(area2);
final JLabel label2 = new JLabel("DIRECTLY BELOW SECOND TEXT");
this.add(label2);
this.add(Box.createVerticalGlue());
this.getContentPane().invalidate();
this.getContentPane().validate();
}
}