3

3 つの JPanels を実装する次のクラスがあります。1つのパネルにはラベルがあり、次はボタンで、3番目は私のコードで説明されているテーブルです:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
import java.util.*;
import javax.swing.event.*;

class  netTable implements ActionListener, TableModelListener
{
JFrame frame;
JTable table;
Vector rows,columns;
DefaultTableModel tabModel;
JScrollPane scrollPane;
JLabel lblMessage;
JButton cmdLookup, cmdUpdatePlan;
JPanel topPanel,mainPanel,buttonPanel;

public static void main(String[] args) 
    {
    netTable t=new netTable();
    }

netTable()
    {
    rows=new Vector();
    columns= new Vector();
    String[] columnNames = 
    { 
        "ID", 
        "Client",
        "Plan",
        "Amount"
    };

addColumns(columnNames);

tabModel=new DefaultTableModel();
tabModel.setDataVector(rows,columns);

table = new JTable(tabModel);
scrollPane= new JScrollPane(table);//ScrollPane

table.setRowSelectionAllowed(false);

table.getModel().addTableModelListener(this);

topPanel = new JPanel(); 
lblMessage=new JLabel("Invoices to Update"); 
topPanel.add(lblMessage); 

buttonPanel=new JPanel();

cmdLookup=new JButton("Lookup"); 
cmdUpdatePlan = new JButton("Update Plan");

buttonPanel.add(cmdLookup);
buttonPanel.add(cmdUpdatePlan);

cmdLookup.addActionListener(this);
cmdUpdatePlan.addActionListener(this);

mainPanel=new JPanel();
frame=new JFrame("Update Table");
frame.setSize(500,500);
frame.setExtendedState(JFrame.ICONIFIED);
mainPanel.setLayout(new BorderLayout());
mainPanel.add(topPanel,BorderLayout.NORTH);
mainPanel.add(buttonPanel,BorderLayout.CENTER);
mainPanel.add(scrollPane,BorderLayout.SOUTH);

topPanel.setBackground(Color.gray);
mainPanel.setBackground(Color.white);
buttonPanel.setBackground(Color.white);
table.getParent().setBackground(Color.black);
frame.getContentPane().add(mainPanel);
frame.addWindowListener(new WindowCloser());
frame.setVisible(true);
}

}

これをコンパイルすると、一番上にbuttonPanel、スペース、そしてその下にscrollPaneが表示され、topPanelが最初に表示されるはずのラベルが一番上に表示されなくなります。何か案は?BorderLayout の位置が間違っていると思います。

4

3 に答える 3

1

問題は次の行のようです。

frame.setExtendedState(JFrame.ICONIFIED);

何らかの理由で、コンポーネントがフレームに追加される前にこれを実行すると、topPanel が表示されなくなります。

次のいずれかを実行できます。

  1. 拡張状態が最後に設定された状態で、コンストラクター全体を try ブロックに入れます。

  2. (推奨) すべてが構築された後に拡張状態を設定します (別の方法を使用するか、メインで直接)。frame.setVisible(true);のようなものもそのようなメソッドに移動する必要があります。

于 2010-01-27T23:08:32.810 に答える
1

これらのパネルを配置するスペースがないため、トップ パネルは約 3 ピクセルに縮小されています。試す

frame.setSize(800,800);

代わりは。

于 2010-01-27T22:40:05.653 に答える
0

センター パネルは、利用可能なスペースを可能な限り消費します。上部ラベルとスクロール ペインの間にボタンを配置してスクロール ペインを「最大化」したい場合は、別の JPanel をボーダー レイアウトで作成し、ボタンを北に、スクロール ペインを中央に追加し、パネル全体を中央に追加します。君のmainPanel

于 2010-01-27T23:14:47.143 に答える