2013-11-10 3 views
0

У меня есть panel, в котором я хочу, чтобы содержимое отображалось вертикально. Чтобы сделать это, я использую эту строку кода:Содержимое панели форматирования в Java

rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.Y_AXIS)); 

Как я использую textfields, то я хотел бы их взять на одну строку вверх. Но, используя указанную выше строку кода, textfields внутри панели получает максимальный размер и при изменении размера окна изменяется размер textfield. Я также попытался удалить его, но затем содержимое внутри панели отображается горизонтально и не будет помещаться внутри панели.

Вот образ результата:

А вот код, в котором будет создаваться содержание панели:

//Creates the form for data and button to save it. 
      final TextField name; 
      final TextField eMail; 
      final TextField dateOfBirth; 
      final TextField address; 
      JLabel nameLabel = new JLabel("Name:"); 
      name = new TextField(); 
      JLabel eMailLabel = new JLabel("E-mail:"); 
      eMail = new TextField(); 
      JLabel dateOfBirthLabel = new JLabel("Date of birth:"); 
      dateOfBirth = new TextField(); 
      JLabel addressLabel = new JLabel("Address:"); 
      address = new TextField(); 
      rightPanel.add(nameLabel); 
      rightPanel.add(name); 
      rightPanel.add(eMailLabel); 
      rightPanel.add(eMail); 
      rightPanel.add(dateOfBirthLabel); 
      rightPanel.add(dateOfBirth); 
      rightPanel.add(addressLabel); 
      rightPanel.add(address); 
      rightPanel.add(Box.createRigidArea(new Dimension(20, 20))); 
      JButton save = new JButton("Save"); 
      rightPanel.add(save); 
+1

И что именно на ваш вопрос? Как бы вы хотели, чтобы он работал? В чем проблема? –

+0

@Simon André Forsberg В принципе, я хочу, чтобы текстовые поля занимали одну строку, а не заполняли всю панель. Вы можете увидеть эту проблему на картинке здесь: http://i.imgur.com/OuMMhN6.png – danrodi

+0

Мы не можем комментировать и делать предложения по вашему коду, не видя этого. И мы не будем реализовывать все для вас. –

ответ

1

Вам необходимо заполнить остальную часть панель с чем-то, используйте swing.Box

import javax.swing.Box; 
rightPanel.add(Box.createVerticalGlue()); 

положить коробку в том месте, где вы хотите, чтобы пространство появляться

Больше на эту тему http://docs.oracle.com/javase/tutorial/uiswing/layout/box.html#filler

Вы также должны ограничить максимальную высоту поля ввода (для каждого входного вызова - создать метод, вероятно):

input.setMaximumSize(new Dimension(Integer.MAX_VALUE, input.getMinimumSize().height)); 
+0

Я бы хотел, чтобы окно появлялось под кнопкой сохранения, хотя добавление строки кода там ничего не меняет. – danrodi

+0

Извините shoudl были verticalGlue - не окно - см. Править – Hurda

+0

Теперь он создает небольшое пространство, но все еще не решает проблему, как мне бы хотелось. – danrodi

0

Вы можете поместить свою панель в NORTH часть BorderLayout - в частях EAST или CENTER BorderLayout панель растягивается вверх, вниз, но не на севере. И, конечно же, вы можете поместить его в свой собственный JPanel с этим BorderLayout, а затем поместите THAT JPanel в другой макет, как хотите.

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.GraphicsConfiguration; 
import java.awt.HeadlessException; 
import java.awt.TextField; 

import javax.swing.Box; 
import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 


public class RightPanel extends JFrame 
{ 
    TextField name; 
    TextField eMail; 
    TextField dateOfBirth; 
    TextField address; 

    JPanel rightPanel = new JPanel(); 

    public static void main(String[] args) 
    { 
     RightPanel rp = new RightPanel(); 
     rp.createUI(); 
     rp.setVisible(true); 
    } 

    public void createUI() 
    { 
     setDefaultCloseOperation(DISPOSE_ON_CLOSE); 

    //Creates the form for data and button to save it. 
    JLabel nameLabel = new JLabel("Name:"); 
    name = new TextField(); 

    JLabel eMailLabel = new JLabel("E-mail:"); 
    eMail = new TextField(); 

    JLabel dateOfBirthLabel = new JLabel("Date of birth:"); 
    dateOfBirth = new TextField(); 

    JLabel addressLabel = new JLabel("Address:"); 
    address = new TextField(); 

    rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.PAGE_AXIS)); 
    rightPanel.add(nameLabel); 
    rightPanel.add(name); 
    rightPanel.add(eMailLabel); 
    rightPanel.add(eMail); 
    rightPanel.add(dateOfBirthLabel); 
    rightPanel.add(dateOfBirth); 
    rightPanel.add(addressLabel); 
    rightPanel.add(address); 
    rightPanel.add(Box.createRigidArea(new Dimension(20, 20))); 
    JButton save = new JButton("Save"); 
    rightPanel.add(save); 

    JPanel doNotStretchPanel = new JPanel(); 
    doNotStretchPanel.setLayout(new BorderLayout()); 
    doNotStretchPanel.add(rightPanel, BorderLayout.NORTH); 

    this.add(doNotStretchPanel, BorderLayout.EAST); 
    pack(); 
    } 

} 
Смежные вопросы