2012-11-22 10 views
37

Dodaję pola wyboru na JPanel w FlowLayout pola wyboru są dodawane poziomo.dodać kontrolki pionowo zamiast poziomo za pomocą układu przepływu

Chcę dodać pola wyboru w pionie na panelu. Jakie jest możliwe rozwiązanie?

+1

FlowLayout robi to, co sugeruje, elementy płynących od lewej do prawej, dopóki nie ma miejsca a następnie przechodzi do następnej linii, z różnymi układami możesz zrobić to, czego potrzebujesz. – AbstractChaos

+0

jaki układ powinienem dla niego użyć – adesh

+2

Sugerowałbym [BoxLayout] (http://docs.oracle.com/javase/tutorial/uiswing/layout/box.html) – AbstractChaos

Odpowiedz

36

Mam nadzieję, że to, co staramy się osiągnąć to w ten sposób. W tym celu użyj layoutu Box.

package com.kcing.kailas.sample.client; 

import javax.swing.BoxLayout; 
import javax.swing.JCheckBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 
import javax.swing.WindowConstants; 

public class Testing extends JFrame { 

private static final long serialVersionUID = 1L; 
private JPanel jContentPane = null; 

/** 
* This is the default constructor 
*/ 
public Testing() { 
    super(); 
    initialize(); 
} 

/** 
* This method initializes this 
* 
* @return void 
*/ 
private void initialize() { 
    this.setSize(300, 200); 
    this.setContentPane(getJContentPane()); 
    this.setTitle("JFrame"); 
} 

/** 
* This method initializes jContentPane 
* 
* @return javax.swing.JPanel 
*/ 
private JPanel getJContentPane() { 
    if (jContentPane == null) { 
     jContentPane = new JPanel(); 
     jContentPane.setLayout(null); 

     JPanel panel = new JPanel(); 

     panel.setBounds(61, 11, 81, 140); 
     panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 
     jContentPane.add(panel); 

     JCheckBox c1 = new JCheckBox("Check1"); 
     panel.add(c1); 
     c1 = new JCheckBox("Check2"); 
     panel.add(c1); 
     c1 = new JCheckBox("Check3"); 
     panel.add(c1); 
     c1 = new JCheckBox("Check4"); 
     panel.add(c1); 


    } 
    return jContentPane; 
} 
public static void main(String[] args) throws Exception { 
    Testing frame = new Testing(); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 
} 
} 
+8

'UIManager.setLookAndFeel (" com.sun.java.swing.plaf.windows.WindowsLookAndFeel ");' Ughh .. który wyglądałby okropnie na OS X & * nix, choć na szczęście nie udałoby się całkowicie w każdym systemie. Zamiast tego zobacz ['UIManager.getSystemLookAndFeelClassName()'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/UIManager.html#getSystemLookAndFeelClassName%28%29). –

+1

Dzięki za komentarz Andrew Thompson. Usuwam to. –

+4

... a podstawowe podejście (użyj BoxLayout) różni się od wcześniejszej odpowiedzi @AbstractChaos w tym ..? Poza tym, że jest gorzej: układ null w treści? ręczne wymiarowanie/pozycjonowanie panelu? nononono, nie rób tego. A co ma osiągnąć updateComponentTreeUI tutaj? – kleopatra

9

Jak napisałem w komentarzu, użyłbym do tego układu skrzynki.

JPanel panel = new JPanel(); 
panel.setLayout(new BoxLayout()); 

JButton button = new JButton("Button1"); 
button.setAlignmentX(Component.CENTER_ALIGNMENT); 
panel.add(button); 

button = new JButton("Button2"); 
button.setAlignmentX(Component.CENTER_ALIGNMENT); 
panel.add(button); 

button = new JButton("Button3"); 
button.setAlignmentX(Component.CENTER_ALIGNMENT); 
panel.add(button); 

add(panel); 
+0

ten nie kompiluje –

34

użyłem BoxLayout i ustawić jej drugi parametr jako BoxLayout.Y_AXIS i pracował dla mnie:

panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 
+6

+1 za dodanie słowa "BoxLayout.Y_AXIS". – ArtOfWarfare

+0

tak, ta praca również dla mnie. –

+0

Jak mogę wyrównać pojedynczy element w prawo i czy wszystkie pozostałe są wyśrodkowane? –

2
JPanel testPanel = new JPanel(); 
testPanel.setLayout(new BoxLayout(testPanel, BoxLayout.Y_AXIS)); 
/*add variables here and add them to testPanel 
     e,g`enter code here` 
     testPanel.add(nameLabel); 
     testPanel.add(textName); 
*/ 
testPanel.setVisible(true); 
+2

Jakieś wyjaśnienie? – Opal

+0

Witamy w Stack Overflow! Proszę rozważyć dodanie linku do BoxLayout do swojej odpowiedzi, aby go poprawić i krótkie wyjaśnienie. – juhist

Powiązane problemy