![](/img/trans.png)
[英]How can i fix the Java Typing Tutor program's KeyBoard button's background Color in Class KeyBoard given below?
[英]How to show on screen keyboard using swing in java for typing tutor? Which layout serves the best?
到目前为止,我的代码如下:
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;
import java.awt.GridLayout;
import java.awt.FlowLayout;
public class GUI extends JFrame
{
private JButton button;
private JPanel panel;
private static final String[][] key = { { "Esc", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "PrtSc", "Insert", "Delete", "Home", "End", "PgUp", "PgDn"}, { "3\n2", "&", "é", "\"", "'", "(", "§", "è", "!", "ç", "à", ")", "-", "BkSpc", "NumLock", "/", "*", "-" }, { "Tab", "A", "Z", "E", "R", "T", "Y", "U", "I", "O", "P", "^", "$", "Enter", "7", "8", "9", "+" }, { "ShiftLock", "Q", "S", "D", "F", "G", "H", "J", "K", "L", "M", "ù", "µ", "4", "5", "6" }, { "Shift", "<", "W", "X", "C", "V", "B", "N", ",", ";", ":", "=", "Shift", "Up", "1", "2", "3", "Enter" }, { "Ctrl", "Fn", "Win", "Alt", "Space", "AltGr", "Context", "Ctrl", "Left", "Down", "Right", "0", "." } };
public GUI()
{
super( "Typing Tutor" );
setLayout( new GridLayout( key.length, 0 ) );
for ( int row = 0; row < key.length; row++)
{
panel = new JPanel();
panel.setLayout(new FlowLayout());
for ( int column = 0; column < key[ row ].length; column++ )
{
button = new JButton( key[ row ][ column ] );
panel.add( button );
}
add( panel );
}
}
}
================================================== ================
import javax.swing.JFrame;
public class GUITest extends JFrame
{
public static void main(String[] args)
{
GUI gui = new GUI();
gui.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
gui.setSize( 1600, 250 );
gui.setVisible( true );
}
}
它在正确的行中显示键,但不完全正确。 例如,输入按钮不是矩形,而是一行。 有什么建议可以改善吗?
PS:我想做的是创建一个打字指导,充当普通的文本编辑器,或者更好的一个程序,它可以在其他程序之间传递击键,同时我仍然可以在屏幕上看到可视键盘以供参考(和反馈)。 只是为了确保我不必看真正的键盘,并且可以随时练习触摸打字。 如果您有更好的建议/替代方法,或者知道是否可行,请告诉我。
private JPanel[] panel;
数组private JPanel[] panel;
和private JButton[][] button;
没有被激起
KeyBoard指定的不是很好,必须在其中放置一些JButton,这些按钮不可见,但会占用或拆分布局到三个分离的JPanel(另加一个ESC-F12-暂停/中断)
删除private JPanel[] panel;
将JButtons直接放到JPanel上是没有用的,这使我很喜欢Borders,但是随后您将需要创建和分离与private JButton[][] button;
具有相同数量成员的数组private JButton[][] button;
,在那里您可以将Border作为四个成员的数字(i,i,i,i)保留为子数组
快速修复,仅需进行最后两点中描述的微小更改
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GUI extends JFrame {
private JFrame frame = new JFrame("Typing Tutor");
private JPanel parent = new JPanel(new GridLayout(0, 1));
private JPanel[] panel;
private JButton[][] button;
private static final String[][] key = {
{"Esc", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9",
"F10", "F11", "F12", "PrtSc", "Insert", "Delete", "Home",
"End", "PgUp", "PgDn"}, {"3\n2", "&", "é", "\"", "'", "(",
"§", "è", "!", "ç", "à", ")", "-", "BkSpc", "NumLock", "/",
"*", "-"}, {"Tab", "A", "Z", "E", "R", "T", "Y", "U", "I",
"O", "P", "^", "$", "Enter", "7", "8", "9", "+"}, {"ShiftLock",
"Q", "S", "D", "F", "G", "H", "J", "K", "L", "M", "ù", "µ",
"4", "5", "6"}, {"Shift", "<", "W", "X", "C", "V", "B",
"N", ",", ";", ":", "=", "Shift", "Up", "1", "2", "3", "Enter"},
{"Ctrl", "Fn", "Win", "Alt", "Space", "AltGr", "Context",
"Ctrl", "Left", "Down", "Right", "0", "."}};
public GUI() {
super("Typing Tutor");
panel = new JPanel[6];
for (int row = 0; row < key.length; row++) {
panel[row] = new JPanel();
button = new JButton[20][20];
for (int column = 0; column < key[row].length; column++) {
button[row][column] = new JButton(key[row][column]);
button[row][column].putClientProperty("column", column);
button[row][column].putClientProperty("row", row);
button[row][column].putClientProperty("key", key[row][column]);
button[row][column].addActionListener(new MyActionListener());
panel[row].add(button[row][column]);
}
parent.add(panel[row]);
}
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(parent);
pack();
setVisible(true);
}
public class MyActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JButton btn = (JButton) e.getSource();
System.out.println("clicked column --> " + btn.getClientProperty("column")
+ ", row --> " + btn.getClientProperty("row")
+ ", Key Typed --> " + btn.getClientProperty("key"));
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
GUI guI = new GUI();
}
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.