首页 文章

JTable不会在JPanel上显示

提问于
浏览
1

嗨,我已经创建了一个Jtable,可以让它显示在我的框架上而不是在我的JFrame上的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();
}

}

关于我如何设置表格可以在我的JPanel上显示的任何想法

2 回答

  • 5

    一个疯狂的猜测:

    panel.setLayout(null);
    

    试试这个:

    panel.setLayout(new BorderLayout());
    

    然后:

    panel.add(loadData, BorderLayout.SOUTH) // e.g. for the button
    
     // e.g. for the table
     panel.add(new JScrollPane(table, .....)), BorderLayout.CENTER)
    
  • 3

    您需要使用特定的布局管理器创建 JPanel ,然后添加具有适当约束的组件( JTableJButton ),以使它们出现在面板的正确区域中 . 目前您正在将面板的布局管理器设置为 null ,这几乎肯定是不正确的 . 您可能想查看Using Layout Managers教程 .

    要考虑的一个简单布局管理器是 BorderLayout . 例如:

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

相关问题