我正在尝试基于a创建自定义UI JWindow,以便选择要共享的屏幕区域.我已经扩展JWindow并添加了代码以使其可调整大小并使用"切出"窗口的中心AWTUtilities.setWindowShape().
当运行代码时,我正在经历闪烁,因为窗口在负x和y方向上调整大小,即向上和向左.似乎正在发生的是在更新组件之前调整窗口大小并绘制窗口.下面是代码的简化版本.运行时,顶部面板可用于向上和向左调整窗口大小.窗口的背景设置为绿色,以清楚显示我不想显示的像素的位置.
编辑:改进代码以使用a正确地塑造窗口,ComponentListener并在底部添加虚拟组件以进一步说明闪烁(也更新了屏幕截图).
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Area;
import javax.swing.JPanel;
import javax.swing.JWindow;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.LineBorder;
import com.sun.awt.AWTUtilities;
public class FlickerWindow extends JWindow implements MouseListener, MouseMotionListener{
JPanel controlPanel;
JPanel outlinePanel;
int mouseX, mouseY;
Rectangle windowRect;
Rectangle cutoutRect;
Area windowArea;
public static void main(String[] args) {
FlickerWindow fw = new FlickerWindow();
}
public …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Java Swing应用程序.如何才能使程序本身和任何其他窗口打开时它们出现在屏幕中央?
如果我使用JDK1.8_40或更新版本(Oracle或OpenJDK执行相同操作),以下代码和对话框调整大小将使应用程序崩溃(尝试过Windows 7,x64,64位JDK)
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JWindow;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final JDialog dialog = new JDialog();
dialog.add(new JPanel());
dialog.setVisible(true);
dialog.setBounds(100, 100, 100, 100);
final JWindow dependentWindow = getjWindow(dialog);
dependentWindow.setVisible(true);
dependentWindow.setBounds(100, 100, 100, 100);
Timer t = new Timer(300, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dependentWindow.setVisible(!dependentWindow.isVisible());
}
});
t.start();
}
});
} …Run Code Online (Sandbox Code Playgroud) JTextFieldVector并放入JListString"未找到匹配项"VectorJWindow给包含结果的用户 package test;
import javax.swing.*;
import java.awt.Dimension;
import java.awt.event.*;
import java.util.Vector;
public class AutoCompleteTest extends JFrame{
JTextField city = new JTextField(10);
String enteredName = null;
String[] cities = {"new jersey","new hampshire",
"sussex","essex","london","delhi","new york"};
JList list = new JList();
JScrollPane pane = new JScrollPane();
ResultWindow r = new ResultWindow();
//------------------------------------------------------------------------------
public static void main(String[] args) {
new AutoCompleteTest();
}
//------------------------------------------------------------------------------
public …Run Code Online (Sandbox Code Playgroud) 我正在为我的笔记本电脑开发一个工具.我想在JFrame中禁用最小化按钮.我已经禁用了最大化和关闭按钮.
以下是禁用最大化和关闭按钮的代码:
JFrame frame = new JFrame();
frame.setResizable(false); //Disable the Resize Button
// Disable the Close button
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
Run Code Online (Sandbox Code Playgroud)
请告诉我如何禁用最小化按钮.
我正在编写一个带有工具栏颜色的下拉组件.所以我从'Swing hacks'一书中提出了想法,稍微改变了构思并添加了Swing的标准JColorChooser.行为应该遵循:我点击一个按钮,出现一个带有颜色选择器的窗口; 我选择一种颜色,然后关闭下拉窗口,按钮的文字将颜色变为所选颜色.总的来说一切正常,但有一个令人不快的错误.在这些操作之后,UI冻结,按钮甚至不接受鼠标事件,如"鼠标悬停".这发生在我点击之前.然后,UI表现为所需.
这是带有概念的代码.
import java.awt.AWTEvent;
import java.awt.Color;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JWindow;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.colorchooser.AbstractColorChooserPanel;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.plaf.metal.MetalComboBoxIcon;
class DropDownComponent2 {
private JWindow _window;
private boolean _windowShouldBeShown = false;
private JComponent _component;
private AbstractButton _button;
private JFrame _ownerFrame;
public DropDownComponent2(JFrame …Run Code Online (Sandbox Code Playgroud) 在您阅读之前,这里有一些关于问题的澄清:
new JDialog(someWindow).重影可被固定在SSCCE 通过简单地改变该行到[...]new JDialog().为什么顶级窗户没有重影?
预期行为:( final JDialog d = new JDialog()见SSCCE)

如您所见,右侧窗口具有半透明背景(如预期的那样).
实际行为:( final JDialog d = new JDialog(f)见SSCCE)

在这种情况下,右侧窗口具有不透明背景.事实上,由于任何原因(最容易重现,在翻转时重新绘制)需要3-4次重绘,以使背景变得完全不透明.
SSCCE:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.plaf.synth.ColorType;
import javax.swing.plaf.synth.Region;
import javax.swing.plaf.synth.SynthConstants;
import javax.swing.plaf.synth.SynthContext;
import javax.swing.plaf.synth.SynthLookAndFeel;
import javax.swing.plaf.synth.SynthPainter;
import javax.swing.plaf.synth.SynthStyle;
import javax.swing.plaf.synth.SynthStyleFactory;
public class SynthSSCCE
{
public static void main(String[] …Run Code Online (Sandbox Code Playgroud) 
这是我之前的问题的继续,我问如何在系统托盘中放置一些东西.
在社区的一些帮助下,我可以做到这一点.但是什么我不能做的是改变的文本JTextField中JWindow.
该JWindow有JPanel,一切都置于内JPanel,包括JTextField的提醒百万吨.但是,即使我无法输入任何内容setEditable(true).
的JTextField,因为它应该是白色的,当鼠标进入和返回时鼠标退出到默认的颜色正确地接收事件.
这有什么解决方法吗?
package demo;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.sound.sampled.*;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import example.Kernel32;
public class SSCCE {
JPopupMenu popup = new JPopupMenu();
JMenuItem exit = new JMenuItem("Exit");
JWindow window = new JWindow();
JPanel panel = new JPanel();
int remindMeAt = 55;
Kernel32.SYSTEM_POWER_STATUS batteryStatus = new Kernel32.SYSTEM_POWER_STATUS();
Clip buzzer;
AudioInputStream …Run Code Online (Sandbox Code Playgroud) 是否可以在Java中创建某种具有框架和边框但没有标题按钮(最小化,恢复,关闭)的Window对象.
当然,我不能使用该undecorated设置.此外,窗口需要:
System外观这是一个例子:

我创建了一个不使用a的java程序JFrame,而是使用了一个JWindow.这正是我所需要的,没有Windows边框/标题栏的应用程序.
问题是它在运行时没有显示在屏幕底部的任务栏中.
任何人都可以弄清楚如何解决这个问题?