2013-07-02 63 views
1

我試圖教自己如何使用Java swing和Window Builder Pro製作GUI,看完幾個YouTube視頻後,閱讀一些教程,並詢問位於前面的問題here我已經完成下列。擴展一個簡單的GUI的功能

public class JetstreamFrame extends JFrame { 

private static final long serialVersionUID = 1L; 
JTabbedPane tabPane; 

private JPanel buttonOnePanel; 
private JPanel buttonTwoPanel; 
private SpringLayout springLayout; 
private SpringLayout sl_buttonTwoPanel; 
private SpringLayout sl_buttonOnePanel; 
private JButton ButtonTwo; 
private JButton ButtonOne; 
private JScrollPane displayTextPanel; 
private JTextArea textArea; 
private ScrollPaneLayout sl_displayTextPanel; 
private JComboBox<String> comboBox; 

public JetstreamFrame() { 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    springLayout = new SpringLayout(); 
    getContentPane().setLayout(springLayout); 

    tabPane = new JTabbedPane(JTabbedPane.TOP); 
    setupTabPane(); 

    buttonOnePanel = new JPanel(); 
    sl_buttonOnePanel = new SpringLayout(); 
    setupButtonOnePanel(); 


    buttonTwoPanel = new JPanel(); 
    sl_buttonTwoPanel = new SpringLayout(); 
    setupButtonTwoPanel(); 

    ButtonOne = new JButton("Click Here!"); 
    setupButtonOne(); 

    setupComboBox(); 

    ButtonTwo = new JButton("Click Here!"); 
    setupButtonTwo(); 

    displayTextPanel = new JScrollPane(textArea); 
    sl_displayTextPanel = new ScrollPaneLayout(); 
    setupDisplayTextPanel(); 

    textArea = new JTextArea(); 
    displayTextPanel.setViewportView(textArea); 
} 

private void setupTabPane() 
{ 
    springLayout = new SpringLayout(); 
    springLayout.putConstraint(SpringLayout.NORTH, tabPane, 0, SpringLayout.NORTH, getContentPane()); 
    springLayout.putConstraint(SpringLayout.WEST, tabPane, 0, SpringLayout.WEST, getContentPane()); 
    springLayout.putConstraint(SpringLayout.SOUTH, tabPane, 245, SpringLayout.NORTH, getContentPane()); 
    springLayout.putConstraint(SpringLayout.EAST, tabPane, 484, SpringLayout.WEST, getContentPane()); 
    getContentPane().setLayout(springLayout); 
    springLayout.putConstraint(SpringLayout.NORTH, tabPane, 0, SpringLayout.NORTH, getContentPane()); 
    springLayout.putConstraint(SpringLayout.WEST, tabPane, 0, SpringLayout.WEST, getContentPane()); 
    springLayout.putConstraint(SpringLayout.SOUTH, tabPane, -198, SpringLayout.SOUTH, getContentPane()); 
    springLayout.putConstraint(SpringLayout.EAST, tabPane, 484, SpringLayout.WEST, getContentPane()); 
    getContentPane().add(tabPane); 
} 

private void setupButtonOnePanel() 
{ 
    tabPane.addTab("Tab One", null, buttonOnePanel, null); 
    buttonOnePanel.setLayout(sl_buttonOnePanel); 
} 

private void setupButtonOne() 
{ 
    ButtonOne.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) 
     { 
      textArea.append("You pressed button one, "); 
      textArea.append("ComboField: " + (String)comboBox.getSelectedItem() + "\n"); 
     } 
    }); 
    sl_buttonOnePanel.putConstraint(SpringLayout.NORTH, ButtonOne, 99, SpringLayout.NORTH, buttonOnePanel); 
    sl_buttonOnePanel.putConstraint(SpringLayout.WEST, ButtonOne, 187, SpringLayout.WEST, buttonOnePanel); 
    buttonOnePanel.add(ButtonOne); 
} 

@SuppressWarnings({ "rawtypes", "unchecked" }) 
private void setupComboBox() 
{ 
    String[] array = { "1" , "2", "3", "4" }; 
    comboBox = new JComboBox(array); 
    sl_buttonOnePanel.putConstraint(SpringLayout.NORTH, comboBox, 99, SpringLayout.NORTH, buttonOnePanel); 
    sl_buttonOnePanel.putConstraint(SpringLayout.WEST, comboBox, 6, SpringLayout.EAST, ButtonOne); 
    sl_buttonOnePanel.putConstraint(SpringLayout.EAST, comboBox, 167, SpringLayout.EAST, ButtonOne); 
    buttonOnePanel.add(comboBox); 
} 

private void setupButtonTwoPanel() 
{ 
    tabPane.addTab("Tab Two", null, buttonTwoPanel, null); 
    buttonTwoPanel.setLayout(sl_buttonTwoPanel); 
} 

private void setupButtonTwo() 
{ 
    ButtonTwo.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) 
     { 
      textArea.append("You pressed button two\n"); 
     } 
    }); 
    sl_buttonTwoPanel.putConstraint(SpringLayout.NORTH, ButtonTwo, 99, SpringLayout.NORTH, buttonTwoPanel); 
    sl_buttonTwoPanel.putConstraint(SpringLayout.WEST, ButtonTwo, 187, SpringLayout.WEST, buttonTwoPanel); 
    buttonTwoPanel.add(ButtonTwo); 
} 

private void setupDisplayTextPanel() 
{ 
    springLayout.putConstraint(SpringLayout.NORTH, displayTextPanel, 5, SpringLayout.SOUTH, tabPane); 
    springLayout.putConstraint(SpringLayout.WEST, displayTextPanel, 5, SpringLayout.WEST, tabPane); 
    springLayout.putConstraint(SpringLayout.SOUTH, displayTextPanel, 195, SpringLayout.SOUTH, tabPane); 
    springLayout.putConstraint(SpringLayout.EAST, displayTextPanel, -5, SpringLayout.EAST, tabPane); 
    getContentPane().add(displayTextPanel); 
    displayTextPanel.setLayout(sl_displayTextPanel); 
} 

public void start() 
{ 
    this.setSize(500, 500); 
    this.setVisible(true); 
} 
} 

由於前一個問題,我已經能夠實現在窗口關閉程序的適當退出,以及組合框,其中一個按下按鈕將打印的組合框裏面選擇的價值的實現。

我有幾個功能我想執行,但我不確定如何前進。

我想要完成的第一件事,也許是最簡單的,就是禁用調整窗口大小的功能。由於我無法找到簡單的方法來完成在調整大小時保留字段的相關性,因此消除調整窗口大小的能力是下一個最佳選擇。

我想澄清的另一個選項是在施工後編輯組合框的內容。理想情況下,我希望能夠通過按鈕添加和刪除字段中的條目。我無法找到一種方法,允許我設置框的內容,並且看起來唯一的方法就是在每次更改時創建一個新的組合框。有沒有更有效的方法來做到這一點?

回答

1

爲了使您的框架有固定的大小隻使用setResizable(false)

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
this.setResizable(false);// <- add this line 

如果你想改變組合框的內容,你可以使用的方法很多人喜歡

  • removeItem(item)將刪除特定元素
  • removeItemAt(index)將刪除指定位置上的元素(從0開始計數)
  • addItem(item)將在組合框的末尾
  • insertItemAt(item, index)將在指定位置插入項目添加新項目,移動當前項下
  • 你也有removeAllItems()猜測它做什麼:)

你可以找到許多有用的信息在documentation of that class

1

關於你JComboBox問題,您可以使用getItemAt(int index)檢索您的項目(有額外的干將),addItem(E item)添加到您的列表,並最終removeItemAt(int index)從你的列表(也有附加的刪除方法)中刪除項目。只要確保你打電話setEditable(true),因爲JComboBox是不可編輯的。

此外,要使您的窗口固定大小,請撥打setResizable(false);

1

是禁用調整窗口大小的功能。

frame.setResizable(false); 

因爲我無法找到一個簡單的方式來完成調整大小後

保持一個字段中的相對有一些更簡單的佈局管理器比SpringLayout中使用。此佈局通常僅由IDE使用,因爲它比較複雜。這就是爲什麼我們大多數人手動構建GUI的原因,所以我們不受IDE的限制。

我無法找到一種方法,讓我把盒子的內容,

要更換就需要更換模型中的全部內容。

comboBox.setModel(...); 

這就是所有Swing組件工作的原理,因此理解模型的概念非常重要。您的應用程序代碼只應該更新模型。在JComboBox的情況下,組件有幾個幫助器方法可以爲您更新模型。