java - swing - 不听边界的组件

时间:2014-08-23 21:47:51

标签: java swing components layout-manager

我正在尝试创建一个框架,当我添加一些组件时,他们不会听我给他们的尺寸或位置 - 每当我调整框架大小时,组件就会粘在一起,一个又一个。另外,我有一个可滚动的文本区域,它取了写入文本的长度和宽度。另外,如果我没有调整框架的大小,则组件不会显示。

我的代码:

public static void main(String[] args){
    new Main();
}
private void loadLabel(){
    label.setBounds(0,0,269,20);
    //Setting the icon, not relevant to the code.
    panel.add(label);
}
private void loadInput(){
    input.setBounds(0,20,300,60);
    JScrollPane scroll = new JScrollPane (input);
    scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    scroll.setVisible(true);
    scroll.setBounds(50,20,300,60);
    panel.add(scroll);
}

private JPanel panel = new JPanel();
private JLabel label = new JLabel();
private JTextArea input = new JTextArea("Enter message                                                         ");
public Main() {
    super("Frame");
    setLocationRelativeTo(null);
    setSize(300, 400);
    setContentPane(panel);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    loadLabel();
    loadInput();

}

提前致谢!

2 个答案:

答案 0 :(得分:0)

像这样写

loadLabel();
loadInput();

调用setVisible(真); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

加载内容然后使其显示为真

答案 1 :(得分:0)

您不应该使用.setBounds(,,,)来安排您的组件,而是安排您的组件 使用布局的组件( http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html )。 另外,您还没有将标签设置为文本或图标,因此很难正确看到这些组件。在这里,我使用BoxLayout垂直管理您的组件,并将EAST替换为setContentPane(panel);以将其放在框架的getContentPane().add(panel,BorderLayout.EAST);侧,以帮助我们查看您的组件正确。

import java.awt.*;
import javax.swing.*; 

public class Main extends JFrame {
   public static void main(String[] args){
    new Main();
}
private void loadLabel(){
    label.setBounds(0,0,269,20);
    //Setting the icon, not relevant to the code.
    panel.add(label);
}
private void loadInput(){
    input.setBounds(0,20,300,60);
    JScrollPane scroll = new JScrollPane (input);
    scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    scroll.setVisible(true);
    scroll.setBounds(50,20,300,60);
    panel.add(scroll);
}

private JPanel panel = new JPanel();
private JLabel label = new JLabel("Your Label");
private JTextArea input = new JTextArea("Enter message                                                         ");
public Main() {
    super("Frame");
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

    setLocationRelativeTo(null);
    setSize(300, 400);
    getContentPane().add(panel,BorderLayout.EAST);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    loadLabel();
    loadInput();

}
 }

enter image description here