Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法获取java swing组件_Java_Swing - Fatal编程技术网

无法获取java swing组件

无法获取java swing组件,java,swing,Java,Swing,我正在使用此代码获取文本区域,但我只获取没有任何文本区域或按钮的框架。您没有设置按钮的大小。它可以位于中间或南部,但您应该声明它的大小。因此,我更喜欢您btn.setBounds(0,0100,20)如果这不起作用,您可以删除BorderLayour.CENTER并设置边界200280您的代码对我有效。我补充了一些你遗漏的东西 首先,您必须通过调用SwingUtilities invokeLater来启动所有Swing应用程序。这样可以确保在(EDT)上定义和执行Swing组件 第二,我最后移动

我正在使用此代码获取文本区域,但我只获取没有任何文本区域或按钮的框架。

您没有设置按钮的大小。它可以位于中间或南部,但您应该声明它的大小。因此,我更喜欢您
btn.setBounds(0,0100,20)
如果这不起作用,您可以删除BorderLayour.CENTER并设置边界200280

您的代码对我有效。我补充了一些你遗漏的东西

首先,您必须通过调用SwingUtilities invokeLater来启动所有Swing应用程序。这样可以确保在(EDT)上定义和执行Swing组件

第二,我最后移动了frame setVisible方法。在使JFrame可见之前,需要完全设置它

以下是修改后的代码:

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import java.awt.BorderLayout;

public class Fram {
    public static void main(String[] args) {
        JTextArea map;
        JButton btn;
        map= new JTextArea();
        btn= new JButton("hello");
        JFrame frame= new JFrame("jarvis");
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600,600);
        frame.setLayout(new BorderLayout());
        frame.add(map, BorderLayout.CENTER);
        frame.add(btn, BorderLayout.SOUTH);
    }
}

你的代码对我来说也很好。 您提到的
您看不到swing组件
我认为您没有看到预期的文本区域的原因是该文本区域占据了边框布局中的完整空间,因此您无法识别是否有文本区域。因此,我在代码中添加了一个JPanel和JscrollPane来改进行为。我还想调用setVisible作为最后一个方法,正如Gilbert提到的,您必须通过调用SwingUtilities invokeLater来启动所有Swing应用程序

import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class Fram implements Runnable {

    @Override
    public void run() {
        JTextArea map;
        JButton btn;
        map = new JTextArea();
        btn = new JButton("hello");
        JFrame frame = new JFrame("jarvis");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 600);
        frame.setLayout(new BorderLayout());
        frame.add(map, BorderLayout.CENTER);
        frame.add(btn, BorderLayout.SOUTH);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Fram());
    }


}
程序的输出是


它甚至不应该编译,因为
按钮应该是
JButton
,但如果您解决了这个问题,它确实会显示一个包含文本区域和按钮的框架。也许你在编辑后忘记重新编译了?没关系,只是打印失败了,但我还是得到了空的框架它对我也有效。解决方法:在添加所有组件后,感谢buddy
frame.setVisible()
。逻辑地考虑一下。为什么要在添加任何内容之前使框架可见。我不明白人们对这个简单的逻辑有什么不明白的地方。人们花了48分钟才最终发现了最明显的场景+1@peeskillet我发现了。我没有指出,因为我知道这无关紧要。@peeskillet:对不起,我刚开始问这个问题。:-)“我很欣赏你的回答,并且对你的回答投了赞成票。”@GilbertLeBlanc@Boann:当我看到peeskillet对问题的回答时,我投了赞成票。是的,系统允许这样做。
package stackOverFlow;

import java.awt.BorderLayout;

public class Frame implements Runnable {
    public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Frame());
    }

    @Override
    public void run() {
        JTextArea map;
        JButton btn;
        JLabel lbl;
        map = new JTextArea(10, 50);
        final JScrollPane scrollPanel = new JScrollPane(map);
        btn = new JButton("hello");
        lbl = new JLabel("Text Area: ");
        final JPanel actionPanel = new JPanel(
                new FlowLayout(FlowLayout.LEADING));
        actionPanel.add(lbl);
        actionPanel.add(scrollPanel);
        final JFrame frame = new JFrame("jarvis");
        frame.setLayout(new BorderLayout());
        frame.add(actionPanel, BorderLayout.CENTER);
        frame.add(btn, BorderLayout.SOUTH);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 600);
        frame.setVisible(true);
    }
}