【发布时间】:2016-09-29 11:03:34
【问题描述】:
我得到以下代码 [减少到最低限度]:
public class MainWindow extends JFrame {
private static String StrBenutzer;
private JPanel contentPane;
TreeNode TreeNodeRoot = createInitTree();
JTree tree = new JTree(TreeNodeRoot);
static DefaultMutableTreeNode NodeRoot;
static DefaultMutableTreeNode NodeProjekte;
static DefaultMutableTreeNode NodeAllgemein;
/**
* Launch the application.
*/
public static void initWindow() {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MainWindow frame = new MainWindow();
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setUndecorated(false);
frame.setVisible(true);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public MainWindow() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 1160, 679);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
SpringLayout sl_contentPane = new SpringLayout();
contentPane.setLayout(sl_contentPane);
sl_contentPane.putConstraint(SpringLayout.NORTH, tree, 0, SpringLayout.NORTH, contentPane);
tree.setEditable(true);
contentPane.add(tree);
JButton btnAdd = new JButton("Add");
sl_contentPane.putConstraint(SpringLayout.WEST, tree, 0, SpringLayout.WEST, btnAdd);
sl_contentPane.putConstraint(SpringLayout.SOUTH, tree, -11, SpringLayout.NORTH, btnAdd);
sl_contentPane.putConstraint(SpringLayout.WEST, btnAdd, 0, SpringLayout.WEST, contentPane);
sl_contentPane.putConstraint(SpringLayout.SOUTH, btnAdd, -10, SpringLayout.SOUTH, contentPane);
contentPane.add(btnAdd);
JButton btnDelete = new JButton("Delete");
sl_contentPane.putConstraint(SpringLayout.NORTH, btnDelete, 0, SpringLayout.NORTH, btnAdd);
sl_contentPane.putConstraint(SpringLayout.WEST, btnDelete, 6, SpringLayout.EAST, btnAdd);
contentPane.add(btnDelete);
JButton btnInfo = new JButton("Info");
sl_contentPane.putConstraint(SpringLayout.EAST, tree, 1, SpringLayout.EAST, btnInfo);
sl_contentPane.putConstraint(SpringLayout.NORTH, btnInfo, 0, SpringLayout.NORTH, btnAdd);
sl_contentPane.putConstraint(SpringLayout.WEST, btnInfo, 6, SpringLayout.EAST, btnDelete);
sl_contentPane.putConstraint(SpringLayout.EAST, btnInfo, 59, SpringLayout.EAST, btnDelete);
contentPane.add(btnInfo);
JPanel panel = new JPanel();
sl_contentPane.putConstraint(SpringLayout.NORTH, panel, 0, SpringLayout.NORTH, tree);
sl_contentPane.putConstraint(SpringLayout.WEST, panel, 16, SpringLayout.EAST, tree);
sl_contentPane.putConstraint(SpringLayout.SOUTH, panel, 565, SpringLayout.NORTH, contentPane);
sl_contentPane.putConstraint(SpringLayout.EAST, panel, 39, SpringLayout.EAST, contentPane);
contentPane.add(panel);
}
private static TreeNode createInitTree(){
NodeRoot = new DefaultMutableTreeNode("User");
NodeProjekte = new DefaultMutableTreeNode( "Projekte");
NodeAllgemein = new DefaultMutableTreeNode( "Allgemein" );
DefaultMutableTreeNode projectA = new DefaultMutableTreeNode("Projekt A");
DefaultMutableTreeNode projectB = new DefaultMutableTreeNode("Projekt B");
DefaultMutableTreeNode LinkProjectA = new DefaultMutableTreeNode("Öffnen");
DefaultMutableTreeNode LinkProjektB = new DefaultMutableTreeNode("Öffnen");
DefaultMutableTreeNode NotizProjektA = new DefaultMutableTreeNode("Notiz");
DefaultMutableTreeNode NoitzProjektB = new DefaultMutableTreeNode("Notiz");
DefaultMutableTreeNode Zeitstrahl = new DefaultMutableTreeNode("Zeitplan");
DefaultMutableTreeNode ToDo = new DefaultMutableTreeNode("ToDo");
NodeProjekte.add( projectA );
NodeProjekte.add( projectB );
projectA.add(LinkProjectA);
projectA.add(NotizProjektA);
projectB.add(LinkProjektB);
projectB.add(NoitzProjektB);
NodeAllgemein.add(Zeitstrahl);
NodeAllgemein.add(ToDo);
NodeRoot.add( NodeProjekte );
NodeRoot.add( NodeAllgemein );
return NodeRoot;
}
private static void addItem(String StrProjektLink, String StrProjektName){
DefaultMutableTreeNode NodeNewProject = new DefaultMutableTreeNode(StrProjektName);
DefaultMutableTreeNode NodeNewProjectLink = new DefaultMutableTreeNode("Link");
DefaultMutableTreeNode NodeNewProjectNotiz = new DefaultMutableTreeNode("Notiz");
NodeProjekte.add(NodeNewProject);
NodeNewProject.add(NodeNewProjectLink);
NodeNewProject.add(NodeNewProjectNotiz);
}
private static void deleteItem(){
}
private static void updateTree(){
}
private void addProjectFolder()
{
addItem("C:/Users/", "User-Directory"a);
}
}
现在我想在从树中添加或删除一个孩子之后更新 JTree 模型。但是 Eclipse 说,我所有的变量和函数都必须是静态的,所以我不能更新元素。更新 JTree 最简单的方法是什么?
【问题讨论】:
-
"Eclipse said, that all my variables and functions have to be static"-- 不,Java(不是 Eclipse -- Java)并不是这么说的。重新阅读错误消息,然后尝试以其他方式修复它。与其将大多数字段和方法设为静态,不如将它们设为实例(当然主要方法除外),并且仅尝试以非静态方式访问它们。您遇到此问题表明您在 Java 基础知识方面存在差距,需要在尝试继续进行 GUI 编程之前填补这一空白。 -
阅读 How to Use Trees 上的 Swing 教程中的部分以获取工作示例。
TreeDemo示例将向您展示如何构建代码,这样您就不需要静态变量或方法。保留所有 Swing 基础知识的教程链接。