2009-11-23 5 views
1

Salut j'ai créé un Jtable et peut l'obtenir pour montrer sur mon cadre pourtant pas sur le JPanel j'ai sur ontop de mon JFrame. Je ne peux pas sembler changerJTable ne montrera pas sur JPanel

import java.awt.; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.; 
import java.util.ArrayList; 
import java.util.Comparator; 
import javax.swing.; 
import javax.swing.table.;

public class Main { DefaultTableModel table_model; String[][] addressData = new String[10][5]; JPanel panel; JFrame frame; JButton loadData; int count,index,row =0; String thisLine; ArrayList People = new ArrayList();

public Main() { //Creating JFrame and setting properties frame = new JFrame(); frame.setResizable(false); frame.setTitle("Address Book"); frame.setSize(800,600); frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); //Creating JPanel and setting properties panel = new JPanel(); panel.setLayout(null); panel.setBackground(new Color(77,81,84)); //Setting the table and Scroll Bars this.table_model = new DefaultTableModel(addressData, new String[]{"First Name", "Surname", "Home Number", "Mobile Number", "Address", "Postcode"}); JTable table = new JTable(this.table_model); table.setBounds(130, 40, 200, 200); panel.add(new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS)); //Load Data button, reading file in and adding data to ArrayList then Array of Arrays loadData = new JButton("Load File"); loadData.setBounds(10, 10, 100, 20); loadData.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { BufferedReader reader = new BufferedReader(new FileReader("file/address.buab")); while ((thisLine = reader.readLine()) !=null) { if (row >= 4) { index++; row = 0; People.add(thisLine); addressData[index][row] = People.get(count); count++; row++; } else { People.add(thisLine); addressData[index][row] = People.get(count); count++; row++; } } reader.close(); } catch (IOException ex) { System.err.println("Input Exception, Check address.buab File"); } } }); panel.add(loadData); //Auto sort on table fields TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(this.table_model); sorter.setComparator(1, new Comparator<Integer>() { public int compare(Integer o1, Integer o2) { return o1.compareTo(o2); } public boolean equals(Object obj) { return obj.equals(this); } }); table.setRowSorter(sorter); frame.getContentPane().add(panel); frame.setVisible(true); } public static void main(String[] args) { new Main(); }

}

Toutes les idées sur la façon dont je pourrais aller sur le réglage de la table visible ontop de mes JPanel

Répondre

3

Une conjecture sauvage:

panel.setLayout(null); 

Essayez à la place:

panel.setLayout(new BorderLayout()); 

Et plus tard:

panel.add(loadData, BorderLayout.SOUTH) // e.g. for the button 

// e.g. for the table 
panel.add(new JScrollPane(table, .....)), BorderLayout.CENTER) 
5

Vous devez créer votre JPanel avec un gestionnaire de mise en page spécifique, puis ajouter des composants (la JTable et JButton) avec des contraintes appropriées pour les faire apparaître dans la zone correcte du panneau. Actuellement, vous définissez le gestionnaire de disposition du panneau sur null, ce qui est presque certainement incorrect. Vous pouvez consulter le tutoriel Using Layout Managers.

Un gestionnaire de disposition simple à prendre en compte est BorderLayout. Par exemple:

// Create JPanel with BorderLayout layout manager. 
JPanel panel = new JPanel(new BorderLayout()); 

// Add JTable to panel center. This component will expand 
// to take up available space. 
panel.add(myTableScrollPane, BorderLayout.CENTER); 

// Add button to the bottom of the panel. 
panel.add(myButton, BorderLayout.SOUTH); 
Questions connexes