title: Hand-coded GUI - Java
body: <p>I'm trying to hand-code a Java GUI using Swing and AWT. I'm using various layouts to try and achieve or something similar to the GUI posted below (it's a mock layout made with Pencil):</p>
  
  <p><img src="https://i.stack.imgur.com/3jlHt.png" alt="Mock Layout - (Made with Pencil)"></p>
  
  <p>What I got so far is this, but can't seem to make it more "polite", appealing and user-friendly as possible.</p>
  
  <p><img src="https://i.stack.imgur.com/PNC4F.png" alt="Java GUI try"></p>
  
  <p>This is the code I have done so far:</p>
  
  <pre><code>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");
  
                  JPanel mainPanel = new JPanel();
          mainPanel.setLayout(new BorderLayout(0,0));
  
                  JPanel chPanel = new JPanel();
                  chPanel.setLayout(new GridLayout(3,2));
  
                  JPanel listPanel = new JPanel();
                  listPanel.setLayout(new GridLayout(3,2));
  
                  JPanel infoPanel = new JPanel();
          infoPanel.setLayout(new GridLayout(0,2));
  
  
                  JPanel addPanel = new JPanel();
          addPanel.setLayout(new GridLayout(0,3));
  
  
                  mainPanel.add(chPanel, BorderLayout.LINE_START);
                  mainPanel.add(listPanel, BorderLayout.CENTER);
                  mainPanel.add(infoPanel, BorderLayout.LINE_END);
  
  
                  JTable chOneTable = new JTable();
                  JTable chTwoTable = new JTable();
                  JTable listTable = new JTable();
  
                  JLabel ch1Label = new JLabel("Channel 1");
                  JLabel ch2Label = new JLabel("Channel 2");
                  JLabel listLabel = new JLabel("List");
  
                  JButton rmvChOneButton = new JButton("Remove Channel");
                  JButton rmvChTwoButton = new JButton("Remove Channel");
  
                  chPanel.add(ch1Label);
                  chPanel.add(ch2Label);
                  chPanel.add(chOneTable);
                   chPanel.add(chTwoTable);
                  chPanel.add(rmvChOneButton);                                         
                  chPanel.add(rmvChTwoButton);
  
                  listPanel.add(listLabel);
                  listPanel.add(listTable);                
  
  
  
                  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 rentableLabel = new JLabel("Rentable");
                  JLabel synLabel = 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();
  
                  JButton btnAddProg = new JButton("Add Program");
  
                  JList channelList = new JList();
                  JList timeList = new JList();
  
                  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(rentableLabel);
                  infoPanel.add(rentCB);
                  infoPanel.add(synLabel);
                  infoPanel.add(txtSynopsis);
                  infoPanel.add(btnAddProg);
                  infoPanel.add(channelList);
                  infoPanel.add(timeList);
  
  
                  frame.add(mainPanel);
                  frame.setVisible(true);
  
  
      }
  
  
  }
  </code></pre>
  
  <p>It doesn't have to be exactly as the mock layout shown above but as much as possible similar or at least more user-friendly.</p>
  
  <p>I want to use anything but GridBagLayout and SwingLayout.</p>
  
  <p>Any ideas on how to improve the code and make it look more similar?</p>
  
  <p>Any help is appreciated.</p>
  
  <p>Brian</p>