Java 按钮小按钮

Java 按钮小按钮,java,swing,layout,jbutton,border-layout,Java,Swing,Layout,Jbutton,Border Layout,我正在写一个swing程序。但问题是我想要的JButton是小的。它应该由我来决定它的高度和宽度,但下面的代码创建了一个长的水平按钮 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SwingExample { //Create the GUI and show it. For thread safety, this method should be

我正在写一个swing程序。但问题是我想要的JButton是小的。它应该由我来决定它的高度和宽度,但下面的代码创建了一个长的水平按钮

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

public class SwingExample 
{
         //Create the GUI and show it. For thread safety, this method should be
        //invoked from the event-dispatching thread

        private static void createAndShowGUI()
        {
            //create and setup the window
            JFrame frame=new JFrame("Swing Demo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            //Set the size of the window
            frame.setPreferredSize(new Dimension(300,300));            


            //Centre the window on the screen
            WinUtilities wu=new WinUtilities();
            wu.centerWindow(frame);

            //Create a panel
            JPanel panel=new JPanel(new BorderLayout());

            //Create three buttons

                //Button1
                    JButton But1=new JButton("Add");
                    But1.setText("Add Data");
                    But1.setSize(new Dimension(10,20)); //Using it has no effect
                    But1.setMnemonic('A');
                    But1.setMargin(new Insets(12,7,20,10)); //Using it has no effect
                    But1.setBorder(null); //Using it has no effect
                    panel.add(But1,BorderLayout.WEST);

                //Button2
                    JButton But2=new JButton("Edit");
                    But2.setText("Edit Data");
                    But2.setMnemonic(KeyEvent.VK_E);
                    But2.setPreferredSize(new Dimension(5,5));

                    panel.add(But2,BorderLayout.CENTER);

               //Button3
                    JButton But3=new JButton("Display");
                    But3.setText("Display Data");
                    But3.setMnemonic(KeyEvent.VK_D);
                    But3.setPreferredSize(new Dimension(5,5));
                    panel.add(But3,BorderLayout.EAST);


            //Set window characteristics
            frame.setContentPane(panel);
            //frame.add(panel);
            frame.pack();



            //Display the window
            frame.setVisible(true);
        }

        public static void main(String args[])
        {
            //Schedule a job for the event dispatching thread

            //creating and showing this application's GUI
            javax.swing.SwingUtilities.invokeLater(new Runnable()
            {
                public void run()
                {
                    createAndShowGUI();
                }
            });

        }
}

class WinUtilities
{
    public void centerWindow(JFrame frm)
    {
        frm.setLocationRelativeTo(null);
    }
}
例如,请提供帮助

暗示

  • JPanel
    已在API
    FlowLayout
    中实现(非常接受
    PreferredSize

  • 那么
    BoderLayout
    可能是错误的
    LayoutManager

  • 或者使用
    GridLayout
    (那么所有
    JButtons
    将根据最大的项目具有相同的大小)

代码

比如说

暗示

  • JPanel
    已在API
    FlowLayout
    中实现(非常接受
    PreferredSize

  • 那么
    BoderLayout
    可能是错误的
    LayoutManager

  • 或者使用
    GridLayout
    (那么所有
    JButtons
    将根据最大的项目具有相同的大小)

代码


按钮很大,因为:

  • 您已将框架的首选尺寸设置为300x300
  • 您已将内容的布局设置为BorderLayout
  • 钮扣被放大以适应如此大的框架
只需删除frame.setPreferredSize(),按钮就会变小(通过调用frame.pack()方法,框架大小将由内部组件的首选大小决定)

顺便说一下:

  • 但是1.设置大小(…);被忽略-您应该始终调用:setMinimumSize/setMaximumSize/setPreferredSize。相反,布局根据约束确定大小
  • 不太可能显示文本:“编辑数据”、“添加数据”,在大小为5x5的首选按钮上,考虑使用图标或使按钮更大。
按钮很大,因为:

  • 您已将框架的首选尺寸设置为300x300
  • 您已将内容的布局设置为BorderLayout
  • 钮扣被放大以适应如此大的框架
只需删除frame.setPreferredSize(),按钮就会变小(通过调用frame.pack()方法,框架大小将由内部组件的首选大小决定)

顺便说一下:

  • 但是1.设置大小(…);被忽略-您应该始终调用:setMinimumSize/setMaximumSize/setPreferredSize。相反,布局根据约束确定大小
  • 不太可能显示文本:“编辑数据”、“添加数据”,在大小为5x5的首选按钮上,考虑使用图标或使按钮更大。
只需使用适当的
LayoutManager
BorderLayout
不适合您的需要)。查看将立即显示合适的候选者,例如
FlowLayout
,只需使用合适的
LayoutManager
BorderLayout
不适合您的需要)。查看将立即显示合适的候选项,例如
FlowLayout
?@trashgood不知道这一点。还在考虑如何根据图形设计(严格的尺寸)而不是布局管理器来布局组件,但不要使其超过首选尺寸。?@trashgood不知道这一点。仍然在考虑如何根据图形设计(严格的尺寸)而不是布局管理器来布局组件,但不要使其超过首选尺寸。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SwingExample {

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("Swing Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        JButton but1 = new JButton("Add");
        but1.setText("Add Data");
        but1.setMnemonic('A');
        but1.setBorderPainted(false);
        but1.setBackground(Color.red);
        but1.setBorder(null);
        but1.setFocusable(false);
        but1.setMargin(new Insets(0, 0, 0, 0));
        //but1.setContentAreaFilled(false);
        panel.add(but1);
        JButton but2 = new JButton("Edit");
        but2.setText("Edit Data");
        but2.setMnemonic(KeyEvent.VK_E);
        panel.add(but2);
        JButton but3 = new JButton("Display");
        but3.setText("Display Data");
        but3.setMnemonic(KeyEvent.VK_D);
        panel.add(but3);
        frame.add(panel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String args[]) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                createAndShowGUI();
            }
        });
    }
}