按钮和窗口之间的空间 [英] Space between buttons and window

查看:58
本文介绍了按钮和窗口之间的空间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在这里有此代码,其想法是在主窗口中的文本区域旁边有两个按钮,而这些按钮我尚未添加.在尝试使用GridBagLayout并在过程中扯掉头发后,我决定不使用布局并在不可调整大小的窗口内手动放置按钮.

I have this code right here, and the idea is to have two buttons in a main window alongside a text area, which I have not added yet. After trying to use GridBagLayout and ripping off my hair in the process I decided not to use a layout and manually position buttons inside a non resizable window.

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){           

}

}

但是输出是这样的:

But the output is this:

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

My question is why isn't the space beneath the second button equal to the space above the first button? Shouldn't they both be 100 pixels?

推荐答案

  • 不要不必要地扩展JFrame类.
  • 请勿使用Absolute/Null LayoutManager.使用适当的LayoutManager,其中包括嵌套布局以实现所需的外观.请参阅此处以获得良好的教程:
    • 布局管理器的可视指南
    • 使用布局管理器
      • Don't extend JFrame class unnecessarily.
      • Never use Absolute/Null LayoutManager. Use an appropriate LayoutManager, this includes nesting Layouts to achieve desired look. see here for good tutorials:
        • A Visual Guide to Layout Managers
        • Using Layout Managers
        • 以下是我提出的示例(基本上是您的代码已修复)希望对您有所帮助:

          Here is an example I made (basically your code fixed) hope it helps:

          import java.awt.BorderLayout;
          import java.awt.GridLayout;
          import javax.swing.JButton;
          import javax.swing.JFrame;
          import javax.swing.JMenu;
          import javax.swing.JMenuBar;
          import javax.swing.JMenuItem;
          import javax.swing.JPanel;
          import javax.swing.JTextArea;
          import javax.swing.SwingUtilities;
          
          public class LayoutTest {
          
              private final JMenuBar menubar = new JMenuBar();
              private final JMenu actiuni = new JMenu("Actiuni");
              private final JMenu contact = new JMenu("Contact");
              private final JMenu help = new JMenu("Help");
              private final JMenuItem ntest = new JMenuItem("Nou test");
              private final JMenuItem vizarh = new JMenuItem("Vizualizare arhiva");
              private final JMenuItem datcon = new JMenuItem("Date de contact");
              private final JMenuItem sendmail = new JMenuItem("Trimite e-mail");
              private final JMenuItem instrut = new JMenuItem("Instructiuni de utilizare");
              private final JButton b1 = new JButton("Incepe testul!");
              private final JButton b2 = new JButton("Vezi arhiva!");
              private final JTextArea ta = new JTextArea("Default text", 5, 30);
              //create JFrame instance
              private final JFrame frame = new JFrame();
          
              public LayoutTest() {
                  initComponents();
              }
          
              public static void main(String[] args) {
                  //creat UI on EDT
                  SwingUtilities.invokeLater(new Runnable() {
                      @Override
                      public void run() {
                          new LayoutTest();
                      }
                  });
              }
          
              private void initComponents() {
                  frame.setTitle("Self-Esteem- Fereastra Principala");
                  frame.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);
          
                  frame.setJMenuBar(menubar);
                  JPanel textAreaJPanel = new JPanel();
          
                  //create button panel with GridLayout(2,1) 
                  JPanel buttonJPanel = new JPanel(new GridLayout(2, 1));//new GridLayout(2, 1,10,10) creates gridlayout with horixontal and vertcial spacing of 10
          
                  //add buttons to one panel
                  buttonJPanel.add(b1);
                  buttonJPanel.add(b2);
                  //add text area to textarea jPanel
                  textAreaJPanel.add(ta);
          
                  //add textarea panel to west of content pane (BorderLayout by default)
                  frame.add(textAreaJPanel, BorderLayout.WEST);
          
                  //add button Panel to EAST of JFrame content pane
                  frame.add(buttonJPanel, BorderLayout.EAST);
          
                  frame.pack();
          
                  frame.setResizable(false);
                  frame.setLocationRelativeTo(null);
          
                  frame.setVisible(true);
              }
          }
          

          这篇关于按钮和窗口之间的空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆