我的键盘布局空间按钮大小不会调整 [英] Space button size on my layout keyboard won't resize
问题描述
我工作的一个打字应用程序,它包括一个键盘,但我发现有点难以重新大小的空间按钮,使它比其他按钮更宽。这是我展示和组织我的布局方式..
I am working on a typing app which includes the a keyboard but I have found a bit hard to re-size the space button to make it wider than the other buttons.. This is the way I am displaying and organizing my layout..
我可以调整整个按钮,但它不是我想要的..整点是要调整只是空格键..:)
I can resize the whole buttons but its NOT what I want.. the whole point is to be resize just the space bar.. :)
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Arrays;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class example extends JFrame
{
//Individual keyboard rows
String firstRow[] = {"~","1","2","3","4","5","6","7","8","9","0","-","+","BackSpace"};
String secondRow[] = {"Tab","Q","W","E","R","T","Y","U","I","O","P","[","]","\\"};
String thirdRow[] = {"Caps","A","S","D","F","G","H","J","K","L",":","\"","Enter"};
String fourthRow[] = {"Shift","Z","X","C","V","B","N","M",",",".","?"," ^" };
String fifthRow[]={" " ,"<" ,"v",">" };
String strText = "";
//all keys without shift key press
String noShift="`1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./";
//special characters on keyboard that has to be addressed during key press
String specialChars ="~-+[]\\;',.?";
//Jbuttons corresponding to each individual rows
JButton first[];
JButton second[];
JButton third[];
JButton fourth[];
JButton fifth[];
//Driver main method to start the application
public static void main(String[] args) {
//launch typing tutor
new example().setVisible(true);
}
// No argument constructor to create frame
public example()
{
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//set size of the content pane ie frame
this.getContentPane().setPreferredSize(new Dimension(1200,275));
initWidgets();
}
// Method to initialize frame component
private void initWidgets()
{
//set the layout and place component in place and pack it
setLayout(new BorderLayout());
//Various panel for the layout
JPanel jpNorth = new JPanel();
JPanel jpCenter = new JPanel();
JPanel jpKeyboard = new JPanel();
JPanel jpNote = new JPanel();
add( jpNorth, BorderLayout.NORTH);
add( jpNote);
add( jpCenter, BorderLayout.CENTER);
add(jpKeyboard, BorderLayout.SOUTH);
//layout for keyboard
jpKeyboard.setLayout(new GridLayout(5,1));
//pack the components
pack();
//paint first keyboard row and add it to the keyboard
first = new JButton[firstRow.length];
//get the panel for the row
JPanel p = new JPanel(new GridLayout(1, firstRow.length));
for(int i = 0; i < firstRow.length; ++i)
{
JButton b= new JButton(firstRow[i]);
b.setPreferredSize(new Dimension(100,50));
first[i] = b;
p.add(first[i]);
}
jpKeyboard.add(p);
//paint second keyboard row and add it to the keyboard
second = new JButton[secondRow.length];
//get the panel for the row
p = new JPanel(new GridLayout(1, secondRow.length));
for(int i = 0; i < secondRow.length; ++i)
{
second[i] = new JButton(secondRow[i]);
p.add(second[i]);
}
jpKeyboard.add(p);
//paint third keyboard row and add it to the keyboard
third = new JButton[thirdRow.length];
//get the panel for the row
p = new JPanel(new GridLayout(1, thirdRow.length));
for(int i = 0; i < thirdRow.length; ++i)
{
third[i] = new JButton(thirdRow[i]);
p.add(third[i]);
}
jpKeyboard.add(p);
//paint fourth keyboard row and add it to the keyboard
fourth = new JButton[fourthRow.length];
//get the panel for the row
p = new JPanel(new GridLayout(1, fourthRow.length));
for(int i = 0; i < fourthRow.length; ++i)
{
fourth[i] = new JButton(fourthRow[i]);
p.add(fourth[i]);
if(i==fourthRow.length-2)
p.add(new JPanel());
}
p.add(new JPanel());
jpKeyboard.add(p);
//paint the fifth row
fifth = new JButton[fifthRow.length];
//get the panel for the row
p = new JPanel(new GridLayout(1, fifthRow.length));
//put empty panel for layout adjustments
for(int i = 0; i < 1; ++i)
{
JPanel spacePanel = new JPanel();
p.add(spacePanel);
}
//draw the buttons
for(int i = 0; i < fifthRow.length; ++i)
{
if(i==1) //space bar panel
{
JButton b = new JButton(fifthRow[i]);
b.setPreferredSize(new Dimension(400,10));
b.setBounds(10, 10, 600, 100);
fifth[i]=b;
//add empty panels for layout
p.add(new JPanel());p.add(new JPanel());p.add(new JPanel());p.add(new JPanel());p.add(new JPanel());p.add(new JPanel());p.add(new JPanel());p.add(new JPanel());
}
else
{
fifth[i]=new JButton(fifthRow[i]);
}
if(i==0) //first black panel
{
//place a black panel at first
JPanel spacePanel = new JPanel();
p.add(spacePanel);
}
p.add(fifth[i]);
}
jpKeyboard.add(p);
} //end of initWidgets
}//end of class
好吧,如果任何你们可以走我走过我真的会AP preciate它,如果你们需要的任何澄清或更多信息请让我知道.. :)
Well, if any of you guys can walk me through I will really appreciate it and if you guys need any clarification or more info please just let me know.. :)
推荐答案
什么包()
确实是包了架,使用组件的preferred大小。你在做什么是包()
ING的前的添加组件,并设置其preferred大小,所以在包()
是微不足道的号召后添加(以preferred尺寸方面的组件,因此包()
帧的在的添加所有组件,并设置其preferred大小。
What pack()
does is pack the frame, using the preferred sizes of the components. What you are doing is pack()
ing before add the components and setting their preferred sizes, so the pack()
is insignificant to the components added after the call (in terms of preferred size. So pack()
the frame after you add all the components and set their preferred sizes.
您需要考虑的另一件事是,网格布局
的不会的尊重组件的preferred大小。这实际上使他们所有的大小相同。
Another thing you need to consider is that GridLayout
will not respect the preferred size of the components. It will actually make them all the same size.
请参阅 来看看哪些布局管理器的将会的尊重preferred大小。并相应地调整你的code。我想寻找到一个的GridBagLayout
作为MadProgrammer建议,这样你可以只使用一个布局管理器。这是一个有点棘手,如果你与它没有任何经验。另一种选择就是坚持使用默认的的FlowLayout
您已经完成了的JPanel
和巢板。
See here to see which layout managers will respect preferred sizes. And restructure your code accordingly. I'd look into a GridBagLayout
as MadProgrammer suggest, that way you can just use one layout manager. It's a little tricky if you have no experience with it. Another option is just to stick with the default FlowLayout
of the JPanel
and nest panels as you have done.
另请参见铺出的组件中的容器了解有关布局经理提供热他们的工作。
Also see Laying out Components Within a Container to learn about the layout mangers available and hot they work.
这篇关于我的键盘布局空间按钮大小不会调整的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!