按钮和窗口之间的空间

时间:2012-10-23 12:51:36

标签: java swing user-interface layout absolutelayout

我这里有这个代码,想法是在主窗口中有两个按钮和文本区域,我还没有添加。在尝试使用GridBagLayout并在此过程中撕掉我的头发后,我决定不使用布局并在不可调整大小的窗口内手动定位按钮。

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

public class Tema extends JFrame implements ActionListener {

JMenuBar menubar = new JMenuBar();
JMenu actiuni = new JMenu("Actiuni");
JMenu contact = new JMenu("Contact");
JMenu help = new JMenu("Help");
JMenuItem ntest = new JMenuItem("Nou test");
JMenuItem vizarh = new JMenuItem("Vizualizare arhiva");
JMenuItem datcon = new JMenuItem("Date de contact");
JMenuItem sendmail = new JMenuItem("Trimite e-mail");
JMenuItem instrut = new JMenuItem("Instructiuni de utilizare");
JButton b1 = new JButton("Incepe testul!");
JButton b2 = new JButton("Vezi arhiva!");
JTextArea ta = new JTextArea("Default text", 5, 30);

public void common(String s)
{
    setSize(800,450);
    setLocationRelativeTo(null);
    setResizable(false);

    setTitle(s);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    menubar.add(actiuni);
    menubar.add(contact);
    menubar.add(help);
    actiuni.add(ntest);
    actiuni.add(vizarh);
    contact.add(datcon);
    contact.add(sendmail);
    help.add(instrut);

    setJMenuBar(menubar);

}

public Tema()
{
    common("Self-Esteem- Fereastra Principala");
    JPanel cp = new JPanel();
    cp.setLayout(null);


    b1.setBounds(100,100,200,100);
    cp.add(b1);


    b2.setBounds(100,250,200,100);
    cp.add(b2);

    setContentPane(cp);
    setVisible(true);

}

public static void main(String[] args)
{
    Tema x = new Tema();
}


@Override
public void actionPerformed (ActionEvent e){           

}

}

但输出是这样的: enter image description here

我的问题是为什么第二个按钮下方的空间不等于第一个按钮上方的空间?它们不应该都是100像素吗?

2 个答案:

答案 0 :(得分:7)

  • 不要不必要地延长JFrame课程。
  • 切勿使用Absolute / Null LayoutManager。使用适当的LayoutManager,这包括嵌套布局以实现所需的外观。看到这里的好教程:
  • 请勿在{{1​​}}上致电JFrame#setSize(..),而只需在JFrame可见之前致电JFrame#pack()
  • 不要使用JFrame,只需在JFrame#setContentPane(...)实例
  • 上使用add(..)即可
  • 创建Event Dispatch Thread以初始化和更改UI组件
  • 不要为多个组件实现单个JFrame。除非它被其他类或组件访问,否则共享ActionListener。而是使用Anonymous ActionListener

这是我做的一个例子(基本上你的代码已修复)希望它有所帮助:

enter image description here

Action

答案 1 :(得分:-2)

在上面的两个按钮之间的代码空间是50px,如果你使用b2.setBounds(100,300,200,100);然后空间将是100px。试试吧......