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.;公开课主课 { 默认表模型 table_model; String[][] 地址数据 = new String[10][5]; JPanel面板; JFrame框架; JButton加载数据; int 计数,索引,行=0; 字符串此行; 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 上可见的表格的任何想法
Hi I have created a Jtable and can get it to show on my frame yet not on the JPanel I have ontop of my JFrame. I can't seem to change
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(); }
}
Any ideas on how I might go about setting the table visible ontop of my JPanel
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要使用特定的布局管理器创建
JPanel
,然后添加具有适当约束的组件(JTable
和JButton
)以使它们出现在面板的正确区域。当前您正在将面板的布局管理器设置为null
,这几乎肯定是不正确的。您可能需要查看使用布局管理器教程。一个值得考虑的简单布局管理器是
BorderLayout
。例如:You need to create your
JPanel
with a specific layout manager and then add components (theJTable
andJButton
) with appropriate constraints to cause them to appear in the correct area of the panel. Currently you are setting the panel's layout manager tonull
, which is almost certainly incorrect. You may want to check out the Using Layout Managers tutorial.One simple layout manager to consider is
BorderLayout
. For example:一个大胆的猜测:
试试这个:
然后:
A wild guess:
Try this instead:
And later: