- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用不昂贵的绘图矩形在具有菜单栏的 JFrame 周围模拟投影,但阴影显示在不包括菜单栏的下部周围。
知道如何实现整个窗口的效果吗?
package com.dropshadow;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.border.EmptyBorder;
import org.nuiton.jaxx.runtime.swing.ComponentMover;
import org.nuiton.jaxx.runtime.swing.ComponentResizer;
public class DropShadowMenu {
public static void main(String[] args) {
initFrame();
}
private static void initFrame() {
final DropShadowTool shadow = new DropShadowTool();
JFrame frame = new JFrame() {
private static final long serialVersionUID = -512601712971605848L;
@Override
public void paint(Graphics g) {
super.paint(g);
shadow.applyShadow(this, (Graphics2D) g);
}
};
frame.setUndecorated(true);
frame.setBackground(new Color(255, 255, 255, 0));
frame.setPreferredSize(new Dimension(400, 600));
JPanel contentPane = new JPanel() {
private static final long serialVersionUID = -4799881378955761842L;
@Override
public void paint(Graphics g) {
super.paint(g);
shadow.applyShadow(this, (Graphics2D) g);
}
};
contentPane.setBorder(new EmptyBorder(20, 20, 20, 20));
contentPane.setLayout(new BorderLayout());
frame.setContentPane(contentPane);
contentPane.setBackground(new Color(0,0,0,0));
JPanel content = new JPanel();
contentPane.add(content);
JMenuBar menuBar = new JMenuBar();
menuBar.setBorder(new EmptyBorder(0,20,0,20));
menuBar.setBackground(new Color(255, 0, 255, 255));
frame.setJMenuBar(menuBar);
JPanel menuPanel = new JPanel();
menuPanel.setBorder(BorderFactory.createLineBorder(Color.red));
menuPanel.setLayout(new BorderLayout());
JMenu file = new JMenu("File");
file.setMnemonic('f');
JMenuItem exit = new JMenuItem("Exit");
exit.setMnemonic('x');
exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.ALT_DOWN_MASK));
menuBar.add(file);
file.add(exit);
exit.addActionListener(e ->
{
System.out.println("Exiting - Bye!");
System.exit(0);
} );
JMenu menu = new JMenu("Menu 1");
menuBar.add(menu);
menu.add(new JMenuItem("Item 1"));
menu.add(new JMenuItem("Item 2"));
JMenu subMenu = new JMenu("SubMenu 1");
subMenu.add(new JMenuItem("Item 3"));
subMenu.add(new JMenuItem("Item 4"));
menuBar.add(Box.createHorizontalGlue());
JButton x = new JButton("X");
x.setBorder(null);
x.setBackground(new Color(0,0,0,0));
menuBar.add(x);
x.addActionListener(e -> System.exit(0));
menu.add(subMenu);
content.setLayout(new BorderLayout());
JButton button = new JButton("bla blah");
button.addActionListener(e->System.out.println("bla bla button"));
content.add(button, BorderLayout.SOUTH);
content.setBackground(new Color(255,255,255));
JButton jx = new JButton(". X .");
jx.setBackground(new Color(255,255,255));
menuPanel.add(jx, BorderLayout.EAST);
jx.addActionListener(e -> System.exit(0));
ComponentMover cm = new ComponentMover();
cm.registerComponent(frame);
ComponentResizer cr = new ComponentResizer();
cr.registerComponent(frame);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
private static List<Color> colors = new ArrayList<Color>();
static {
for (int i=0;i<20;i++) {
colors.add(new Color(0, 0, 0, 5*i));
}
}
private static class DropShadowTool {
private void applyShadow(Container c, Graphics2D g) {
if(c.getName().equals("Charbel"))
System.out.println(c);
Insets insets = c.getInsets();
System.out.println(insets);
Dimension size = c.getSize();
int x0 = 0;
int xi = insets.left;
int y0 = 0;
int yi = insets.top;
int width0 = size.width;
int widthi = size.width - xi - insets.right;
int height0 = size.height;
int heighti = size.height - yi - insets.bottom;
int last = 0;
for (int i = 0; i < insets.left; i++) {
last = i;
drawLines(g, x0, y0, width0, height0, i);
}
drawLines(g, x0, y0, width0, height0, last);
}
private void drawLines(Graphics2D g, int x0, int y0, int width0, int height0, int i) {
int x = x0 + i;
int y = y0 + i;
int width = width0 - i - i;
int height = height0 - i - i;
g.setColor(colors.get(i % colors.size()));
g.drawRect(x, y, width, height);
}
}
}
最佳答案
我建议您的投影只是一个自定义边框,应该这样实现。
然后您应该能够将 DropShadowBorder
添加到任何 Swing 组件,而无需在组件上进行任何自定义绘制。
那么我建议您可以设置JRootPane
的Border
。根 Pane 在更高级别上管理菜单栏和内容 Pane ,因此边框应围绕这两个组件。
阅读 Swing 教程中关于 The Root Pane 的部分。
关于java - 带菜单栏的 swing JFrame 上的投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58359767/
每当我设置 Border.Effect属性的投影效果 控件中包含的每个控件都有一个投影。 有没有办法将阴影设置到边框而不是边框中包含的每个控件? 这是我的代码的一个简短示例:
我正在尝试创建一个带有阴影的对象。我相信您需要 CSS3 来执行此操作,到目前为止我已经有了类似的东西。 div { width:300px; height:100px; background
我希望能够为我的 drawables 文件夹中的矢量添加阴影。目前,当我将具有阴影的 svg 导入 Android Studio 时,转换为 xml 会删除阴影。 我将如何在 Android Stud
使用 NHibernate 2.1,我试图将一个实体及其子集合投影到 DTO 中。我的实体看起来像这样.. public class Application { public int Id {ge
我有问题还是好,我不知道如何将x,y,z值的3d点转换为2d点, 我必须绘制投影,其中的点确实有x,y,z值,但是我不知道如何将它们转换为2d,所以我可以将它们移动到我的轴上。 我一直在寻找Wiki和
我有域类位置 public abstract class BaseEntity where T: struct { public virtual T Id { get; set
我有一个使用 Android Material 图标作为背景的 ImageView 。我尝试添加标高以创建投影效果,但仅显示图标。是否可以将标高添加到矢量资源可绘制对象中? 矢量代码:
我正在尝试连接并以逗号分隔(或空格)列表并将其投影。我在下面有一些示例代码。 public class Friend { public string Name { get; set; } }
是否有任何库可以轻松地允许 Java bean 投影? 我有一个按照 Javabean 约定用 getter 和 setter 编写的 bean,并且在运行时在不同的地方我想要获取一个完全填充的 be
我可以成功地做到: point.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:
我对 OpenLayers 3 有点问题。我有以下脚本: var map = new ol.Map({ view : new ol.View({ center : [5.611
我正在尝试向 ImageView 添加阴影。 Stackoverflow 的另一个答案似乎是使用 Canvas 和位图等,比需要的复杂得多。 在 iOS 上我会做这样的事情: myImageView.
我有一个 JPanel 元素,我想给它添加一个阴影,我怎样才能给元素添加一个漂亮的褪色阴影?我需要使用外部库还是可以使用内置的东西? 例子: 最佳答案 所以我查看了 swingx它扩展了 JPanel
如何使用 MongoDB 查询预测作者的名字 { name: "Wings Of Fire", author: { first: "Abdul", last: "Kalam" } }
我有一个集合“帐户”,其中包含类似于此结构的文档: { "email" : "john.doe@acme.com", "groups" : [ {
我试图弄清楚如何使用枚举列表(@ElementCollection)对实体进行 DTO 投影。不幸的是,缺少 QueryDsl 文档,在这里我只能找到版本 3 的结果 不是 适用于版本 4。 @Ent
我想要悬停 div 时出现的箭头 here也投下影子。箭头是从 CSS 绘制的: .arrow { position:absolute; margin-top:-50px; left:80px; bo
如何使用 QueryOver 和 AliasToBean 将枚举值转换为字符串值?我有以下但在尝试转换 Enum 时出错: SomeDTO someDTO = null;
我有这个外部 GeoJSON 文件: {"type": "FeatureCollection", "features": [ {"type":"Feature", "id":382, "propert
我对 Hibernate 的预测和标准有点困惑。何时使用预测以及何时使用标准? 最佳答案 它们并不相互排斥,您可以同时使用两者。预测通常在某些标准的背景下使用。 简单地说,Hibernate Proj
我是一名优秀的程序员,十分优秀!