Java 屏幕键盘JButton与文本大小完全匹配

Java 屏幕键盘JButton与文本大小完全匹配,java,swing,jbutton,layout-manager,on-screen-keyboard,Java,Swing,Jbutton,Layout Manager,On Screen Keyboard,我在屏幕上写了这个键盘,它应该显示一个键盘。 我的问题是,我希望jbutton适合标签的大小,而不是为所有jbutton设置固定大小。 例如,键盘上的数字:“1,2,3…”应该是小的jbutton,按键“backspace”“tab”等。。。应更大(适合其标签的大小) 这是我写的代码: package Q2; import java.awt.*; import javax.swing.*; public class MainPanel extends JPanel{ private

我在屏幕上写了这个键盘,它应该显示一个键盘。 我的问题是,我希望jbutton适合标签的大小,而不是为所有jbutton设置固定大小。 例如,键盘上的数字:“1,2,3…”应该是小的jbutton,按键“backspace”“tab”等。。。应更大(适合其标签的大小)

这是我写的代码:

package Q2;
import java.awt.*;

import javax.swing.*;

public class MainPanel extends JPanel{

    private JButton[][] button;
    private JPanel[] panel;                                                     //Array of panels for each buttons line
    private JPanel parent;
    private static final String[][] key = {
        {"`","1","2","3","4","5","6","7","8","9","0","-","+","Backspace"},
        {"Tab","Q","W","E","R","T","Y","U","I","O","P","[","]"},
        {"Caps","A","S","D","F","G","H","J","K","L",";","'","\\","Enter"},
        {"Shif","Z","X","C","V","B","N","M",",",".","?","/"},
        {"                  ",",","<","v",">"}
    };

    //Constructor for main Panel
    public MainPanel(){
        super();
        setLayout(new BorderLayout());
        TextField textField= new TextField(20);
        Font font1 = new Font("david", Font.BOLD, 22);
        textField.setFont(font1);
        add(textField,BorderLayout.CENTER);

        //initialize the parent panel and array of 5 panels and the buttons array
        parent = new JPanel();
        parent.setLayout(new GridLayout(0,1));
        panel = new JPanel[5];
        button = new JButton[20][20];

        for (int row = 0; row<key.length; row++){
            panel[row] = new JPanel();
            for (int column = 0; column<key[row].length; column++){
                button[row][column] = new JButton(key[row][column]);
                button[row][column].setPreferredSize(new Dimension(key[row][column].length()+80,30));
                button[row][column].putClientProperty("row", row);
                button[row][column].putClientProperty("column", column);
                button[row][column].putClientProperty("key", key[row][column]);
                //button[row][column].addActionListener(new MyActionListener());
                panel[row].add(button[row][column]);
            }
            parent.add(panel[row]);
        }
        add(parent,BorderLayout.SOUTH);


    }
    /*
    //panel for line 1 of keyboard buttons - numbers
    protected JComponent getPanelLine1(){
        JPanel panel1 = new JPanel();
        for (int i=0; i<10; i++){

        }
    }

    //panel for line 1 of keyboard buttons - Q-P
    protected JComponent getPanelLine2(){

    }

    //panel for line 1 of keyboard buttons - A-L
    protected JComponent getPanelLine3(){

    }![enter image description here][1]

    //panel for line 1 of keyboard buttons - Z-M    
    protected JComponent getPanelLine4(){

    }

    //panel for line 1 of keyboard buttons - space and arrows
    protected JComponent getPanelLine5(){

    }*/
}
Q2包;
导入java.awt.*;
导入javax.swing.*;
公共类主面板扩展了JPanel{
专用JButton[]]按钮;
私有JPanel[]面板;//每个按钮行的面板数组
私人JPanel家长;
私有静态最终字符串[][]密钥={
{“`”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“0”,“-”,“+”,“Backspace”},
{“Tab”,“Q”,“W”,“E”,“R”,“T”,“Y”,“U”,“I”,“O”,“P”,“[”,“].”,
{“Caps”、“A”、“S”、“D”、“F”、“G”、“H”、“J”、“K”、“L”、“;”、“'”、“\\”、“Enter”},
{“Shif”,“Z”,“X”,“C”,“V”,“B”,“N”,“M”,“N”,“M”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N”,“N,
{"                  ",",",""}
};
//主面板的构造
公共主面板(){
超级();
setLayout(新的BorderLayout());
TextField TextField=新的TextField(20);
Font font1=新字体(“david”,Font.BOLD,22);
textField.setFont(font1);
添加(textField,BorderLayout.CENTER);
//初始化父面板和5个面板的阵列以及按钮阵列
父项=新的JPanel();
setLayout(新的GridLayout(0,1));
面板=新JPanel[5];
按钮=新的JButton[20][20];
对于所讨论的(int row=0;row,不要设置首选大小

// button[row][column].setPreferredSize(new Dimension(key[row][column].length()+80,30));
取而代之的是设定利润率

button[row][column].setMargin(new Insets(10, 20, 10, 20));
                       // Insets ( top, left, bottom, right )
和/或设置字体大小

Font font = button[row][column].getFont();
String family = font.getFamily();
int style = font.getStyle();
button[row][column].setFont(new Font(family, style, 24));
您可能不希望每次迭代都创建新字体,但它只是向您展示如何从按钮中获取默认值


考虑到面板中包含的文本的大小,执行上述任一操作都会相应地增加面板的首选大小

不要设置按钮的首选大小,你应该是好的。是的,但是它在屏幕上看起来非常小……使用较大的字体大小和/或设置按钮的边距以增加s使变大。