2015-08-20 4 views
0

Я хочу создать палитру со многими JComboBox. как то:positionnig myJTextField у JComboBox

for(int x=0; x<MAX; x++){ 
    box[x] = new JComboBox(new String[]{"op1", "op2", "op3"); 
} 

на праве каждого JComboBox я хочу создать много JTextField. Итак, в моем поддоне я буду думать так:

myJComboBox1   myJTextField 
         anotherJTextField 
         anotherJTextField 



myJComboBox2   myJTextField 
         anotherJTextField 
         anotherJTextField 
... 

Как я могу это сделать? Я пробовал setBounds и другие макеты вроде FlowLayout и GridLayout, но безуспешно.

+0

Используйте GridBagLayout – MadProgrammer

ответ

2

GridBagLayout - лучшее решение. Однако, если вы новичок в Swing, это может быть немного сложнее. В этом случае:

  1. Используйте GridLayout (0, 2) для основной панели.
  2. Оберните поле со списком в панели с макетом границы и добавьте его на север. Добавьте его в основную панель.
  3. Используйте другую панель с GridLayout (0,1), добавьте в нее свои текстовые поля и добавьте ее на основную панель.

и петля ...

Добавление Пример кода:

package snippet; 

import java.awt.BorderLayout; 
import java.awt.Component; 
import java.awt.GridLayout; 

import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 

public class BorderLayoutTest extends JFrame { 

    static private int MAX = 10 ; 

    public BorderLayoutTest() { 
     super(BorderLayoutTest.class.getName()); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     initComponents(); 
    } 

    private void initComponents() { 
     setLayout(new GridLayout(0, 2)); 
     for(int i = 0; i < MAX; i++) { 
      add(createComboPanel()); 
      add(createPanelWithTextFields()); 
     } 
     pack(); 
    } 

    public Component createComboPanel() { 
     JPanel panel = new JPanel(new BorderLayout()); 
     panel.add(new JComboBox<>(new String[] { "First Option", "Second Option", "Third Option" }), BorderLayout.NORTH); 
     return panel; 
    } 

    private Component createPanelWithTextFields() { 
     JPanel panel = new JPanel(new GridLayout(0, 1)); 
     panel.add(new JTextField(30)); 
     panel.add(new JTextField(30)); 
     panel.add(new JTextField(30)); 
     return panel; 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override public void run() { 
       new BorderLayoutTest().setVisible(true); 
      } 
     }); 
    } 

} 
2

Посмотрите на GridBagLayout. Вы можете использовать свое окно как таблицу.

myPanel.setLayout(new GridBagLayout()); 

GridBagConstraints gbc = new GridBagConstraints(); 
gbc.gridx = 0; 
gbc.gridy = 0; 
gbc.weightx = 1; 

JLabel lbl = new JLabel("bla"); 
myPanel.add(lbl, gbc); 

gbc = new GridBagConstraints(); 
gbc.gridx = 1; 
gbc.gridy = 0; 
gbc.weightx = 3; 

JTextField tf = new JTextField(); 
myPanel.add(tf, gbc); 

gbc = new GridBagConstraints(); 
gbc.gridx = 1; 
gbc.gridy = 1; 
gbc.weightx = 3; 

JTextField othertf = new JTextField(); 
myPanel.add(othertf, gbc); 

Вы можете даже установить весы и т. Д. Для GridBagConstraints. Он полностью скорректирован как таблица. Это приведет к чему-то вроде этого:

label  textfield 
      textfield 

Просто перечитайте вопрос. Просто замените JLabels на JComboBoxes, и он отвечает на ваш вопрос немного лучше;)

+0

FYI: ссылка только ответы, как правило, не рекомендуется и ссылки должны быть использованы для поддержки или улучшения вашего ответа. Подумайте о том, чтобы предоставить небольшой пример, чтобы подтолкнуть op в правильном направлении. В противном случае это немного больше, чем комментарий. – MadProgrammer

+0

Некоторое время назад я читал что-то вроде «ответ быстро и улучшил ваш ответ позже», поэтому я пробовал это так:) – schaeferpp

+0

Да и нет;), но это улучшение. Быстрые ответы могут быть упущены ответами, которые могут потребоваться немного дольше, но дать более широкое объяснение проблемы и решения – MadProgrammer

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

  • Нет связанных вопросов^_^