我在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中)。
答案 0 :(得分:2)
我认为你使用null来得到一个"把它放在哪里?#34;?然后使用FlowLayout
frame.setLayout(new FlowLayout());
那应该解决它:)
答案 1 :(得分:2)
有人可以告知为什么会这样吗?
使用null
布局而不是调用pack()
。
我编辑到问题中的图像是在我将setUndecorated(true)
的注释注释掉并将其拖得更大之后作为GUI的屏幕截图获得的。这样做会导致JRE验证组件结构(pack()
会做什么),从而使组件出现。
正如我在评论中提到的那样:
..一个更好的问题是“如何布局这个GUI?”(只要你提供尝试)
这引出了我的第一个评论。 (现在是更长的形式)
Java GUI可能必须在许多平台上工作,在不同的屏幕分辨率和使用不同的PLAF。因此,它们不利于组件的精确放置。要组织强大的GUI组件,而是使用布局管理器,或combinations of them 1 ,以及布局填充和& white space 2 的边框。
回到:
(只要您提供尝试)
查看这两个示例以了解它们是如何工作的,然后尝试将一些布局和填充结合起来创建一个框架,然后可以将其打包以减小到自然尺寸。
小费JTextArea
。建议列x行的大小与Font
大小相结合。
答案 2 :(得分:1)
只需从第46行的上述代码中删除/注释此行。
// frame.getContentPane().setLayout(null);
应该可以正常工作..
答案 3 :(得分:1)
替换
frame.getContentPane().setLayout(null);
与
frame.getContentPane().setLayout(new BorderLayout());
祝你好运。
修改:为了将来参考,要确定在您的案例中应使用哪个LayoutManager
,您应该参考此Visual Guide to LayoutManagers。
答案 4 :(得分:1)
1:你永远不应该调用setLayout(null)。 2:尝试使用frame.validate()来布局包含布局的组件。
答案 5 :(得分:0)
也许你应该替换:
frame.getContentPane().add(panel);
通过
frame.setContentPane(panel);
希望有所帮助