2012-02-24 54 views
6

Tôi đang cố gắng để có được một JInternalFrame được tối đa hóa khi nó được khởi chạy. Tôi đã thực hiện tìm kiếm trên web về điều này và đã thử các đề xuất mã khác nhau, nhưng chúng dường như không hoạt động đúng trên máy của tôi, đang chạy Java 6 trên Windows 7.Tối đa hóa JInternalFrame trong Java

Tôi đã đơn giản hóa mã bên dưới để dễ dàng hơn để cô lập các giải pháp.

Có ai có thể chỉ cho tôi cách thay đổi mã bên dưới để khung bên trong được tự động phóng to tối đa khi được tạo không?

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.Toolkit; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 

import javax.swing.JDesktopPane; 
import javax.swing.JFrame; 
import javax.swing.JInternalFrame; 
import javax.swing.JLayeredPane; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.KeyStroke; 

public class MaximizeInternalFrame extends JFrame implements ActionListener{ 
private static final long serialVersionUID = 1L; 
JLayeredPane desktop; 
JInternalFrame internalFrame; 

public MaximizeInternalFrame() { 
    super("Test To Maximize Internal Frame"); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    //Make the big window be indented 50 pixels from each edge of the screen. 
    int inset = 50; 
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
    Dimension screenMinus50 = new Dimension(screenSize.width - inset*2, screenSize.height - inset*2); 

    this.setPreferredSize(screenMinus50); 
    desktop = new JDesktopPane(); 
    setJMenuBar(createMenuBar()); 
    this.add(desktop, BorderLayout.CENTER); 
    this.pack(); 
    this.setSize(screenMinus50); 
    this.setLocationRelativeTo(null); 
} 
protected JMenuBar createMenuBar() { 
    JMenuBar menuBar = new JMenuBar(); 
    //Set up the File menu. 
    JMenu FileMenu = new JMenu("File"); 
    FileMenu.setMnemonic(KeyEvent.VK_F); 
    menuBar.add(FileMenu); 
    //Set up the first menu item. 
    JMenuItem menuItem = new JMenuItem("New"); 
    menuItem.setMnemonic(KeyEvent.VK_N); 
    menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.ALT_MASK)); 
    menuItem.setActionCommand("new"); 
    menuItem.addActionListener(new OpenListener()); 
    FileMenu.add(menuItem); 
    //Set up the second menu item. 
    menuItem = new JMenuItem("Quit"); 
    menuItem.setMnemonic(KeyEvent.VK_Q); 
    menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, ActionEvent.ALT_MASK)); 
    menuItem.setActionCommand("quit"); 
    menuItem.addActionListener(this); 
    FileMenu.add(menuItem); 

    return menuBar; 
    } 
class OpenListener implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     // create internal frame 
     internalFrame = new JInternalFrame("this internal frame needs to be maximized", true, true, true, true); 
     desktop.add(internalFrame); 
     internalFrame.setSize(internalFrame.getMaximumSize()); 
     internalFrame.pack(); 
     internalFrame.setVisible(true); 
    } 
} 
public static void main(String args[]) { 
    MaximizeInternalFrame myParentFrame = new MaximizeInternalFrame(); 
    myParentFrame.setVisible(true); 
} 
public void actionPerformed(ActionEvent e) {if ("quit".equals(e.getActionCommand())){System.exit(0);}} 
} 
+0

[ 'InternalFrameCount'] (http://stackoverflow.com/a/9422246/230513) là một thí dụ. – trashgod

+1

hãy tìm hiểu các quy ước đặt tên java và gắn bó với chúng – kleopatra

Trả lời

13

Thêm những điều sau đây sau khi internalFrame.setVisible(true):

try { 
    internalFrame.setMaximum(true); 
} catch (PropertyVetoException e) { 
    // Vetoed by internalFrame 
    // ... possibly add some handling for this case 
} 

Bạn cũng có thể loại bỏ internalFrame.setSize(internalFrame.getMaximumSize());

+6

FYI cho người khác: setMaximum() phải được gọi là * sau * JInternalFrame đã được thêm vào vùng chứa mẹ. Gọi nó trước sẽ ném một ngoại lệ. Ý thức chung (sau khi tất cả, làm thế nào để bạn nói với một cửa sổ để điền vào cha mẹ của nó nếu nó đã không được đưa ra một phụ huynh nào được nêu ra), nhưng có thể dễ dàng bị bỏ qua. Không phải là * tôi * đã làm điều đó. ;) –

Các vấn đề liên quan