Java JScrollPane和x2B的问题;初始化后显示JTree
我有一个简单的swing应用程序,可以通过多个按钮管理特定类型的项目,并在底部打印项目树,在应用程序中打开项目时,请参见下面的屏幕截图: 问题是,当没有打开任何项目时,我会得到如下结果: HMI很简单,如下所示: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
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。因此,它们不利于像素完美布局。而是使用布局管理器,或与布局填充和边框一起使用。