2012-04-03 45 views
5

Tôi đang cố gắng tạo GUI bằng cách sử dụng Java bằng mã hóa tay (không sử dụng công cụ GUI).Swing/AWT - Tạo GUI theo chương trình

Tôi đang cố tạo một thứ gì đó giống như hình bên dưới, nhưng nó không xuất hiện như tôi muốn. (Nó được tạo ra bởi một ứng dụng mockup gọi Pencil)

enter image description here

Đây là mã cho đến nay:

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


    } 


} 

Bất kỳ ý tưởng về những gì Layouts tôi có thể sử dụng để tạo ra các thiết lập GUI hoặc làm thế nào để đạt được nó bằng cách mã hóa nó?

+1

Lý do không muốn sử dụng công cụ GUI là gì? Họ làm cho cuộc sống dễ dàng hơn nhiều. – kevingreen

+2

@kevingreen: Một lý do tuyệt vời là giúp một người hiểu rõ hơn về Swing trước khi sử dụng các công cụ GUI. Sau đó, nếu bạn gặp khó khăn khi giải quyết một cái gì đó bằng cách sử dụng công cụ GUI, bạn sẽ có một thời gian dễ dàng hơn nhiều để hiểu làm thế nào để sửa chữa nó. Tôi mạnh mẽ khuyến khích áp phích ban đầu trong nỗ lực này. 1+. Và 1+ để kevingreen cho câu trả lời tuyệt vời của mình dưới đây. –

+0

@HovercraftFullOfEels Tôi cảm thấy ngược lại. Tôi nghĩ rằng nhìn thấy một đại diện trực quan của bố trí Swing khi bạn xây dựng sẽ giúp Brian xem cách mọi thứ tương tác trong một thời trang dễ dàng hơn thử/biên dịch/lỗi chu kỳ. Bạn luôn luôn có thể nhìn dưới mui xe để xem mã (Eclipse/Netbeans anyway). Netbeans sẽ cho phép bạn tùy chỉnh mã và nhanh chóng hiển thị chúng trong công cụ GUI. Nhưng dù bằng cách nào, tôi cũng khuyến khích nỗ lực này. – kevingreen

Trả lời

3

Kiểm tra A Visual Guide to Layout Managers. Điều đó sẽ giúp bạn lựa chọn bố cục.

Ngoài ra, hãy nghĩ đến việc sử dụng bảng trong bảng điều khiển. Mỗi với bố trí cần thiết để đạt được cái nhìn bạn cần. Nếu không có một công cụ xây dựng GUI, bạn sẽ cần phải biên dịch/chạy/biên dịch/chạy ... để xem mọi thứ đang diễn ra như thế nào.

+1

* "sử dụng bảng trong bảng điều khiển" * Xem thêm ví dụ này về cách sử dụng [bố trí lồng nhau] (http://stackoverflow.com/a/5630271/418556). –

Các vấn đề liên quan