java - JTable 不会显示在 JPanel 上

标签 java swing jtable jpanel

您好,我已经创建了一个 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 上可见的任何想法

最佳答案

您需要使用特定的布局管理器创建您的 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);

关于java - JTable 不会显示在 JPanel 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1786726/

相关文章:

java - JDBC中使用的java中**Connection接口(interface)**的**prepareStatement**的实现在哪里?

java - JFrame 调整大小移动 JSplitPane 分隔线

java - 如何最小化容器内的面板

java - 如何使用 KeyListener 移动 JFrame 中的矩形?

java - 如何清除JTable中的数据?

java - 使用 JodaTime 获取本地化周数

java - 如何在java中保存和加载复选框状态和文本字段值?

java - JTable只显示表格的右边框

java - 防止 Java Swing JTable 在输入无效数据时失去焦点

java - 在 Java 中将数据从一个类传递到另一个类