2014-01-19 4 views
1

Я создал форму с заказом Y.AXIS. Каждая коробка содержит JLabel и JList. Содержимое этих ящиков заказывается X.Axis. (рисунок)Java Swing BoxLayout

  1. Как добавить вертикальную прокладку между коробками, чтобы сделать ее более читаемой.
  2. Как я могу разделить ярлык и список, чтобы иметь ярлык больше слева, а список больше справа
  3. Я также открыт для других идей, делая эту форму более читаемой.

BOXLAYOUT

Вот код, я работаю с. createCustomJList возвращает вас JList

String ean = (String) table.getModel().getValueAt(selection[0], 0); 

JPanel addinfo= new JPanel(); 

String[] operations=new String[{"ROHTABAK","HERSTELLER","WARENGRUPPE","MARKENLOGO"}; 
Box moreInfo[] = new Box[4]; 

for(int i=0;i<operations.length;i++){ 
    moreInfo[i] = Box.createHorizontalBox(); 
    moreInfo[i].add(new JLabel(operations[i])); 
    moreInfo[i].add(createCustomJList(database.customgetter(operations[i],ean))); 
    addinfo.add(moreInfo[i]); 
} 

BoxLayout layout = new BoxLayout(addinfo, BoxLayout.Y_AXIS); 
addinfo.setLayout(layout); 

JOptionPane.showMessageDialog(null, 
    addinfo, "Naehere Infos", 
    JOptionPane.OK_CANCEL_OPTION); 

EDIT: Я попробовал решение с GridLayout, но используется JLists вместо этого.

Есть ли способ иметь что-то вроде черной границы вокруг jlist?

BlackBorderJlist

SOLVEDEDIT: list.setBorder (новый Линейная граница (Color.darkGray, 1));

ENDRESULT:

RESULT

+2

Только для будущие ссылки, эти ответы могут быть полезны: http://stackoverflow.com/questions/17874717/providing-white-space-in-a-swing-gui – kiheru

ответ

1

Myself, я хотел бы использовать GridBagLayout что-то вроде этого. Например, в то время как это не является совершенным renditioning вашей проблемы, и я использую текстовых полей JTextField, где вы используете JLists, Вы получаете идею:

import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import java.util.HashMap; 
import java.util.Map; 

import javax.swing.*; 

@SuppressWarnings("serial") 
public class InputForm extends JPanel { 
    private static final int COLUMNS = 10; 
    private static final int GAP = 3; 
    private static final Insets LABEL_INSETS = new Insets(GAP, GAP, GAP, 15); 
    private static final Insets TEXTFIELD_INSETS = new Insets(GAP, GAP, GAP, GAP); 
    private String[] labelTexts; 
    private Map<String, JTextField> fieldMap = new HashMap<String, JTextField>(); 

    public InputForm(String[] labelTexts) { 
     this.labelTexts = labelTexts; 
     setLayout(new GridBagLayout()); 
     for (int i = 0; i < labelTexts.length; i++) { 
     String text = labelTexts[i]; 
     JTextField field = new JTextField(COLUMNS); 
     fieldMap.put(text, field); 

     addLabel(text, i); 
     addTextField(field, i); 
     } 
    } 

    public String[] getLabelTexts() { 
     return labelTexts; 
    } 

    private void addTextField(JTextField field, int row) { 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridwidth = 1; 
     gbc.gridheight = 1; 
     gbc.gridx = 1; 
     gbc.gridy = row; 
     gbc.anchor = GridBagConstraints.EAST; 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.insets = TEXTFIELD_INSETS; 
     gbc.weightx = 1.0; 
     gbc.weighty = 1.0; 
     add(field, gbc); 
    } 

    private void addLabel(String text, int row) { 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridwidth = 1; 
     gbc.gridheight = 1; 
     gbc.gridx = 0; 
     gbc.gridy = row; 
     gbc.anchor = GridBagConstraints.WEST; 
     gbc.fill = GridBagConstraints.BOTH; 
     gbc.insets = LABEL_INSETS; 
     gbc.weightx = 1.0; 
     gbc.weighty = 1.0; 
     add(new JLabel(text), gbc); 
    } 

    public String getFieldText(String key) { 
     String text = ""; 
     JTextField field = fieldMap.get(key); 
     if (field != null) { 
     text = field.getText(); 
     } 
     return text; 
    } 

    private static void createAndShowGui() { 
     String[] labelTexts = new String[] { "ROHTABAK", "HERSTELLER", 
      "WARENGRUPPE", "MARKENLOGO" }; 
     InputForm inputForm = new InputForm(labelTexts); 

     int result = JOptionPane.showConfirmDialog(null, inputForm, "Naehere Infos", 
      JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); 
     if (result == JOptionPane.OK_OPTION) { 
     for (String text : labelTexts) { 
      System.out.printf("%20s %s%n", text, inputForm.getFieldText(text)); 
     } 
     } 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 

, который при отображении показывает:

enter image description here

+0

хотел бы остановиться в jlist, потому что может быть больше записей и он более общий: -/ –

+0

@StefanSprenger: Я не говорил вам не использовать JList. Я просто использую JTextFields в качестве заполнителей, так как у меня нет данных о вашем списке, и я надеюсь, что вы сможете экстраполировать мой ответ, использовать мои * идеи * и, конечно же, продолжить использование JLists. –

+0

Невозможно более точно указать BoxLayout? –

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