Hi,
ich hab irgendwie ein Problem mit meinem Layout und komme da nicht so recht weiter...
Also ich hab einen einfachen Dialog und in diesen will ich 3 Elemente platzieren: Einen JTree, darunter eine TextArea und darunter dann ein Panel mit 2 Buttons (Ok+Cancel). Sowohl den JTree als auch die TextArea will ich in ein JScrollPane einbetten. Die ganzen Komponenten arrangiere ich über ein GridBagLayout auf einem Panel, und dieses Panel füge ich dann dem Panel vom Dialog hinzu (-> Code).
Mein Problem ist jetzt: Benutze ich wie hier jetzt im Code die setPreferredSize-Methoden um die Größe von der TextArea und dem JTree einzustellen, dann haben diese Komponenten zwar die gewünschte Größe und alles sieht wunderbar aus im Fenster, ABER das JScrollPane funktioniert irgendwie nicht, d.h. es erscheinen keine Scrollbars wenn mehr im JTree oder in der TextArea steht, als eigentlich Platz hat.
Anders herum: Kommentiere ich die beiden setPreferredSize-Methoden aus, und benutze stattdessen die setSize-Methoden, dann funktioniert zwar das JScrollPane wie gewünscht, aber der JTree und die TextArea nehmen nicht die gewünschte Breite ein (die sind viel schmaler, und so schmal will ich die nicht habe).
Weiß jemand woran das liegen könnte, oder wie ich das anders machen könnte ? Bin für jede Hilfe dankbar.
ich hab irgendwie ein Problem mit meinem Layout und komme da nicht so recht weiter...
Also ich hab einen einfachen Dialog und in diesen will ich 3 Elemente platzieren: Einen JTree, darunter eine TextArea und darunter dann ein Panel mit 2 Buttons (Ok+Cancel). Sowohl den JTree als auch die TextArea will ich in ein JScrollPane einbetten. Die ganzen Komponenten arrangiere ich über ein GridBagLayout auf einem Panel, und dieses Panel füge ich dann dem Panel vom Dialog hinzu (-> Code).
Mein Problem ist jetzt: Benutze ich wie hier jetzt im Code die setPreferredSize-Methoden um die Größe von der TextArea und dem JTree einzustellen, dann haben diese Komponenten zwar die gewünschte Größe und alles sieht wunderbar aus im Fenster, ABER das JScrollPane funktioniert irgendwie nicht, d.h. es erscheinen keine Scrollbars wenn mehr im JTree oder in der TextArea steht, als eigentlich Platz hat.
Anders herum: Kommentiere ich die beiden setPreferredSize-Methoden aus, und benutze stattdessen die setSize-Methoden, dann funktioniert zwar das JScrollPane wie gewünscht, aber der JTree und die TextArea nehmen nicht die gewünschte Breite ein (die sind viel schmaler, und so schmal will ich die nicht habe).
Weiß jemand woran das liegen könnte, oder wie ich das anders machen könnte ? Bin für jede Hilfe dankbar.
Code:
//... im Konstruktor vom Dialog...
okButton = new JButton("Ok");
okButton.addActionListener(this);
cancelButton = new JButton("Cancel");
cancelButton.addActionListener(this);
buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER,5,5));
buttonPanel.add(okButton);
buttonPanel.add(cancelButton);
description = new JTextArea("Description of a constraint");
description.setColumns(30);
description.setRows(4);
createTree(); //hier werden listener hinzugefügt (treeExpansion und treeSelection), und außerdem ein eigener Renderer und Editor gesetzt usw
constraintTree.setPreferredSize(new Dimension(485,100)); //constraintTree ist der JTree, der oben erzeugt wurde
description.setPreferredSize(new Dimension(485,40));
//constraintTree.setSize(485,100);
//description.setSize(485,40);
treeScrollPane = new JScrollPane(constraintTree, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
descriptionScrollPane = new JScrollPane(description, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
layoutPanel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 1;
c.gridheight = 1;
c.anchor = GridBagConstraints.NORTH;
c.fill = GridBagConstraints.BOTH;
c.insets = new Insets(0,0,12,0);
layoutPanel.add(treeScrollPane,c);
c.gridy++;
c.fill = GridBagConstraints.BOTH;
layoutPanel.add(descriptionScrollPane,c);
c.gridy++;
c.insets = new Insets(0,0,0,0);
layoutPanel.add(buttonPanel,c);
contentPanel = (JPanel)this.getContentPane();
contentPanel.setLayout( new FlowLayout(FlowLayout.CENTER, 5, 10));
contentPanel.add(layoutPanel);
this.setLocation(new Point(150, 200));
this.setSize(new Dimension(500, 600));
//this.pack();
this.setResizable(true);
this.setVisible(true);
validate();