【问题标题】:container inside a container in JavaJava中容器内的容器
【发布时间】:2012-11-08 16:12:42
【问题描述】:

我有一个带有BorderLayout 的Java 程序,到目前为止运行良好。 我想在其下方添加一个JTextArea,以便在我点击运行按钮后显示出来。

有人可以向我展示一个完成我想做的事情的最佳方法的例子吗? 我是否应该定义一个 2X1 的 GridLayout,顶部是 BorderLayout,然后是底部的 JTextArea

我愿意接受建议...

这是我目前所拥有的图像:

在此下方 -- 我希望有一个文本区域,一旦我单击运行按钮,它将捕获输出。

【问题讨论】:

  • 如果您将目前所做的一些代码放入其中将会很有帮助。
  • 我没有发布任何代码,因为到目前为止我所尝试的都失败了。我真的很想知道我应该如何布局的基本想法。通过查看一般示例并亲自尝试,我学得最好。
  • ..或者更好的是你拥有的截图和你想要的图。
  • 我不确定您要做什么,但是您可以将 JPanel 作为 JPanel 的子级。有时,嵌套的 JPanel 允许您在 GUI 的不同部分使用不同的布局管理器。
  • 给出一个更好的想法,这个 JTextArea 会在哪里?整件事?

标签: java swing user-interface containers


【解决方案1】:

正如我在评论中所说......这样的事情怎么样:

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;



public class Ironmantis extends JFrame{
    JTextArea textArea = new JTextArea();
    JPanel upperPanel = new JPanel();
    JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,upperPanel,new JScrollPane(textArea));

    public Ironmantis(){
        textArea.setEditable(false);
        textArea.append("Operating system: "+System.getProperty("os.name")+"\n");
        textArea.append("Operating System version: " +System.getProperty("os.version")+"\n");
        textArea.append("Operating system architecture: "+ System.getProperty("os.arch")+"\n");
        textArea.append("Java version: "+ System.getProperty("java.version")+"\n");
        textArea.append("Java vendor: "+ System.getProperty("java.vendor")+"\n");
        textArea.append("Java vendor URL: "+ System.getProperty("java.vendor.url")+"\n");
        upperPanel.setPreferredSize(new Dimension(800,400));
        upperPanel.setBackground(Color.CYAN);
        splitPane.setPreferredSize(new Dimension(800,600));
        add(splitPane);
    }

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }

        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                Ironmantis i = new Ironmantis();
                i.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                i.pack();
                i.setVisible(true);
            }
        });

    }

}

通过在JSplitPane 上添加您的JPanelJTextArea,您的JTextArea 将扮演某种控制台的角色,如果我理解正确,这就是您的问题的目标。

【讨论】:

  • 非常有趣。让我问这个——我已经有了边框布局的元素,因为面板是不同的类文件。如何获得borderlayouta 的面板,以便将其添加到JSplitPane?我正在尝试所有解决方案,看看什么最适合....
  • 我尝试了您的解决方案,但顶部的 GUI 看起来不像我在原始问题中所描绘的那样。这是我的代码:
  • 到目前为止——这对我有用。谢谢大家的指点!
  • 抱歉,我无法立即回复您。我很高兴你找到了解决方案! :)
【解决方案2】:

使用border layout
将现有的 GUI 添加到 panel 并将其添加到 framecenterTextAreasouthborder layout 上。

一个代码sn-p:

frame.setLayout(new BorderLayout());
frame.add(BorderLayout.CENTER, panel);  //panel== your existing GUI
frame.add(BorderLayout.SOUTH, textArea);  //new TextArea

【讨论】:

  • @Muhammed Faisal:感谢您的建议。我还有一些学习要做......原谅我,因为我还是一个 Java 新手
  • @Muhammed Faisal:感谢代码 sn-ps ......这些真的帮了我很多忙。
【解决方案3】:

如果我明白了,您想在点击运行按钮时在整个内容下方添加一个 TextArea。

我建议使用 2 个面板。将您已有的所有内容放在一个面板中(此面板将具有borderLayout),然后在其下方放置另一个面板,当您点击“运行”按钮时,您可以在其中以编程方式添加 JtextArea。

编辑
比如:

Window
|
|--- Panel  (borderLayout)
|      | --- (things you already have)
|
|--- Panel 2
     | ---- (JTextArea, added later by code)

【讨论】:

  • 感谢您的回答。我已经有了带有面板元素的 BorderLayout。我是否需要在面板中设置它(顺便说一下,我该怎么做??)?然后添加另一个具有 JTextArea 的面板??
  • 您的窗口将有两个面板,一个在顶部,另一个在底部。最上面的将有borderLayout 和你在这里展示的东西。另一个将具有 JTextArea(稍后由按钮侦听器中的代码添加)。
猜你喜欢
  • 2015-06-29
  • 2012-06-29
  • 2014-05-23
  • 2021-03-14
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 2022-01-08
  • 2012-11-07
相关资源
最近更新 更多