我使用的是JTabbedPane
來控制幾個面板,每個面板都包含供用戶輸入信息的字段。意圖是用戶可以按任何順序填寫它們,並且可以返回來更改先前輸入的信息。在JabbedPane中使用JTextField格式化JPanel
JTabbedPane tabs = new JTabbedPane();
tabs.add("Attributes", attributesPanel);
...
frame.add(tabs);
面板的每一個使用具有GridBagConstraints
沿着GridBagLayout
格式化的一切。當我不輸入任何內容並更改標籤時,一切似乎都沒問題。但是,當我在任何JTextField
中輸入任何信息並更改標籤時,返回到標籤將顯示聚集在框架中心的所有內容。
有誰知道爲什麼,可能是?再次,這隻發生,如果我實際上在文本字段中輸入的東西...
在面板中,一切都在構造函數初始化。下面是一些偏代碼:
protected EntityBuilderAttributesPanel() {
setPreferredSize(new Dimension(EntityBuilder.PANEL_WIDTH, EntityBuilder.PANEL_HEIGHT));
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
entityIdLabel = new JLabel("Entity Unique Identity");
entityIdTextField = new JTextField();
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 1;
add(entityIdLabel, c);
c.gridx = 1;
c.gridwidth = 3;
add(entityIdTextField, c);
entityNameLabel = new JLabel("Entity Name");
entityNameTextField = new JTextField();
c.gridx = 0;
c.gridy = 1;
c.gridwidth = 1;
add(entityNameLabel, c);
c.gridx = 1;
c.gridwidth = 3;
add(entityNameTextField, c);
space_01 = new JLabel();
space_01.setPreferredSize(new Dimension(EntityBuilder.PANEL_WIDTH, 25));
c.gridx = 0;
c.gridy = 2;
add(space_01, c);
attributesLabel = new JLabel("Entity Attributes");
c.gridx = 0;
c.gridy = 3;
c.gridwidth = 1;
add(attributesLabel, c);
attributes = new JList(EntityAttribute.values());
attributes.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
attributes.setLayoutOrientation(JList.VERTICAL);
attributes.setVisibleRowCount(10);
JScrollPane listScroller = new JScrollPane(attributes);
listScroller.setPreferredSize(new Dimension(EntityBuilder.PANEL_WIDTH, 400));
listScroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
c.gridx = 0;
c.gridy = 4;
c.gridwidth = 4;
add(listScroller, c);
[...]
當人們改變標籤或輸入數據時,你正在做什麼? –
沒有!我沒有添加更改偵聽器或動作偵聽器,我不想... –
您是否重新使用任何GridBagContraints或佈局管理器? –