我有一个后台进程,当按下热键时会出现透明窗口:
[window makeKeyAndOrderFront:nil];
[[content animator] setAlphaValue:1.0]; // alpha was 0.0
Run Code Online (Sandbox Code Playgroud)
...窗口显示正常并在其他窗口前面(我想要它),但是直到我手动点击窗口,无论应用程序处于活动状态,当窗口出现时仍保持活动状态.我期待'makeKeyAndOrderFront'也可以使应用程序处于活动状态,但是在我的-applicationWillBecomeActive中添加NSLog行会显示在执行鼠标单击之前没有获得任何活动通知.
有没有人知道我如何设置我的应用程序@我同时发出-makeKeyAndOrderFront?我需要它激活,以便它可以开始接受键盘输入 - 需要任何帮助:-)
任何人都可以想到一个很好的方法来忽略在Java中双击所带来的单击?
我希望每个人都有不同的行为:
......谁能想到办法做到这一点?某种计时器设置可能吗?一个想法赞赏:-)
<免责声明> ......是的,我知道我犯了一个最令人发指的可用性/用户界面失礼.</声明>
编辑#2:
虽然这可以解决由于计时器导致的延迟 - 但我放弃了这个解决方案,并使用中键单击进行选择而不是双击...
编辑:
谢谢cgull - 这是我能够想出的,因为你确认没有简单的方法可以做到这一点(请注意,如果我设置计时器<200奇数赛车在点击和计时器之间看到,但只要我将此值设置为> 200个工作只是peachy):
public void mouseClicked(MouseEvent e) {
System.out.println( "Click at (" + e.getX() + ":" + e.getY() + ")" );
if (e.getClickCount() == 2) {
System.out.println( " and it's a double click!");
wasDoubleClick = true;
}else{
Integer timerinterval = (Integer)
Toolkit.getDefaultToolkit().getDesktopProperty(
"awt.multiClickInterval");
timer = new Timer(timerinterval.intValue(), new ActionListener() {
public void actionPerformed(ActionEvent evt) {
if (wasDoubleClick) {
wasDoubleClick = false; // reset flag …Run Code Online (Sandbox Code Playgroud) 我正在使用Java Sound API,如果我想调整记录卷,我需要对操作系统公开给Java的硬件进行建模.事实证明,所呈现的内容有很多种.
因此,我谦虚地要求任何人能够帮助我在他们的计算机上运行以下内容并回发结果,以便我可以了解那里有什么.
提前感谢任何可以提供帮助的人:-)
import javax.sound.sampled.*;
public class SoundAudit {
public static void main(String[] args) { try {
System.out.println("OS: "+System.getProperty("os.name")+" "+
System.getProperty("os.version")+"/"+
System.getProperty("os.arch")+"\nJava: "+
System.getProperty("java.version")+" ("+
System.getProperty("java.vendor")+")\n");
for (Mixer.Info thisMixerInfo : AudioSystem.getMixerInfo()) {
System.out.println("Mixer: "+thisMixerInfo.getDescription()+
" ["+thisMixerInfo.getName()+"]");
Mixer thisMixer = AudioSystem.getMixer(thisMixerInfo);
for (Line.Info thisLineInfo:thisMixer.getSourceLineInfo()) {
if (thisLineInfo.getLineClass().getName().equals(
"javax.sound.sampled.Port")) {
Line thisLine = thisMixer.getLine(thisLineInfo);
thisLine.open();
System.out.println(" Source Port: "
+thisLineInfo.toString());
for (Control thisControl : thisLine.getControls()) {
System.out.println(AnalyzeControl(thisControl));}
thisLine.close();}}
for (Line.Info thisLineInfo:thisMixer.getTargetLineInfo()) {
if (thisLineInfo.getLineClass().getName().equals(
"javax.sound.sampled.Port")) {
Line thisLine …Run Code Online (Sandbox Code Playgroud) 我有一个例程,在滚动窗格中绘制一个疯狂的大图.在添加到滚动窗格之前,它的绘制太大了 - 库存要求将是几次演出.
由于图形的大小,我在滚动窗格的子项的绘制方法中呈现图表.哪个效果很好,但是我注意到每次移动一个滚动条时我的绘图程序被调用两次 - 一次使用一个裁剪矩形等于未覆盖的区域滚动到,另一次裁剪矩形等于视口的尺寸.
例如,如果我的视口是245x195,我向下滚动3个像素,我的绘图例程将使用g.getClipBounds()set 调用,如下所示:
java.awt.Rectangle[x=0,y=195,width=245,height=3]
java.awt.Rectangle[x=0,y=3,width=245,height=195]
Run Code Online (Sandbox Code Playgroud)
...因为我在绘图程序中渲染,这导致闪烁(我尽可能快地进行计算,但是我觉得有点延迟).问题:
有谁知道如何防止第二次油漆电话?这是简单的JScrollPane我正在做的事情 - 我有一个组件,我将它添加到滚动窗格,我将滚动窗格添加到父组件.即使在第一个图像滚动演示@ swing教程中,您也可以看到此行为.
如果对#1的回答是'不',那么有人会想到一个很好的方法来解决这个问题吗?我应该绘制某种图像缓冲区,跟踪最近的绘制调用并尽可能复制图像吗?我无法想象这比重新渲染要快得多,但任何洞察力都值得赞赏:-)
Hiya - 快速的一个 - 与JPanel相比,JComponent的子类化是否有任何损害/价值?
对我来说,如果我正在绘制自己的绘图并且对象没有任何子节点,那么它们看起来是同样的事情,但是似乎有一个pref用于将JPanel子类化为JComponent - 只是寻找关于为什么这可能的意见是......
谢谢 :-)
java ×4
swing ×2
audio ×1
click ×1
cocoa ×1
double-click ×1
events ×1
graphics ×1
javasound ×1
jscrollpane ×1
macos ×1
mouse ×1
objective-c ×1
subclass ×1