2012-04-03 17 views
5

El ile kodlayarak Java kullanarak GUI oluşturmaya çalışıyorum (GUI araçları kullanmadan).Swing/AWT - GUI'yi programlı olarak oluşturma

Aşağıdaki resim gibi bir şey oluşturmaya çalışıyorum, ancak istediğim gibi çıkmıyor. Düzenleri Ben GUI kurulum veya nasıl oluşturmak için kullanılan olabilir ne

import java.awt.*; 
import javax.swing.*; 
import javax.swing.JTable; 


public class GUI extends JFrame { 

    public void buildGui() { 



     JFrame frame = new JFrame("Hotel TV Scheduler");  

       Container contentPane = frame.getContentPane(); 
       contentPane.setLayout(new FlowLayout()); 

     JPanel mainPanel = new JPanel(); 
     mainPanel.setLayout(new BorderLayout()); 

       JPanel listPanel = new JPanel(); 
       listPanel.setLayout(new FlowLayout()); 

       JTable chOneTable = new JTable(); 
       JTable chTwoTable = new JTable(); 
       JTable listTable = new JTable(); 

       JButton rmvChOneButton = new JButton("Remove Channel"); 
       JButton rmvChTwoButton = new JButton("Remove Channel"); 

       listPanel.add(chOneTable); 
       listPanel.add(chTwoTable); 
       listPanel.add(listTable); 
       listPanel.add(rmvChOneButton); 
       listPanel.add(rmvChTwoButton); 

       JPanel infoPanel = new JPanel(); 
       infoPanel.setLayout(new GridLayout()); 

       JLabel titleLabel = new JLabel("Title"); 
       JLabel genreLabel = new JLabel("Genre"); 
       JLabel durationLabel = new JLabel("Duration"); 
       JLabel actorLabel = new JLabel("Actor"); 
       JLabel directorLabel = new JLabel("Director"); 
       JLabel rentLabel = new JLabel("Rentable"); 
       JLabel synopsisLabel = new JLabel("Synopsis"); 

       JTextField txtTitle = new JTextField(); 
       JTextField txtGenre = new JTextField(); 
       JTextField txtDuration = new JTextField(); 
       JTextField txtActor = new JTextField(); 
       JTextField txtDirector = new JTextField(); 
       JTextField txtSynopsis = new JTextField(); 

       JCheckBox rentCB = new JCheckBox(); 

       infoPanel.add(titleLabel); 
       infoPanel.add(txtTitle); 
       infoPanel.add(genreLabel); 
       infoPanel.add(txtGenre); 
       infoPanel.add(durationLabel); 
       infoPanel.add(txtDuration); 
       infoPanel.add(actorLabel); 
       infoPanel.add(txtActor); 
       infoPanel.add(directorLabel); 
       infoPanel.add(txtDirector); 
       infoPanel.add(rentLabel); 
       infoPanel.add(rentCB); 
       infoPanel.add(synopsisLabel); 
       infoPanel.add(txtSynopsis); 



       contentPane.add(listPanel); 
       contentPane.add(infoPanel); 

       frame.setVisible(true); 


    } 


} 

herhangi bir fikir:

enter image description here

Bu şimdiye kadar kodudur (O Kalem adlı bir mockup uygulama tarafından oluşturulan) kodlayarak bunu başarmak?

+1

GUI aracı kullanmak istememenin nedeni nedir? Hayatı çok daha kolaylaştırıyorlar. – kevingreen

+2

Kevingreen: GUI araçlarını kullanmadan önce Swing'i daha iyi anlamanıza yardımcı olmak için harika bir sebep. Daha sonra, GUI aracını kullanarak bir şeyi çözmede sorun yaşıyorsanız, bunu nasıl düzelteceğinizi anlamanız çok daha kolay olacaktır. Bu çabada asıl posteri şiddetle tavsiye ediyorum. 1+. Ve onun mükemmel cevap için kevingreen için 1+. –

+0

@HovercraftFullOfEels Bunun tersini hissediyorum. Yaptığınız gibi Swing mizanpajının görsel bir temsilini görmenin, Brian'ın işlerin nasıl deneme/derleme/hata döngülerinden daha kolay bir şekilde nasıl etkilediğini görmesine yardımcı olacağını düşünüyorum. Kodu görmek için her zaman başlığın altına bakabilirsiniz (Eclipse/Netbeans yine de). Netbeans, özel kod şeylerine izin verir ve bunları GUI aracında da anında oluşturur. Ama her iki şekilde de çabalarımı teşvik ediyorum. – kevingreen

cevap

3

A Visual Guide to Layout Managers'u denetleyin. Bu düzen seçimi ile size yardımcı olacaktır.

Ayrıca, paneller içinde panelleri kullanmayı düşünün. İhtiyacınız olan görüntüyü elde etmek için gerekli olan yerleşime sahip. Bir GUI oluşturma aracı olmadan, şeylerin nasıl ortaya çıktığını görmek için derlemek/çalıştırmak/derlemek/çalıştırmanız gerekir.

+1

* "paneller içindeki panelleri kullanarak" * Ayrıca bkz. [Iç içe düzenler] kullanma (http://stackoverflow.com/a/5630271/418556). –

İlgili konular