Java 扩展JTree的节点可以最小化GridBagLayout
我已经创建了一个简单的Swing应用程序,它目前由一个JToolBar、一个JTree和一个JTree组成,都在GridBagLayout中 JTree当前只有一个顶部节点,并且只有一个子节点。 使用JToolBar、JTree和RSyntaxTextArea完成UI 当扩展JTree的顶部节点时,整个GridBagLayout类型为“最小化”: 我用谷歌搜索过这个现象,但由于控制台中没有错误消息或其他东西,我现在有点无能为力 我正在使用以下代码创建UI:Java 扩展JTree的节点可以最小化GridBagLayout,java,swing,jtree,rsyntaxtextarea,Java,Swing,Jtree,Rsyntaxtextarea,我已经创建了一个简单的Swing应用程序,它目前由一个JToolBar、一个JTree和一个JTree组成,都在GridBagLayout中 JTree当前只有一个顶部节点,并且只有一个子节点。 使用JToolBar、JTree和RSyntaxTextArea完成UI 当扩展JTree的顶部节点时,整个GridBagLayout类型为“最小化”: 我用谷歌搜索过这个现象,但由于控制台中没有错误消息或其他东西,我现在有点无能为力 我正在使用以下代码创建UI: RSyntaxTextArea te
RSyntaxTextArea textArea = new RSyntaxTextArea(50, 150);
textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
textArea.setCodeFoldingEnabled(true);
RTextScrollPane sp = new RTextScrollPane(textArea);
cp.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 0;
cp.add(createToolbar(), c);
c.gridx = 0;
c.gridy = 1;
c.ipadx = 90;
c.fill = GridBagConstraints.BOTH;
cp.add(createTree(), c);
c.gridx = 1;
c.gridy = 1;
c.fill = GridBagConstraints.HORIZONTAL;
cp.add(sp, c);
...
private JToolBar createToolbar() {
JToolBar tb = new JToolBar("Toolbar", JToolBar.HORIZONTAL);
JButton ob = new JButton(new ImageIcon("..."));
tb.add(ob);
tb.setFloatable(false);
tb.setRollover(true);
return tb;
}
...
private JTree createTree() {
DefaultMutableTreeNode top = new DefaultMutableTreeNode("Projects");
JTree tree = new JTree(top);
DefaultMutableTreeNode test = new DefaultMutableTreeNode("I'm a test!");
top.add(test);
return tree;
}
更新:在您的系统上编译用于测试目的的最小代码示例:
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class Tester extends JFrame {
public Tester () {
initializeComponent();
}
private void initializeComponent() {
JPanel cp = new JPanel(new BorderLayout());
JTextArea textArea = new JTextArea(50, 150);
JScrollPane sp = new JScrollPane(textArea);
cp.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 0;
cp.add(createToolbar(), c);
c.gridx = 0;
c.gridy = 1;
c.ipadx = 90;
c.fill = GridBagConstraints.BOTH;
cp.add(createTree(), c);
c.gridx = 1;
c.gridy = 1;
c.fill = GridBagConstraints.HORIZONTAL;
cp.add(sp, c);
setContentPane(cp);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
}
private JTree createTree() {
DefaultMutableTreeNode top = new DefaultMutableTreeNode("Projects");
JTree tree = new JTree(top);
DefaultMutableTreeNode test = new DefaultMutableTreeNode("I'm a test!");
top.add(test);
return tree;
}
private JToolBar createToolbar() {
JToolBar tb = new JToolBar("Toolbar", JToolBar.HORIZONTAL);
JButton ob = new JButton("Button");
tb.add(ob);
tb.setFloatable(false);
tb.setRollover(true);
return tb;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Tester().setVisible(true);
}
});
}
}
当扩展JTree的顶部节点时,整个GridBagLayout类型为“最小化”:
当没有足够的空间显示整个组件时,GridBagLayout将收缩到组件的最小大小
Swing应用程序,目前由一个JToolBar、一个JTree和一个RSyntaxTextArea组成,都在GridBagLayout中
我只会使用框架的默认BorderLayout
:
add(toolbar, BorderLayout.PAGE_START);
add(treeScrollPane, BorderLayout.CENTER);
add(textAreaScrollPane, BorderLayout.PAGE_END);
注意我是如何将JTree添加到JScrollPane的。现在,当需要时,将显示树的滚动条
如果您确实想使用GridBagLayout
,请阅读上Swing教程中的部分,了解如何使用各种约束。您可能希望从“weightx/y”约束开始,这些约束控制哪些组件在更改帧大小时获得空间。另外,请查看“填充”约束
当扩展JTree的顶部节点时,整个GridBagLayout类型为“最小化”:
当没有足够的空间显示整个组件时,GridBagLayout将收缩到组件的最小大小
Swing应用程序,目前由一个JToolBar、一个JTree和一个RSyntaxTextArea组成,都在GridBagLayout中
我只会使用框架的默认BorderLayout
:
add(toolbar, BorderLayout.PAGE_START);
add(treeScrollPane, BorderLayout.CENTER);
add(textAreaScrollPane, BorderLayout.PAGE_END);
注意我是如何将JTree添加到JScrollPane的。现在,当需要时,将显示树的滚动条
如果您确实想使用
GridBagLayout
,请阅读上Swing教程中的部分,了解如何使用各种约束。您可能希望从“weightx/y”约束开始,这些约束控制哪些组件在更改帧大小时获得空间。另外,请看“填充”约束。请考虑在您的问题中创建和发布一个有效的小程序,我们可以编译、运行,并为您演示您的问题。@ HoVrCRAFTFulfFeeles当然,更新了我的问题。(1)AlexanderLeithner您发布的代码不是MCVE
,因为我们无法访问自定义类。无论如何,你已经有了答案。是时候读点书了。@camickr哦,谢谢你,忽略了它们。。。现在就用简单的JTextAreas代替它们……请考虑在你的问题中创建和发布一个有效的小程序,我们可以编译,运行,并为你演示你的问题。@ HoviCRAFTFulfFoeles当然,更新我的问题。(1)@ AlexanderLeithner,您发布的代码不是MCVE
,因为我们无法访问自定义类。无论如何,你已经有了答案。是时候读点书了。@camickr哦,谢谢你,忽略了它们。。。将立即用简单的JTextAreas替换它们…这将把RSyntaxTextArea附加到对话框的末尾,对吗?这不是我希望它显示的方式,就在它右边的JTree旁边。但是很高兴知道收缩(但我真的不知道为什么没有足够的空间).@AlexanderLeithner,我希望它显示在右边的JTree旁边
-然后使用不同的BorderLayout约束将文本区域放在右边。阅读教程。我提供了一个指向GridBagLayout的链接。您还可以找到关于BorderLayout的部分。谢谢,您忽略了weightx/y
(但之前已经阅读过本教程)…这将在对话框的末尾附加rsyntaxtArea,对吗?这不是我希望它显示的方式,就在它右边的JTree旁边。但是很高兴知道收缩(但我真的不知道为什么没有足够的空间).@AlexanderLeithner,我希望它显示在右边的JTree旁边
-然后使用不同的BorderLayout约束将文本区域放在右边。阅读教程。我提供了一个指向GridBagLayout的链接。您还可以找到关于BorderLayout的部分。谢谢您,忽略了weightx/y
(但之前已经阅读过本教程)。。。