gpt4 book ai didi

java - JFrame Exit on close 不会出现在java中

转载 作者:行者123 更新时间:2023-11-30 05:45:41 25 4
gpt4 key购买 nike

Oracle 为例,您的documentation中有一些例子.

我的想法如下:

enter image description here

我已经实现了我的应用程序具有透明背景,但最小化和关闭应用程序按钮没有出现

这是我的代码:

主要

import javax.swing.JFrame;
import java.awt.*;
import javax.swing.*;
import static java.awt.GraphicsDevice.WindowTranslucency.*;

public class Textmovie extends JFrame {

/*
public Textmovie() {
//setLayout(new GridBagLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
*/

public static void main(String[] args) {
JFrame jf = new JFrame("");
jf.setUndecorated(true);
jf.setBackground(new Color(0,0,0,10));
//jf.setOpacity(0.55f);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(new texscroll());
jf.setSize(720,480);
jf.setVisible(true);
}
}

第 2 部分

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;


/**
*
* @author inide
*/
public class texscroll extends JPanel {
int x =510 , y = 25;

public texscroll() {
setOpaque(false);
}


@Override

public void paint(Graphics g){
super.paint(g);
Graphics2D g2 = (Graphics2D)g;

Font font = new Font("Arial",Font.BOLD + Font.PLAIN,15);
g2.setFont(font);
g2.setColor(Color.BLACK);

String string = "stackoverflow stackoverflow stackoverflow stackoverflow";

g2.drawString(string ,x,y);
try{Thread.sleep(14);}
catch(Exception ex)
{
};
x-=1;

if(x==-10*string.length()){
x= 510;
}
repaint();

// System.out.println(string.length() );
}
}

这在 NetBeans IDE 8.0.2 中运行时显示

enter image description here

他们可以向我解释我必须做什么才能使按钮出现(最小化和关闭应用程序)。

最佳答案

如果你真的根据异常深入研究代码:

Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException: The frame is decorated
at java.desktop/java.awt.Frame.setBackground(Frame.java:989)

你会发现让框架变得透明并进行装饰是不可能的......

@Override
public void setBackground(Color bgColor) {
synchronized (getTreeLock()) {
if ((bgColor != null) && (bgColor.getAlpha() < 255) && !isUndecorated()) {
throw new IllegalComponentStateException("The frame is decorated");
}
super.setBackground(bgColor);
}
}

事实上,教程显示它的工作是无关紧要的,并且是教程中的一个错误。

在 API 的早期“未发布”版本中(使用 AWTUtilities),它“可能”是可能的,但它根本不再可能

现在,我们已经在 paint 中解决了这个问题...

try {
Thread.sleep(14);
} catch (Exception ex) {
};
x -= 1;

if (x == -10 * string.length()) {
x = 510;
}
repaint();

这不是在 Swing 中制作动画的方式

这只会给您带来无穷无尽的问题,因为在 paintComponent 存在之前,不会向 native 对等方提交任何内容(这就是双缓冲的工作原理)

参见Concurrency in Swing了解更多详情。

更合适的解决方案可能看起来像......

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Textmovie extends JFrame {

public static void main(String[] args) {
new Textmovie();
}

public Textmovie() throws HeadlessException {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame jf = new JFrame("");
jf.setUndecorated(true);
jf.setBackground(new Color(0, 0, 0, 10));
//jf.setOpacity(0.55f);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(new texscroll());
jf.pack();
jf.setLocationRelativeTo(null);
jf.setVisible(true);
}
});
}

public static class texscroll extends JPanel {

private int x = 510, y = 25;

private String string = "stackoverflow stackoverflow stackoverflow stackoverflow";

public texscroll() {
Font font = new Font("Arial", Font.BOLD + Font.PLAIN, 15);
setFont(font);
setForeground(Color.BLACK);

setOpaque(false);
Timer timer = new Timer(14, new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
x -= 1;

if (x == -10 * string.length()) {
x = 510;
}
repaint();
}
});
timer.start();
}

@Override
public Dimension getPreferredSize() {
return new Dimension(720, 480);
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g); //To change body of generated methods, choose Tools | Templates.
Graphics2D g2 = (Graphics2D) g;

g2.drawString(string, x, y);
}
}
}

参见How to Use Swing Timers了解更多详情

关于java - JFrame Exit on close 不会出现在java中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54876703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com