簡體   English   中英

無法獲取java swing組件

[英]unable to get java swing components

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);
    }
}

我正在使用此代碼來獲取文本區域,但我只獲得沒有任何文本區域或按鈕的框架。

你的代碼對我有用。 我添加了一些你遺漏的東西。

首先,您必須通過調用 SwingUtilities invokeLater 來啟動所有 Swing 應用程序。 這可確保您的 Swing 組件在事件調度線程(EDT) 上定義和執行。

其次,我最后移動了框架 setVisible 方法。 在使其可見之前,您需要完全設置 JFrame。

這是修改后的代碼:

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());
    }


}

你沒有設置按鈕的大小。它可以在中心或南方,但你應該聲明它的大小。 所以我更喜歡你btn.setBounds(0,0,100,20)如果那不起作用你可以刪除 BorderLayour.CENTER 並設置邊界 200,280

你的代碼對我來說也很好。 您提到you can not see swing component我認為您沒有按預期看到文本區域的原因是因為該文本區域占據了邊框布局中的完整空間,因此您無法辨別是否有文本區域。 因此,我在您的代碼中添加了 JPanel 和 JscrollPane 以改進行為。 我還想調用 setVisible 作為最后一個方法,正如 Gilbert 所提到的,您必須通過調用 SwingUtilities invokeLater 來啟動所有 Swing 應用程序。

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);
    }
}

程序的輸出是

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM