2017-05-18 28 views
-1

我有一个简单的swing应用程序,它可以管理多个JButton的特定类型的项目,并在底部打印项目树,当项目打开时,请参阅下图的屏幕截图在App: App screenshoot with project openedJScrollPane + JTree初始化后显示的问题

的事情是在没有项目打开我得到的是这样的: App screenshoot without project opened

人机界面简单,看起来像这样:

public class Desktop extends JFrame implements ActionListener { 
    public Desktop() { 

    JButton newProject, generate, quit, bAddToClassPath, openProject, saveProject; 
    JPanel mainPanel; 
    JScrollPane jscrollpane; 

    super("MainWindow"); 
    setLookAndFeel(); 
    setSize(330, 440); 
    ParamMainPanel(); 
    setVisible(true); 
    } 

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

    } 

    public static void ParamMainPanel() { 
    mainPanel = new JPanel(new FlowLayout()); 

    // BUTTONS PARAM 
    newProject = new JButton("Nouveau projet"); 
    generate = new JButton("Générer..."); 
    quit = new JButton("Quitter"); 
    openProject = new JButton ("Ouvrir projet"); 
    saveProject = new JButton ("Sauvegarder"); 

    bAddToClassPath = UIUtil.iconButton(); 
    bAddToClassPath.setActionCommand("setCP"); 
    bAddToClassPath.addActionListener(this); 
    mainPanel.add(bAddToClassPath); 

    newProject.addActionListener(this); 
    newProject.setActionCommand("newP"); 
    generate.addActionListener(this); 
    generate.setActionCommand("gen"); 
    quit.addActionListener(this); 
    quit.setActionCommand("qui"); 
    openProject.addActionListener(this); 
    openProject.setActionCommand("openP"); 
    saveProject.addActionListener(this); 
    saveProject.setActionCommand("save"); 

    mainPanel.add(newProject); 
    mainPanel.add(generate); 
    mainPanel.add(openProject); 
    mainPanel.add(saveProject); 
    mainPanel.add(quit); 

    // PROJECT TREE 
    jscrollpane = new JScrollPane(new JTree()); 
    jscrollpane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
    jscrollpane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); 
    jscrollpane.setMinimumSize(new Dimension(50, 50)); 
    jscrollpane.setLocation(4,61); 
    jscrollpane.setSize(306,322); 
    mainPanel.add(jscrollpane); 
    } 

} 

所以我想要的是在应用程序的启动,而不是有不良项目打开JTree(进入jscrollpane)没有项目打开,具有相同的显示与项目打开(白色集团),但没有项目树内。 我无法想象如何去做,有什么想法?

+1

1)'jscrollpane.setHorizo​​ntalScrollBarPolicy(30);'当定义任务的常量时,不要使用'幻数'。这些常量将从编译时检查中受益,并且通常更具人类可读性。 2)为了更快地获得更好的帮助,请发布[MCVE]或[简短,独立,正确的示例](http://www.sscce.org/)。 –

+0

感谢您的建议,我对'魔术数字'做了一些编辑,因为它只是一个显示问题,我认为不需要解释整个'项目特定类型',这是相当巨大的。 –

+0

MCVE/SSCCE在哪里? –

回答

-1

在这里,我找到解决此显示问题的答案:

FlowLayout我的主面板莫名其妙地被阻止我调整用我jscrollpane直接使用setSize() 所以我决定在我的大型机secondMainPanel二级面板没有特定的布局使用new JPanel(null);

我确实在其上添加了jscrollpane,然后我可以调整它的大小而不会有任何问题以获得正确的显示。

我认为可能有更好的方法来解决它,但这个工程。

+0

*“所以我决定在我的'MainFrame'' secondMainPanel'上有一个辅助面板,没有使用'new JPanel(null)'的特定布局''*这不是一个解决方案,而是一个解决方案,会导致更多的问题。 Java GUI必须在不同的语言环境中使用不同的PLAF来处理不同的操作系统,屏幕大小,屏幕分辨率等。因此,它们不利于像素的完美布局。请使用布局管理器或[它们的组合](http://stackoverflow.com/a/5630271/418556)以及[white space]的布局填充和边框(http://stackoverflow.com/a/17874718/ 418556)。 –