Java JScrollPane和x2B的问题;初始化后显示JTree

Java JScrollPane和x2B的问题;初始化后显示JTree,java,jscrollpane,jtree,Java,Jscrollpane,Jtree,我有一个简单的swing应用程序,可以通过多个按钮管理特定类型的项目,并在底部打印项目树,在应用程序中打开项目时,请参见下面的屏幕截图: 问题是,当没有打开任何项目时,我会得到如下结果: HMI很简单,如下所示: public class Desktop extends JFrame implements ActionListener { public Desktop() { JButton newProject, generate, quit, bAddToClassPath

我有一个简单的swing应用程序,可以通过多个按钮管理特定类型的项目,并在底部打印项目树,在应用程序中打开项目时,请参见下面的屏幕截图:

问题是,当没有打开任何项目时,我会得到如下结果:

HMI很简单,如下所示:

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),在打开项目的情况下让显示相同(白色区域),但里面没有项目树。
我不知道怎么做,有什么想法吗?

这里是我找到的解决这个显示问题的答案:

在我的主面板上使用的
FlowLayout
以某种方式阻止我直接使用
setSize()
因此,我决定在我的主机上安装一个辅助面板
secondMainPanel
,而不使用
newjpanel(null)进行特定布局

我确实在它上面添加了
jscrollpane
,然后我可以毫无问题地调整它的大小以获得正确的显示


我认为可能有更好的方法来修复它,但这个方法很有效。

1)
jscrollpane.setHorizontalScrollBarPolicy(30)当任务有定义的常量时,不要使用“幻数”。这些常量将受益于编译时检查,并且通常更易于人类阅读。2) 为了更快地获得更好的帮助,请发布一个or。感谢您的建议,我对“幻数”进行了一些编辑,因为这只是一个显示问题,我认为不需要解释整个“项目特定类型”,它非常庞大。MCVE/SSCCE在哪里?不确定它是否真的完全符合MCVE,但这里有一些编辑,尽管我最终找到了正确显示它的方法。“不确定它是否真的完全符合MCVE”您可以将它复制/粘贴到编辑器中,编译它而不做任何更改,然后运行它(再次运行而不做任何更改)?这是“完整”或“独立”部分。它是否包括与问题无关的组件或代码?那么它就不是最小的或短的。。真的,这不是火箭科学。”所以我决定在我的
主机上安装一个辅助面板
secondMainPanel
,而不使用
new JPanel(null);
“这与其说是一个解决方案,不如说是一个会导致进一步问题的黑客攻击。”。Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或与布局填充和边框一起使用。