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 JPanel添加到JFrame时不显示_Java_Swing_Jpanel_Layout Manager_Null Layout Manager - Fatal编程技术网

Java JPanel添加到JFrame时不显示

Java JPanel添加到JFrame时不显示,java,swing,jpanel,layout-manager,null-layout-manager,Java,Swing,Jpanel,Layout Manager,Null Layout Manager,我正在用java创建一个GUI。目前我有一个空的JFrame,正在尝试向它添加一个JPanel。JPanel包含按钮、文本等。但是这些都没有显示。我的代码如下: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class memoDisplayUI { JFrame frame = new JFrame(); JPanel panel = new JPanel(); JTextArea

我正在用java创建一个GUI。目前我有一个空的JFrame,正在尝试向它添加一个JPanel。JPanel包含按钮、文本等。但是这些都没有显示。我的代码如下:

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;


public class memoDisplayUI { 


JFrame frame = new JFrame();
JPanel panel = new JPanel();
JTextArea jTextBox = new JTextArea();
JScrollPane scroll = new JScrollPane();

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                memoDisplayUI frame = new memoDisplayUI();
                frame.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
public memoDisplayUI() {
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    
    frame.getContentPane().setBackground(new Color(255, 255, 255));
    frame.getContentPane().setLayout(null);
    frame.setBounds(100, 100, 270, 400);
    frame.setUndecorated(true); //REMOVES MENU BAR
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    JLabel lblMemos = new JLabel("MEMOS");
    lblMemos.setForeground(new Color(100, 149, 237));
    lblMemos.setFont(new Font("Moire", Font.BOLD, 30));
    lblMemos.setBounds(16, 16, 234, 37);
    panel.add(lblMemos);
    
    JButton button = new JButton("");
    button.setBackground(new Color(100, 149, 237));
    button.setBounds(7, 350, 40, 40);
    panel.add(button);
    button.setIcon(new ImageIcon("back.png"));
    
    JButton button_1 = new JButton("");
    button_1.setBackground(new Color(100, 149, 237));
    button_1.setBounds(113, 350, 40, 40);
    panel.add(button_1);
    button_1.setIcon(new ImageIcon("Edit.png"));
    
    JButton button_2 = new JButton("");
    button_2.setBackground(new Color(100, 149, 237));
    button_2.setBounds(220, 350, 40, 40);
    panel.add(button_2);
    button_2.setIcon(new ImageIcon("memo.png"));
    
    JButton btnExit = new JButton("");
    btnExit.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            System.exit(0);
        }
    });
    btnExit.setBorder(null);
    btnExit.setIcon(new ImageIcon("Exit.jpg"));
    btnExit.setBounds(216, 19, 40, 40);
    panel.add(btnExit);
    
    jTextBox = new JTextArea();
    scroll.setViewportView(jTextBox); // add scroll panel
    jTextBox.setTabSize(4);
    jTextBox.setLineWrap(true);
    jTextBox.setBackground(new Color(192, 192, 192));
    jTextBox.setBounds(8, 60, 255, 286);
    panel.add(jTextBox);
    
    frame.getContentPane().add(panel);
}
}
有人能告诉我为什么会这样吗

非常感谢:)

编辑 从对代码的一些调整来看,这似乎是所需的布局(在不可调整大小的GUI中)


只需从上述第46行代码中删除/注释这一行即可

// frame.getContentPane().setLayout(null);

它应该可以正常工作。

只需从上述代码第46行中删除/注释这一行即可

// frame.getContentPane().setLayout(null);
它应该可以正常工作。

更换

frame.getContentPane().setLayout(null);

祝你好运

编辑:为了将来的参考,要决定在您的案例中应该使用哪个
LayoutManager
,您应该参考这个。

替换

frame.getContentPane().setLayout(null);

祝你好运


编辑:为了将来的参考,要决定在您的案例中应该使用哪个
LayoutManager
,您应该参考这个。

我想您使用null来获得一个“放在合适的地方”?然后使用FlowLayout

frame.setLayout(new FlowLayout());

这应该可以解决它:)

我想你用null来得到一个“放在合适的地方”?然后使用FlowLayout

frame.setLayout(new FlowLayout());

这应该可以解决它:)

1:永远不要调用setLayout(null)。
2:尝试frame.validate()以布局组件。

1:永远不要调用setLayout(null)。
2:尝试frame.validate()以您的布局布局组件。

也许您应该更换:

frame.getContentPane().add(panel);


希望有帮助

也许你应该更换:

frame.getContentPane().add(panel);

希望有帮助

有人能告诉我为什么会这样吗

使用
null
布局,不调用
pack()

我在问题中编辑的图像是在注释掉对
setUndercorated(true)
的调用并将其拖大一点后,作为GUI的屏幕截图获得的。这样做会导致JRE验证组件结构(就像
pack()
所做的那样),从而使组件出现


正如我在评论中提到的:

…更好的问题是“如何布局此GUI?”(只要您提供尝试)

这就引出了我的第一个评论。(现在以较长的形式)


javagui可能必须在许多平台上工作,在不同的屏幕分辨率上&使用不同的plaf。因此,它们不利于部件的精确放置。要为健壮的GUI组织组件,请使用布局管理器或1,以及布局填充和边框2




  • 回到这里:

    (只要您提供尝试)

    查看这两个示例,看看它们是如何工作的,然后尝试结合一些布局和填充来创建一个框架,然后可以将其打包以减小到自然大小

    以及
    JTextArea
    的提示。建议在列x行中使用
    Font
    size组合的大小

    有人能告诉我为什么会这样吗

    使用
    null
    布局,不调用
    pack()

    我在问题中编辑的图像是在注释掉对
    setUndercorated(true)
    的调用并将其拖大一点后,作为GUI的屏幕截图获得的。这样做会导致JRE验证组件结构(就像
    pack()
    所做的那样),从而使组件出现


    正如我在评论中提到的:

    …更好的问题是“如何布局此GUI?”(只要您提供尝试)

    这就引出了我的第一个评论。(现在以较长的形式)


    javagui可能必须在许多平台上工作,在不同的屏幕分辨率上&使用不同的plaf。因此,它们不利于部件的精确放置。要为健壮的GUI组织组件,请使用布局管理器或1,以及布局填充和边框2




  • 回到这里:

    (只要您提供尝试)

    查看这两个示例,看看它们是如何工作的,然后尝试结合一些布局和填充来创建一个框架,然后可以将其打包以减小到自然大小


    以及
    JTextArea
    的提示。建议在列x行中加上
    字体
    大小。

    提示:您的组件是添加到框架还是面板中?你的框架怎么了,应该是面板怎么了?也就是说,你真的应该考虑使用一个框架,避免空布局。让布局为您调整大小和放置;)我想你用空来得到一个“合适的地方”?然后使用FlowLayout:)javagui可能必须在许多平台上工作,使用不同的屏幕分辨率&使用不同的plaf。因此,它们不利于部件的精确放置。要为一个健壮的GUI组织组件,可以使用布局管理器,或者与布局填充和边框一起使用。顺便说一句,我在问题中编辑了一个图像。这就是你想要达到的基本布局吗?如果是这样,一个更好的问题是“如何布局此GUI?”(只要您提供尝试)。提示:您的组件是添加到框架还是面板?你的框架怎么了,应该是面板怎么了?也就是说,你真的应该考虑使用一个框架,避免空布局。让布局为您调整大小和放置;)我想你用空来得到一个“合适的地方”?然后使用FlowLayout:)javagui可能必须在许多平台上工作,使用不同的屏幕分辨率&使用不同的plaf。因此,它们不利于部件的精确放置。要为一个健壮的GUI组织组件,可以使用布局管理器,或者与布局填充和边框一起使用。顺便说一句,我在问题中编辑了一个图像。这就是你尝试的基本布局吗