ベータテスターが私に送信するデータを表示するための JFrame (この部分は既に行っています) と、チャート用の JTabbedPane (彼らが使用するため) を作成しようとしています。//ルック アンド フィール (およびカラーリング; 怠惰すぎて画像全体にカラーリングすることができなかった) などを無視して、次のようになることを望んでいます。
. //JComboBox に CardLayout を使用して、別のテーブルと新しく選択されたモードの別の JTabbedPane を表示する必要があります。つまり、2 つのテーブルと 2 つの JTabbedPanes です。
私は、このセットアップの小さな (非常に単純化された!) 例、(非常に単純な!) JTabbedPane と小さな JTable のみを持つ JFrame を作成しようとしました。この例は、JPanel (両方のコンポーネントを収容する) に BorderLayout を指定すると機能しますが、GridLayout (または GridBagLayout //最終的に使用することになるレイアウト) を指定するとすぐに、最後のコンポーネントのみが表示されます。やってみる! どうしてこれなの?
それが役立つ場合(私がこれにどれだけの初心者であるかを考えると、そうかもしれません)、サンプルコードは次のとおりです。
JPanelLayoutTest.java
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.HeadlessException;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
public class JPanelLayoutTest extends JFrame {
private JPanel aPanel;
private JTabbedPane tabbedPane;
private JTable someTable;
public JPanelLayoutTest(String title) throws HeadlessException {
super(title);
aPanel = setupPanel();
}
private JPanel setupPanel()
{
GridBagLayout gridBag = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints();
//making the panel have two columns and one row
JPanel panel = new JPanel(gridBag);
//add someTable to top
someTable = new JTable(new SampleTableModel());
/*JPanel somePanel = new JPanel();
somePanel.add(new JScrollPane(someTable));*/
constraints.gridx = 0;
constraints.gridy = 0;
constraints.gridheight = 1;
constraints.gridwidth = 1;
gridBag.setConstraints(new JScrollPane(someTable), constraints);
add(new JScrollPane(someTable));
//add tabbedPane to bottom
tabbedPane = new JTabbedPane();
tabbedPane.addTab("some component", new JLabel("some text"));
/*JPanel someOtherPanel = new JPanel();
someOtherPanel.add(tabbedPane);*/
constraints.gridy = 1;
gridBag.setConstraints(tabbedPane, constraints);
add(tabbedPane);
//add(tabbedPane);
return panel;
}
public void turnOnWindow()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
//setSize(400,200);
pack();
}
public static void main(String[] args) {
JPanelLayoutTest frame = new JPanelLayoutTest("JPanel Layout Test");
frame.turnOnWindow();
}
}
//Pardon the indentation; I wish this forum had support for the [code][/code] tag
SampleTableModel.java
import javax.swing.table.AbstractTableModel;
public class SampleTableModel extends AbstractTableModel {
//declaring the static arrays that will be the data for the table
private final String[] columnNames = {"Account", "Full Name", "Balance"};
private final int[] acctNumbers = {1000443749, 190238420, 928355};
private final String[] fullNames = {"Mike Warren", "Jack Smith", "Sarah Brown"};
private final double[] acctBalances = {193.38, 289.28, 21034.29};
public SampleTableModel()
{
// I do nothing in here; there is no reason to.
}
@Override
public int getColumnCount() { return columnNames.length; }
@Override
public int getRowCount() { return acctNumbers.length; }
@Override
public Object getValueAt(int row, int column) {
switch (column)
{
case 0:
return new Integer(acctNumbers[row]);
case 1:
return fullNames[row];
case 2:
return new Double(acctBalances[row]);
default:
return null; //there should be no way the code would ever reach here
}
}
@Override
public String getColumnName(int index) { return columnNames[index]; }
//Again, forgive my horrible indentation near the end here...
}