2015-10-23 3 views
0

Я добавил JTree и a JInternalFrame в JDesktopPane. Я хочу изменить размер JInternalFrame, но не мог этого сделать. Но я могу переместить внутри него внутреннюю рамку.Не удалось изменить размер JInternalFrame

import javax.swing.JDesktopPane; 
import javax.swing.JFrame; 
import javax.swing.JInternalFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTree; 
import javax.swing.OverlayLayout; 
import javax.swing.tree.DefaultMutableTreeNode; 
import javax.swing.tree.DefaultTreeModel; 

public class TableDiff { 

public static void main(String[] args) { 
    JDesktopPane panel = new JDesktopPane() { 
     // @Override 
     // public boolean isOptimizedDrawingEnabled() { 
     //  return false; 
     // } 
    }; 
    panel.setLayout(new OverlayLayout(panel)); 
    JTree tree = new JTree(); 
    DefaultMutableTreeNode root = new DefaultMutableTreeNode("root"); 
    for (int i = 0; i < 10; i++) { 
     DefaultMutableTreeNode node = new DefaultMutableTreeNode(i + "x"); 
     for (int j = 0; j < 5; j++) { 
      node.add(new DefaultMutableTreeNode(i + "x")); 
     } 
     root.add(node); 
    } 
    tree.setModel(new DefaultTreeModel(root)); 
    JScrollPane tscrollpane = new JScrollPane(tree); 

    JInternalFrame iFrame = new JInternalFrame("asd"); 
    iFrame.setClosable(true); 
    iFrame.setMaximizable(true); 
    iFrame.setResizable(true); 
    iFrame.setIconifiable(true); 
    iFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
    // tscrollpane.setAlignmentX(1.0f); 
    // tscrollpane.setAlignmentY(0.0f); 
    // iFrame.setAlignmentX(0.0f); 
    // iFrame.setAlignmentY(0.0f); 
    panel.add(tscrollpane); 
    panel.add(iFrame); 

    iFrame.setVisible(true); 

    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setContentPane(panel); 
    frame.pack(); 
    frame.setVisible(true); 
} 
} 

ответ

1

Ваша проблема заключается в использовании OverlayLayout.

Просто удалите следующую строку:

panel.setLayout(new OverlayLayout(panel)); 

Кроме того, очень важно, не забудьте установить предпочтительный размер вашего JFrame и JInternalFrame!

Согласно Oracle documentation for using Internal Frames with Java Swing (link):

Вы должны установить размер внутреннего фрейма.
Если вы не установили размер внутренней рамки , она будет иметь нулевой размер и, следовательно, никогда не будет видна. Вы можете установить размер одним из следующих способов: setSize, pack, или setBounds.

+0

Если я удалю его, он просто покажет белую панель без содержимого. Вы проверили код, удалив его? – Madhan

+1

Как показано в моем ответе, вам ** нужно ** установить размер в 'JInternalFrame' :) – ccjmne

Смежные вопросы