1

こんにちは私はJtableを作成しましたが、それをフレームに表示することはできますが、JFrameの上にあるJPanelには表示できません。変わらないようです

java.awtをインポートします。;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
java.ioをインポートします。;
import java.util.ArrayList;
インポートjava.util.Comparator;
javax.swingをインポートします。;
javax.swing.tableをインポートします。;

パブリッククラスメイン {{ DefaultTableModel table_model; String [] [] addressData = new String [10] [5]; JPanelパネル; JFrameフレーム; JButton loadData; int count、index、row = 0; 文字列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の上にテーブルを表示する方法についてのアイデア

4

2 に答える 2

5

JPanel特定のレイアウトマネージャーを使用してを作成してから、適切な制約を使用してコンポーネント(JTableおよび)を追加し、パネルの正しい領域に表示されるようにする必要があります。JButton現在、パネルのレイアウトマネージャーをに設定していますがnull、これはほぼ間違いなく正しくありません。レイアウトマネージャーの使用チュートリアルを確認することをお勧めします。

考慮すべき単純なレイアウトマネージャーの1つは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);
于 2009-11-23T23:31:24.527 に答える
3

ワイルドな推測:

 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) 
于 2009-11-23T23:30:28.787 に答える