- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建以下 GUI:
https://www.dropbox.com/s/ebm057jfevwe532/result.png?dl=0
这是我的代码:
public class TypingTutor extends JFrame{
private JPanel mainPanel;
private JPanel[] keyboardPanel;
private JLabel instructionsLabel;
private JLabel noteLabel;
private JTextArea typingTextArea;
private JButton[] buttonKeysFirstRow;
private JButton[] buttonKeysSecondRow;
private JButton[] buttonKeysThirdRow;
private JButton[] buttonKeysFourthRow;
private JButton[] buttonKeysFifthRow;
//TypingTutor no-argument constructor
public TypingTutor(){
super("Typing Application");
setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
instructionsLabel = new JLabel("Type some text using your keyboard. The keys you press " +
"will be highlighted and the text will be displayed.");
noteLabel = new JLabel("Note: Clicking the buttons with your mouse will not perform any " +
"action.");
add(instructionsLabel);
add(noteLabel);
typingTextArea = new JTextArea();
add(typingTextArea);
//each row represents each row in the keyboard
buttonKeysFirstRow = new JButton[14];
buttonKeysSecondRow = new JButton[13];
buttonKeysThirdRow = new JButton[14];
buttonKeysFourthRow = new JButton[12];
buttonKeysFifthRow = new JButton[4];
initializeKeys(1);
initializeKeys(2);
initializeKeys(3);
initializeKeys(4);
initializeKeys(5);
Box[] keyboard = new Box[5];
for(int i = 0; i < keyboard.length; i++){
keyboard[i] = Box.createHorizontalBox();
switch(i){
case 0:
for(int j = 0; j < buttonKeysFirstRow.length; j++){
keyboard[i].add(buttonKeysFirstRow[j]);
} //end for
break;
case 1:
for(int j = 0; j < buttonKeysSecondRow.length; j++){
keyboard[i].add(buttonKeysSecondRow[j]);
} //end for
break;
case 2:
for(int j = 0; j < buttonKeysThirdRow.length; j++){
keyboard[i].add(buttonKeysThirdRow[j]);
} //end for
break;
case 3:
for(int j = 0; j < buttonKeysFourthRow.length; j++){
keyboard[i].add(buttonKeysFourthRow[j]);
} //end for
break;
case 4:
for(int j = 0; j < buttonKeysFifthRow.length; j++){
keyboard[i].add(buttonKeysFifthRow[j]);
} //end for
break;
} //end switch
add(keyboard[i]);
} //end for
} //end TypingTutor no-argument constructor
//initializes button keys with their values
private void initializeKeys(int keys){
switch(keys){
case 1:
buttonKeysFirstRow[0] = new JButton("|\n°");
buttonKeysFirstRow[1] = new JButton("1");
buttonKeysFirstRow[2] = new JButton("2");
buttonKeysFirstRow[3] = new JButton("3");
buttonKeysFirstRow[4] = new JButton("4");
buttonKeysFirstRow[5] = new JButton("5");
buttonKeysFirstRow[6] = new JButton("6");
buttonKeysFirstRow[7] = new JButton("7");
buttonKeysFirstRow[8] = new JButton("8");
buttonKeysFirstRow[9] = new JButton("9");
buttonKeysFirstRow[10] = new JButton("0");
buttonKeysFirstRow[11] = new JButton("'\n?");
buttonKeysFirstRow[12] = new JButton("¿\n¡");
buttonKeysFirstRow[13] = new JButton("Backspace");
break;
case 2:
buttonKeysSecondRow[0] = new JButton(" Tab ");
buttonKeysSecondRow[1] = new JButton("Q");
buttonKeysSecondRow[2] = new JButton("W");
buttonKeysSecondRow[3] = new JButton("E");
buttonKeysSecondRow[4] = new JButton("R");
buttonKeysSecondRow[5] = new JButton("T");
buttonKeysSecondRow[6] = new JButton("Y");
buttonKeysSecondRow[7] = new JButton("U");
buttonKeysSecondRow[8] = new JButton("I");
buttonKeysSecondRow[9] = new JButton("O");
buttonKeysSecondRow[10] = new JButton("P");
buttonKeysSecondRow[11] = new JButton("´\n¨");
buttonKeysSecondRow[12] = new JButton("+\n*");
break;
case 3:
buttonKeysThirdRow[0] = new JButton(" Caps ");
buttonKeysThirdRow[1] = new JButton("A");
buttonKeysThirdRow[2] = new JButton("S");
buttonKeysThirdRow[3] = new JButton("D");
buttonKeysThirdRow[4] = new JButton("F");
buttonKeysThirdRow[5] = new JButton("G");
buttonKeysThirdRow[6] = new JButton("H");
buttonKeysThirdRow[7] = new JButton("J");
buttonKeysThirdRow[8] = new JButton("K");
buttonKeysThirdRow[9] = new JButton("L");
buttonKeysThirdRow[10] = new JButton("Ñ");
buttonKeysThirdRow[11] = new JButton("{\n[");
buttonKeysThirdRow[12] = new JButton("}\n]");
buttonKeysThirdRow[13] = new JButton(" Enter ");
break;
case 4:
buttonKeysFourthRow[0] = new JButton(" Shift ");
buttonKeysFourthRow[1] = new JButton("<\n>");
buttonKeysFourthRow[2] = new JButton("Z");
buttonKeysFourthRow[3] = new JButton("X");
buttonKeysFourthRow[4] = new JButton("C");
buttonKeysFourthRow[5] = new JButton("V");
buttonKeysFourthRow[6] = new JButton("B");
buttonKeysFourthRow[7] = new JButton("N");
buttonKeysFourthRow[8] = new JButton("M");
buttonKeysFourthRow[9] = new JButton(",\n;");
buttonKeysFourthRow[10] = new JButton(".\n:");
buttonKeysFourthRow[11] = new JButton("^");
break;
case 5:
buttonKeysFifthRow[0] = new JButton("");
buttonKeysFifthRow[1] = new JButton("<");
buttonKeysFifthRow[2] = new JButton("v");
buttonKeysFifthRow[3] = new JButton(">");
buttonKeysFifthRow[0].setMinimumSize(new Dimension(50, 10));
break;
} //end switch
} //end method initializeKeys
} //end class TypingTutor
这是我的结果:
https://www.dropbox.com/s/dx99npirnl0v1wd/sample.png?dl=0
我尝试使用类 javax.swing.Box 并使用 Box.createVerticalBox() 添加一个主框到 JFrame BorderLayout 的中心,然后使用 Box.createHorizontalBox() 添加其他框,我得到了相同的结果,一切正常,直到我在 JTextArea 之后添加 JButtons,之后,JButtons 缩小并且 JLabel 向右对齐。
最佳答案
我对您的代码进行了一些修改以使其可以运行。现在这是打字导师 GUI 的图像。
我将说明文本居中,将打字区域设置为合理的大小,并将打字区域放入滚动 Pane 中。我稍微修复了空格键。
这是可运行的代码。
package com.ggl.testing;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
public class TypingTutor extends JFrame {
private static final long serialVersionUID = -7372491882460254385L;
private JLabel instructionsLabel;
private JLabel noteLabel;
private JTextArea typingTextArea;
private JButton[] buttonKeysFirstRow;
private JButton[] buttonKeysSecondRow;
private JButton[] buttonKeysThirdRow;
private JButton[] buttonKeysFourthRow;
private JButton[] buttonKeysFifthRow;
// TypingTutor no-argument constructor
public TypingTutor() {
super("Typing Application");
setLocationByPlatform(true);
setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
JPanel instructionPanel = new JPanel();
instructionPanel.setLayout(
new BoxLayout(instructionPanel, BoxLayout.PAGE_AXIS));
instructionsLabel = new JLabel(
"Type some text using your keyboard. The keys you press "
+ "will be highlighted and the text will be displayed.");
instructionsLabel.setAlignmentX(JLabel.CENTER_ALIGNMENT);
instructionPanel.add(instructionsLabel);
noteLabel = new JLabel(
"Note: Clicking the buttons with your mouse will not perform any "
+ "action.");
noteLabel.setAlignmentX(JLabel.CENTER_ALIGNMENT);
instructionPanel.add(noteLabel);
add(instructionPanel);
typingTextArea = new JTextArea(10, 60);
typingTextArea.setWrapStyleWord(true);
JScrollPane scrollPane = new JScrollPane(typingTextArea);
add(scrollPane);
// each row represents each row in the keyboard
buttonKeysFirstRow = new JButton[14];
buttonKeysSecondRow = new JButton[13];
buttonKeysThirdRow = new JButton[14];
buttonKeysFourthRow = new JButton[12];
buttonKeysFifthRow = new JButton[4];
initializeKeys(1);
initializeKeys(2);
initializeKeys(3);
initializeKeys(4);
initializeKeys(5);
Box[] keyboard = new Box[5];
for (int i = 0; i < keyboard.length; i++) {
keyboard[i] = Box.createHorizontalBox();
switch (i) {
case 0:
for (int j = 0; j < buttonKeysFirstRow.length; j++) {
keyboard[i].add(buttonKeysFirstRow[j]);
} // end for
break;
case 1:
for (int j = 0; j < buttonKeysSecondRow.length; j++) {
keyboard[i].add(buttonKeysSecondRow[j]);
} // end for
break;
case 2:
for (int j = 0; j < buttonKeysThirdRow.length; j++) {
keyboard[i].add(buttonKeysThirdRow[j]);
} // end for
break;
case 3:
for (int j = 0; j < buttonKeysFourthRow.length; j++) {
keyboard[i].add(buttonKeysFourthRow[j]);
} // end for
break;
case 4:
for (int j = 0; j < buttonKeysFifthRow.length; j++) {
keyboard[i].add(buttonKeysFifthRow[j]);
} // end for
break;
} // end switch
add(keyboard[i]);
} // end for
this.pack();
this.setVisible(true);
} // end TypingTutor no-argument constructor
// initializes button keys with their values
private void initializeKeys(int keys) {
switch (keys) {
case 1:
buttonKeysFirstRow[0] = new JButton("|\n°");
buttonKeysFirstRow[1] = new JButton("1");
buttonKeysFirstRow[2] = new JButton("2");
buttonKeysFirstRow[3] = new JButton("3");
buttonKeysFirstRow[4] = new JButton("4");
buttonKeysFirstRow[5] = new JButton("5");
buttonKeysFirstRow[6] = new JButton("6");
buttonKeysFirstRow[7] = new JButton("7");
buttonKeysFirstRow[8] = new JButton("8");
buttonKeysFirstRow[9] = new JButton("9");
buttonKeysFirstRow[10] = new JButton("0");
buttonKeysFirstRow[11] = new JButton("'\n?");
buttonKeysFirstRow[12] = new JButton("¿\n¡");
buttonKeysFirstRow[13] = new JButton("Backspace");
break;
case 2:
buttonKeysSecondRow[0] = new JButton(" Tab ");
buttonKeysSecondRow[1] = new JButton("Q");
buttonKeysSecondRow[2] = new JButton("W");
buttonKeysSecondRow[3] = new JButton("E");
buttonKeysSecondRow[4] = new JButton("R");
buttonKeysSecondRow[5] = new JButton("T");
buttonKeysSecondRow[6] = new JButton("Y");
buttonKeysSecondRow[7] = new JButton("U");
buttonKeysSecondRow[8] = new JButton("I");
buttonKeysSecondRow[9] = new JButton("O");
buttonKeysSecondRow[10] = new JButton("P");
buttonKeysSecondRow[11] = new JButton("´\n¨");
buttonKeysSecondRow[12] = new JButton("+\n*");
break;
case 3:
buttonKeysThirdRow[0] = new JButton(" Caps ");
buttonKeysThirdRow[1] = new JButton("A");
buttonKeysThirdRow[2] = new JButton("S");
buttonKeysThirdRow[3] = new JButton("D");
buttonKeysThirdRow[4] = new JButton("F");
buttonKeysThirdRow[5] = new JButton("G");
buttonKeysThirdRow[6] = new JButton("H");
buttonKeysThirdRow[7] = new JButton("J");
buttonKeysThirdRow[8] = new JButton("K");
buttonKeysThirdRow[9] = new JButton("L");
buttonKeysThirdRow[10] = new JButton("Ñ");
buttonKeysThirdRow[11] = new JButton("{\n[");
buttonKeysThirdRow[12] = new JButton("}\n]");
buttonKeysThirdRow[13] = new JButton(" Enter ");
break;
case 4:
buttonKeysFourthRow[0] = new JButton(" Shift ");
buttonKeysFourthRow[1] = new JButton("<\n>");
buttonKeysFourthRow[2] = new JButton("Z");
buttonKeysFourthRow[3] = new JButton("X");
buttonKeysFourthRow[4] = new JButton("C");
buttonKeysFourthRow[5] = new JButton("V");
buttonKeysFourthRow[6] = new JButton("B");
buttonKeysFourthRow[7] = new JButton("N");
buttonKeysFourthRow[8] = new JButton("M");
buttonKeysFourthRow[9] = new JButton(",\n;");
buttonKeysFourthRow[10] = new JButton(".\n:");
buttonKeysFourthRow[11] = new JButton("^");
break;
case 5:
buttonKeysFifthRow[0] = new JButton(" ");
buttonKeysFifthRow[1] = new JButton("<");
buttonKeysFifthRow[2] = new JButton("v");
buttonKeysFifthRow[3] = new JButton(">");
break;
} // end switch
} // end method initializeKeys
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TypingTutor();
}
});
}
} // end class TypingTutor
关于java - Box Layout 移动组件、对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27848384/
只是想知道 Jquery Mobile 是否足够稳定以用于实时生产企业移动应用程序。 有很多 HTML5 框架,因为我们的团队使用 JQuery 已经有一段时间了,我们更愿意使用 Jquery 移动框
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 3 年前。 Improve t
所以我尝试在 JavaScript 中对元素进行拖放。我使用的视频教程在这里; https://www.youtube.com/watch?v=KTlZ4Hs5h80 。我已经按照它的说明进行了编码,
无法在移动 iOS(safari 和 chrome)上自动播放以前缓存的 mp3 音频 我正在 Angular 8 中开发一个应用程序,在该应用程序的一部分中,我试图在对象数组中缓存几个传入的音频 m
Git 基于内容而不是文件,所以我目前理解以下行为,但我想知道是否有特殊选项或 hack 来检测此类事情: git init mkdir -p foo/bar echo "test" foo/a.tx
我正在寻找语义 ui 正确的类来隐藏例如移动 View 中的 DIV。在 Bootstrap 中,我们有“visible-xs”和“hidden-xs”。 但是在语义ui上我只找到了“仅移动网格” 最
我正在使用 ubuntu 和 想要移动或复制大文件。 但是当我与其他人一起使用服务器时,我不想拥有所有内存并使其他进程几乎停止。 那么有没有办法在内存使用受限的情况下移动或复制文件? 最佳答案 如果你
这些指令有什么区别?以 ARM9 处理器为例,它不应该是: ASM: mov r0, 0 C: r0 = 0; ASM: ld r0, 0 C: r0 = 0; ? 我不知道为什么要使用一个或另一个:
我有一个文件夹,其中包含一些随机命名的文件,其中包含我需要的数据。 为了使用数据,我必须将文件移动到另一个文件夹并将文件命名为“file1.xml” 每次移动和重命名文件时,它都会替换目标文件夹中以前
我经常在 IB/Storyboard 中堆叠对象,几乎不可能拖动其他对象后面的对象而不移动前面的对象。无论如何我可以移动已经选择但位于其他对象后面的对象吗?当我尝试移动它时,它总是选择顶部的对象,还是
几个月前,我看到 Safari 7 允许推送通知,它似乎是一个非常有用的工具,除了我看到的每个示例都专注于桌面浏览,而不是移动设备。 Safari 推送通知是否可以在移动设备上运行,如果没有,是否有计
我有一个简单的 View 模型,其中包含修改后的 ObservableCollection使用 SynchronizationContext.Current.Send在 UI 线程上执行对集合的更改。
关于cassandra创建的数据文件和系统文件的位置,我需要移动在“cassandra.yaml”配置文件中设置的“commitlog_directory”、“data_file_directorie
我有这个代码 $(function() { var message = 'Dont forget us'; var original; var txt1 = ' - '; $(wind
我的客户报告说他的网站有一个奇怪的问题。该网站的 URL 是 your-montenegro.me 在 基于 Android 的浏览器 上加载时,页面底部会出现一个奇怪的空白区域。以下是屏幕截图: 华
我有这个 HTML 标记: Express 300 bsf Sign Up 我需要将元素从 DOM 上的一个
我有一个可重新排序的 TableView (UITableView 实例)。尽管我已经实现了 UITableViewDataSource 方法: tableView:moveRowAtIndexPat
我的客户报告说他的网站有一个奇怪的问题。该网站的 URL 是 your-montenegro.me 在 基于 Android 的浏览器 上加载时,页面底部会出现一个奇怪的空白区域。以下是屏幕截图: 华
我需要在拖放或复制/剪切和粘贴(复制与移动)期间获取操作类型。它是一个 Swing 应用程序,并且实现了 TransferHandle。我在操作结束时需要此信息,在 importData 方法中。 对
我编写了一个具有 add 和 get 方法的 SortedIntList 类。 我调用以下四个方法: SortedIntList mySortedIntList = new SortedIntList
我是一名优秀的程序员,十分优秀!