2012-04-03 76 views
5

我正尝试使用Java编写GUI(不使用GUI工具)来创建GUI。Swing/AWT - 以编程方式创建GUI

我试图创建类似下面的图片,但它不会按照我想要的那样出现。

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); 


    } 


} 

什么布局我可以用来创建GUI设置或如何任何想法:

enter image description here

这也是迄今为止的代码(它被称为铅笔样机应用程序创建)通过编码实现它?

+1

不想使用GUI工具的原因是什么?他们让生活变得更容易。 – kevingreen 2012-04-03 18:52:52

+2

@kevingreen:一个重要的原因是在使用GUI工具之前帮助你更好地理解Swing。如果您在使用GUI工具解决问题时遇到困难,那么您将更容易理解如何解决问题。我极力鼓励在这个努力中的原始海报。 1+。并且1+以kevingreen为出色的答案在下面。 – 2012-04-03 19:00:03

+0

@HovercraftFullOfEels我感觉相反。我认为在构建时看到Swing布局的视觉表示将帮助Brian看到事情如何以比尝试/编译/错误周期更容易的方式进行交互。您可以随时查看代码(Eclipse/Netbeans)。 Netbeans将允许您自定义代码并立即在GUI工具中渲染它们。 但无论如何,我也鼓励这种努力。 – kevingreen 2012-04-03 19:03:36

回答

3

检查A Visual Guide to Layout Managers。这将帮助您选择布局。

另外,请考虑在面板内使用面板。每个都需要布局以实现您所需的外观。如果没有GUI构建工具,您将需要编译/运行/编译/运行...以查看事情是如何布局的。

+1

*“在面板内使用面板”*另请参见使用[嵌套布局](http://stackoverflow.com/a/5630271/418556)的此示例。 – 2012-04-04 07:00:57