2011-12-02 78 views
1

我所試圖實現的是如何動態更改一個Swing JFrame的大小

  1. 創建擴展JPanelJLabel S和JButton,它出現安排通過GridBagLayout一個自定義組件(mypanel)。

  2. 有一個JFrame,將在垂直堆疊顯示多個mypanel,並相應地具有其高度變化,這取決於加入到它(JFrame =寬度的mypanel的寬度)mypanel S上的號碼。

  3. JFrame的高度比屏幕高度,有一個垂直滾動條出現滾動

我創建mypanel成功,但有很多的麻煩與增加了JFrame和設置它的大小,滾動條部分。

這是我的JFrame

this.window = new JFrame("ADesktop Notifications"); 
    this.window_panel = new JPanel(); 
    this.window_panel_scroll = new JScrollPane(this.window_panel); 

    this.window.setBounds(this.top_left_x,this.top_left_y, this.width, this.height); 
    this.window_panel.setLayout(new FlowLayout()); 
    this.window_panel.setAutoscrolls(true); 
    this.window.add(this.window_panel); 
+0

這是一個很簡單的問題,但其中的您實際工作的一些代碼段將幫助我們瞭解您的實現是有問題的。 – Colby

回答

1

試試這個例子中的代碼(動態擴展JFrame的)。

enter image description here enter image description here

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 

public class DynaFrame extends JFrame{ 

    private JPanel basePnl = new JPanel(); 

    public DynaFrame(){ 
     this.setTitle("Dynamic panel addition"); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     //this.setSize(600, 700); 
     this.add(getMainPanel()); 
     this.setLocationRelativeTo(null); 
     this.pack(); 
     this.setVisible(true); 
    } 

    public static void main(String[] args){ 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new DynaFrame(); 
      } 
     }); 
    } 

    public JPanel getMainPanel(){ 
     basePnl.setLayout(new BoxLayout(basePnl, BoxLayout.Y_AXIS)); 
     basePnl.add(getRowPanel()); 
     return basePnl; 
    } 

    public JPanel getRowPanel(){ 
     JPanel pnl = new JPanel(); 
     GridLayout gLayout = new GridLayout(); 
     gLayout.setColumns(4); 
     gLayout.setRows(1); 
     pnl.setLayout(gLayout); 
     pnl.add(new JLabel("Filetype")); 
     pnl.add(new JTextField()); 
     pnl.add(new JButton("Browse")); 
     JButton addBtn = new JButton("Add"); 
     addBtn.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       basePnl.add(getRowPanel()); 
       DynaFrame.this.pack(); 
      } 
     }); 
     pnl.add(addBtn); 
     return pnl; 
    } 
} 
+0

感謝您的幫助!幾乎在那裏..這就是它現在的樣子http://imgur.com/oaTiW彩色塊是jpanels,可以動態添加到主jframe。現在我該如何讓jframe滾動? – ankit