2016-04-12 33 views
1

Şu anda yalnızca sunum katmanına sahip küçük bir GUI uygulaması yaptım. Temel GUI'yi kurar (ama henüz eklenmemiş bir mantık). Metin alanları ve Düğmeler gibi denetimleri/bileşenleri belirleme konusunda sorun yaşıyorum.Bu bileşenler JPanel'de nasıl ayarlanır?

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class Client extends JFrame{ 

    private JPanel panel; 
    private JTextField inputTextBox; 
    private JTextField outputTextBox; 
    private JButton convertButton; 

    public Client(){ 
     panel = new JPanel(); 
     inputTextBox = new JTextField(6); 
     outputTextBox = new JTextField(6); 
     convertButton = new JButton("Convert!"); 
     ConstructGUI(); 
    } 

    private void ConstructGUI(){ 
     this.setTitle("Temerature Converter"); 
     this.setSize(300, 400); 
     PanelLayout(); 
     this.setVisible(true); 
     this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    private void PanelLayout(){ 
     this.add(panel); 
     panel.add(inputTextBox); 
     panel.add(outputTextBox); 
     panel.add(convertButton); 
    } 

} 

bileşenler hepsi birbiri yanında görünür Client.java

Main.java

public class Main { 

    public static void main(String[] args) { 
    // Make a new Client (TempConverter application) 
    Client client = new Client(); 
    } 

} 

ve o ben değil: İşte

kod Aksi halde bekleniyordu, ama hangi düzeni denediğim önemli değil (yanlış yapmazsam), değişmez.

Belki bir şeyi geçersiz kılmam gerekiyor mu?

+0

istediğiniz tasarım nedir arasında daha iyi yeniden kullanılabilirlik, sağlayacak? – rdonuk

+0

Onları birbirinin üstüne yığmak için :) Cevabınız için teşekkürler! – katie1245

cevap

1

BoxLayout numaralarını birbirlerinin üzerine yığmak için kullanabilirsiniz.

private void PanelLayout(){ 
    this.add(panel); 

    //next three lines aligning the components horizontally 
    inputTextBox.setAlignmentX(Component.CENTER_ALIGNMENT); 
    outputTextBox.setAlignmentX(Component.CENTER_ALIGNMENT); 
    convertButton.setAlignmentX(Component.CENTER_ALIGNMENT); 
    //aligning horizontally end. If you don't want the align them horizontally just remove these three lines. 

    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 
    panel.add(Box.createVerticalGlue());//remove this line if you don't want to center them vertically 
    panel.add(inputTextBox); 
    panel.add(outputTextBox); 
    panel.add(convertButton); 
    panel.add(Box.createVerticalGlue());//remove this line if you don't want to center them vertically 
} 
1

daha fazla detay için Laying Out Components Within a Container göz at bir GridBagLayout veya GridLayout

public class Client extends JFrame { 

    private JPanel panel; 
    private JTextField inputTextBox; 
    private JTextField outputTextBox; 
    private JButton convertButton; 

    public Client() { 
     panel = new JPanel(new GridBagLayout()); 
     inputTextBox = new JTextField(6); 
     outputTextBox = new JTextField(6); 
     convertButton = new JButton("Convert!"); 
     ConstructGUI(); 
    } 

    private void ConstructGUI() { 
     this.setTitle("Temerature Converter"); 
     PanelLayout(); 
    } 

    private void PanelLayout() { 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridwidth = GridBagConstraints.REMAINDER; 
     this.add(panel); 
     panel.add(inputTextBox, gbc); 
     panel.add(outputTextBox, gbc); 
     panel.add(convertButton, gbc); 
    } 

} 

GridBagLayout ... ulaşmak istediğiniz şeye bağlı olarak kullanabilirsiniz.

Ben de JFrame doğrudan uzanan sizi vazgeçirmek, ancak bunun yerine, yerine JPanel uzanan başlamak istiyorum, bu kodunuzu ayrıştırarak diğer şeyler

İlgili konular