2016-04-21 5 views
-1

Я пытаюсь создать адресную книгу, и все, что мне сейчас нужно, это таблица для хранения данных, однако я не могу ее отобразить на панели, какие-нибудь идеи почему? У меня есть метод, который должен создавать таблицу при выполнении, но ее нет.Почему мой JTable не отображается?

private String name; 
private String surname; 
private String phone; 
private String address; 
static String summary; 
private JPanel panel; 
private JFrame frame; 
private JLabel lblName; 
private JLabel lblAddress; 
private JLabel lblSurname; 
private JLabel lblPhone; 
private JTextField txtName; 
private JTextField txtSurname; 
private JTextField txtPhone; 
private JTextField txtAddress; 
private JButton btnSave; 
private JButton btnUpload; 
private JButton btnDelete; 
String columns[] = {"Name","Surname","Phone","Address"}; 

String[][] data = 
    {{"human", "bean","07443244","somewhere"}, 
      {"Max", "Kenny","044353534","Somewhere"}}; 



public AddressBook() { 
    createForm(); 
    createLabels(); 
    createTextField(); 
    createButton(); 
    createTable(); 
    frame.add(panel); 
    frame.setVisible(true); 

} 
public void createLabels(){ 
    lblName = new JLabel ("Name"); 
    lblName.setBounds(10, 30, 100, 20); 
    panel.add (lblName); 

    lblSurname = new JLabel ("Surname"); 
    lblSurname.setBounds(10, 50, 100, 20); 
    panel.add (lblSurname); 

    lblAddress = new JLabel ("Address"); 
    lblAddress.setBounds(10, 70, 100, 20); 
    panel.add (lblAddress); 

    lblPhone = new JLabel ("Phone"); 
    lblPhone.setBounds(10, 90, 100, 20); 
    panel.add (lblPhone); 

} 

public void createTextField(){ 

    txtName = new JTextField (null); 
    txtName.setBounds(110, 30, 150, 20); 
    panel.add (txtName); 

    txtSurname = new JTextField (null); 
    txtSurname.setBounds(110, 50, 150, 20); 
    panel.add (txtSurname); 

    txtAddress = new JTextField (null); 
    txtAddress.setBounds(110, 70, 150, 20); 
    panel.add (txtAddress); 

    txtPhone = new JTextField (null); 
    txtPhone.setBounds(110, 90, 150, 20); 
    panel.add (txtPhone); 

} 

public void createForm(){ 
    panel = new JPanel(); 
    panel.setBorder (BorderFactory.createLineBorder (Color.RED, 3)); 
    panel.setLayout(null); 



    frame = new JFrame(); 
    frame.setTitle("Address Book"); 
    frame.setSize(800,400); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 


} 

public void createButton(){ 
    btnSave = new JButton ("Save to a file"); 
    btnSave.setBounds(50, 200, 200, 20); 
    btnSave.addActionListener(new SaveHandler()); 
    panel.add (btnSave); 


    btnDelete = new JButton ("Delete from the table"); 
    btnDelete.setBounds(50, 300, 200, 20); 
    panel.add (btnDelete); 

    btnUpload = new JButton ("Upload file to table"); 
    btnUpload.setBounds(50, 400, 200, 20); 
    panel.add (btnUpload); 


} 

public void createTable(){ 
    JTable table = new JTable(data, columns); 
    DefaultTableModel model = new DefaultTableModel(); 
    model.setColumnIdentifiers(columns); 
    table.setModel(model); 
    table.setBackground(Color.LIGHT_GRAY); 
    table.setForeground(Color.black); 
    table.setPreferredScrollableViewportSize(new Dimension(500, 70)); 
    table.setFillsViewportHeight(true); 
    panel.add(table); 
} 

class SaveHandler implements ActionListener { 

    public void actionPerformed(ActionEvent e) { 
     if(e.getSource()==btnSave) 
     { 
      name = (""); 
      surname = (""); 
      phone = (""); 
      address = (""); 

      name = txtName.getText(); 
      surname = txtSurname.getText(); 
      phone = txtPhone.getText(); 
      address = txtAddress.getText(); 

      summary = ("Name:" +name)+(surname)+("Phone:" + phone)+("Address:" + address); 
      String saveFile = summary; 

      try { 
       BufferedWriter reader = new BufferedWriter(new FileWriter(new File("userinfo.txt"), true)); 
       reader.write(saveFile); 
       reader.newLine(); 
       reader.close(); 
       JOptionPane.showMessageDialog(frame, "The details were sucessfuly saved"); 

      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } 
     } 
    } } 




public static void main(String[] args) { 

    new AddressBook(); 

} 

}

+0

1) См. [Обнаружение/исправление для подвесного закрывающего кронштейна кодового блока] (http://meta.stackexchange.com/q/251795/155831) для проблемы. Я больше не мог беспокоиться о фиксации. 2) Обеспечить ASCII-искусство или простой рисунок * предназначенного макета GUI при минимальном размере и, если он изменен, с большей шириной и высотой. –

ответ

3
panel.setLayout(null); 

Вы выбрали использовать не менеджер компоновки и обрабатывать все макете самостоятельно.

JTable table = new JTable(data, columns); 
table.setModel(model); 
table.setBackground(Color.LIGHT_GRAY); 
table.setForeground(Color.black); 
table.setPreferredScrollableViewportSize(new Dimension(500, 70)); 
table.setFillsViewportHeight(true); 

Однако, вы не указали размер и положение для JTable.

Я рекомендую учиться вместо этого использовать менеджеров компоновки. Он будет работать лучше, он будет обрабатывать пользователя, изменяя размер окна, и сделает код более удобным.

+0

Я буду читать менеджеров макетов, спасибо – breadkun

+0

@breadkun, начните с раздела из учебника Swing в [Менеджеры макетов] (http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html) для информации и рабочих примеров. Вы также захотите ознакомиться с оглавлением в разделе «Как использовать таблицы». – camickr