我在使用KeyBoardFocusManger全屏工作时遇到了问题Window.无论如何,它都不会得到键盘输入.我使用a System.exit(0)和a println()来查找对keypressed/release/typed方法的任何调用,但不会抛出任何错误.我试过了KeyListeners; 但我看了以后这个,我改变了一个KeyboardFocusManager,同样的事情仍然发生.我真的很绝望; 从我可以判断,Window是不是得到了键盘的焦点?
这是我的主要内容:
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
// Determine if full-screen mode is supported directly
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gs = ge.getDefaultScreenDevice();
if (gs.isFullScreenSupported()) {
Frame frame = new Frame(gs.getDefaultConfiguration());
SpaceInvaderUI spaceInvaderUI = new SpaceInvaderUI(frame);
// Enter full-screen mode
gs.setFullScreenWindow(spaceInvaderUI);
} else {
JOptionPane.showMessageDialog(null, "Does not support full screen!", "Error 0x01", JOptionPane.ERROR_MESSAGE); …Run Code Online (Sandbox Code Playgroud) 我正在构建一个客户端/服务器应用程序.我希望在身份验证框架上让用户更轻松.
我想知道如何让enter-key将登录名和密码提交给数据库(触发动作)?
无论屏幕尺寸如何,我都希望我的框架组件始终在屏幕上进行调整.我在我的笔记本电脑(小屏幕)中绘制框架,当我在具有大屏幕的另一台机器(jar文件)中运行我的应用程序时,框架组件不会重新调整尺寸!
当我在任何机器中以全屏模式放置框架时,如何使框架调整其组件大小?

package package_MSM;
import java.awt.Color;
public class MSMGui extends JFrame
{
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JTextArea textArea;
private JPanel pnlLogo1;
private JLabel lblLogo1;;
private static JButton btnSmpd1;
private static JButton btnSmpd2;
private static JButton btnSmpd3;
private static JButton btnSmpd4;
private static JButton btnSmpd5;
private static JButton btnSmpd6;
private static JButton btnSmpd7;
/**
* Launch the application.
*/
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{ …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用单个按钮获取一个简单的JFrame,以便在发生任何这些事件时触发事件:
似乎Enter和空格键是"免费",以及使用JButton上的addActionListener默认鼠标点击; 问题是,我已经读过,键绑定依赖于所使用的外观.
我试图通过将Enter和空格键添加到JButton的动作映射来在LaF中获得通用行为,甚至添加了一个随机键("m")以确保ActionMap正在进行工作(它是),但现在是鼠标点击丢失.我似乎能够获得所有键和鼠标单击的唯一方法是使用动作映射和addActionListener.
有没有办法让这些键和鼠标绑定在所有LaF中一致地工作,而不试图检测可能出现的每个可能的LaF?我可以注册一个动作侦听器,它将触发键和鼠标事件吗?
我最喜欢的解决方案是在JButton动作图中添加鼠标点击,并检测动作内部发生的键或鼠标点击.
我还在这里学习绳索,所以这可能不是最好或最有效的做事方式; 我确定它过度设计了.这是一种训练练习,我正在试验我能掌握的一切.欢迎任何和所有编码风格的评论!
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
public class Example extends JFrame {
// ============================
private class BtnListener extends AbstractAction {
private static final long serialVersionUID = 1L;
public void actionPerformed(ActionEvent ae) {
System.out.println("\nclick button listener triggered");
System.out.println(ae.getSource().getClass().toString());
}
} // class BtnListener
private static final int NO_MODIFIER = 0;
private static …Run Code Online (Sandbox Code Playgroud) 大约一周前,我开始研究选项类型的GUI.我从一个JFrame开始,并添加了相当多的功能与各种按钮和键监听器.我有这一切工作,并决定我希望窗口是模态的.我将JFrame转换为JDialog,虽然它仍然是非模态的,但所有功能仍然存在但是当我将其设置为模态(true或false)时,我失去了所有听众的功能.什么是错的?
我正在努力将我的SVN上传到GitHub.如果你需要查看代码只是评论这样说并给我几分钟.提前致谢.
package main;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import javax.swing.*;
import Twitter.SearchTweets;
public class OptionsGUI {
// auto generated
private static final long serialVersionUID = 1L;
private JDialog f;
private JPanel buttonPanel;
private JPanel optionsLabelPanel;
private JPanel optionsSetPanel;
private JLabel sortLocationLabel;
private JLabel timeoutLabel;
private JLabel maxTweetsLabel;
private JLabel keywordsLabel;
private JLabel currentKeywordsLabel;
private JButton add;
private JButton remove;
private JButton save;
private JButton cancel;
private …Run Code Online (Sandbox Code Playgroud) 我正在制作一个得分保持计划,但我遇到了一个问题.我试图做的是在顶部有一个包含两个JPanel的JPanel,而JPanel又包含两个团队名称.我很困惑为什么程序顶部的两个JLabel没有集中在它们所包含的JPanels中.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ScoreFrame extends JFrame {
private static final Dimension SCREEN_SIZE = Toolkit.getDefaultToolkit().getScreenSize();
private static final int WIDTH = SCREEN_SIZE.width;
private static final int HEIGHT = SCREEN_SIZE.height;
private final JTextField[] nameField = new JTextField[] { new JTextField(), new JTextField() };
private final JLabel[] nameLabel = new JLabel[] { new JLabel("Team 1"), new JLabel("Team 2") };
private final GridBagLayout gridBag = new GridBagLayout();
private final GridBagConstraints constraints = new GridBagConstraints();
private final JPanel topPanel …Run Code Online (Sandbox Code Playgroud) 我永远不明白SwingUtilities.invokeLater,这就是我一直避免它的原因.但是让Swing Thread安全是非常重要的.好吧请原谅,因为这是我第一次这样做.我试图在一些数据库查询后关闭窗口.所以,据我所知,任何更新UI必须由.处理.这SwingUtilities.invokeLater是我的工作:
主要:
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new forminsert().setVisible(true);
forminsert f=new forminsert();
}
});
}
public forminsert() {
initComponents();
}
public class forminsert extends javax.swing.JFrame {
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jTextField1 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setUndecorated(true);
jPanel1.setBackground(new java.awt.Color(0, 0, 0));
jPanel1.setBorder(javax.swing.BorderFactory.createMatteBorder(3, 3, 3, 3, new java.awt.Color(0, 204, 204)));
/////***REST …Run Code Online (Sandbox Code Playgroud) 有人能告诉我如何将主应用程序窗口中的X按钮设置为false,以及如何设置Alt + F4功能不可用或只是禁用它?
我添加了:
public ZalumView(SingleFrameApplication app) {
super(app);
initComponents();
mainFrame = this.getFrame();
mainFrame.setTitle("Zalum - zarzadzanie zasobami ludzkimi");
mainFrame.pack();
mainFrame.setResizable(false);
mainFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
Run Code Online (Sandbox Code Playgroud) 编辑2013年1月16日:原始问题已被删除.这似乎是mac OSX上JDK 7的一个错误.我已经向Sun(Oracle)提交了一份错误报告.
下面的文件使用awt类GraphicsEnvironment和方法setFullScreenWindow将图像显示为全屏.没有包含图像,因此运行代码时屏幕将显示为灰色.但是,密钥绑定仍然有效.
有两个键绑定.按"ENTER"键应打印"按下Enter键".到stdout.按"ESCAPE"应该将"ESC Key终止的程序"打印到stdout并退出程序.
使用Windows 7 64和JDK Java SE 6和7,这些键绑定按预期工作.
使用Mac OSX 10.7 Lion和JDK Java SE 6,这些键绑定按预期工作.
使用Mac OSX 10.7 Lion和JDK Java SE 7,这些键绑定将停止工作.
回滚到JDK Java SE 6会使它们重新开始工作.
我不知道它是否会影响其他操作系统.
我已经尝试了所有版本的JComponent.WHEN_IN_FOCUS等......并且这些选项都没有解决问题.
下面是SSCCE,只有在使用Mac OSX 10.7和JDK Java SE 7时才会重现错误.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class FullScreen extends JFrame
{
/*
* screenImage is never set in this code. It can be set to any image
* the error will still be present. Images have been …Run Code Online (Sandbox Code Playgroud) 我正在开发应用程序,我正在使用Swing制作GUI.我希望我的应用程序是全屏的.我可以很容易地设置窗口的大小,但是我无法使应用程序真正全屏(IE与Apple菜单栏和底座隐藏).我在网上找到的所有答案似乎都不适合我.我是Java的新手,所以感谢任何帮助.
frame = new JFrame("Test");
frame.setTitle("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel emptyLabel = new JLabel("");
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);
frame.setSize((int)dimension.getWidth(), (int)dimension.getHeight());
int x = (int) ((dimension.getWidth() - frame.getWidth()) / 2); // X center
int y = (int) ((dimension.getHeight() - frame.getHeight()) / 2); //Y center
frame.setLocation(x, y); //Set Frame Location
frame.setResizable(false); //Frame is not resizable
frame.setUndecorated(true); //No decoration for the frame
frame.setAlwaysOnTop(true);
frame.setVisible(true); //Make visible
Run Code Online (Sandbox Code Playgroud) java ×10
swing ×9
fullscreen ×3
key-bindings ×3
jframe ×2
keylistener ×2
macos ×2
awt ×1
invokelater ×1
jbutton ×1
jdialog ×1
key-events ×1
layout ×1
twitter ×1