- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Java 编写一个文件管理器。我需要将矩形选择添加到我的程序中,就像在 Windows 中一样(以便选择矩形内的多个文件)。我的问题是,每当我向 DrawRect 面板添加布局来放置图标时,我都无法再绘制矩形了!这是我的 DrawRect 代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class DrawRect extends JPanel {
int x, y, x2, y2;
// public static void main(String[] args) {
// JFrame f = new JFrame("Draw Box Mouse 2");
// f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// f.setContentPane(new DrawRect());
// f.setSize(300, 300);
// f.setVisible(true);
// }
public DrawRect() {
x = y = x2 = y2 = 0; //
MyMouseListener listener = new MyMouseListener();
addMouseListener(listener);
addMouseMotionListener(listener);
}
public void setStartPoint(int x, int y) {
this.x = x;
this.y = y;
}
public void setEndPoint(int x, int y) {
x2 = (x);
y2 = (y);
}
public void drawPerfectRect(Graphics g, int x, int y, int x2, int y2) {
int px = Math.min(x,x2);
int py = Math.min(y,y2);
int pw=Math.abs(x-x2);
int ph=Math.abs(y-y2);
g.drawRect(px, py, pw, ph);
g.fillRect(px,py,pw,ph);
}
class MyMouseListener extends MouseAdapter {
public void mousePressed(MouseEvent e) {
setStartPoint(e.getX(), e.getY());
}
public void mouseDragged(MouseEvent e) {
setEndPoint(e.getX(), e.getY());
repaint();
}
public void mouseReleased(MouseEvent e) {
setEndPoint(e.getX(), e.getY());
repaint();
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
int alpha = 50; // 50% transparent
Color myColour = new Color(0, 0, 200,50);
g.setColor(myColour);
drawPerfectRect(g, x, y, x2, y2);
}
}
为了解释更多,在上图中,我有一个 SplitPane,它的右侧部分是一个 ScrollPane,DrawRect 的实例被添加到滚动痛苦中,并且图标也添加到我的 DrawRect 面板中,每个面板中有多行网格布局有一个流程布局。我该怎么做才能绘制矩形?
正如您在下面看到的,如果我不向 DrawRect 面板添加任何布局,它可以正常工作,但仍然会错过图标和布局存在的部分: enter image description here
最后,我有一个问题:解决这个问题后,我可以告诉这个选择矩形内的按钮被选择吗?非常感谢!
================================================== ===========================更新:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
abstract public class GridIcon extends JButton {
private Color pressedBackgroundColor = Color.blue;
private String shortenedName;
private String path;
private boolean setSelected = false;
public GridIcon(String text, Icon icon, String path) {
this.addActionListener(new ButtonListener());
this.path = path;
if (text.length() > 9) {
shortenedName = text.substring(0, 9);
shortenedName += "...";
} else
shortenedName = text;
this.setIcon(icon);
this.setText(shortenedName);
this.setFocusable(false);
this.setVerticalTextPosition(SwingConstants.BOTTOM);
this.setHorizontalTextPosition(SwingConstants.CENTER);
super.setOpaque(false);
super.setContentAreaFilled(false);
super.setBorderPainted(false);
super.setBorder(null);
this.setBackground(new Color(0, 0, 0, 0));
// super.setPreferredSize(new Dimension(60,60));
}
@Override
protected void paintComponent(Graphics g) {
if (getModel().isPressed() || setSelected) {
g.setColor(pressedBackgroundColor);
} else {
g.setColor(getBackground());
}
g.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g);
}
@Override
public void setContentAreaFilled(boolean b) {
}
public String getPath() {
return path;
}
public Color getPressedBackgroundColor() {
return pressedBackgroundColor;
}
public void setPressedBackgroundColor(Color pressedBackgroundColor) {
this.pressedBackgroundColor = pressedBackgroundColor;
}
public void setSetSelected(boolean isSelected) {
setSelected = isSelected;
}
public boolean isSetSelected() {
return setSelected;
}
class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (setSelected)
setSelected = false;
else
setSelected = true;
}
}
}
最佳答案
查看 A Closer Look at the Painting Mechanism 上的 Swing 教程中的部分了解绘画是如何完成的。
所发生的情况是,添加到面板的组件是在绘制选择矩形之后绘制的。
解决方案是使用您的自定义代码覆盖paint(...)
。然后选择矩形将绘制在子组件的顶部。
关于Java DrawRect 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59144101/
为了澄清这个问题的目的:我知道如何使用 subview 和使用 drawRect 创建复杂的 View 。我试图完全理解何时以及为什么使用一个而不是另一个。 我也明白提前优化并在进行任何分析之前以更困
我是 Swift 的新手,正在尝试让一个非常简单的应用程序运行。我想要做的就是让 UIView.drawRect 在我按下按钮时更新。它会在应用程序首次加载时更新/绘制,然后无论我尝试什么,它都不会更
我有一个名为 Icon 的基于 UIView 的类。在那里,我想要类似于这样的代码: UIView *finalView = [[UIView alloc] initWithFrame:CGRectM
我正在覆盖 drawRect: 在我的一个 View 中,它甚至在不调用 [super drawrect:rect] 的情况下也能工作。这是如何运作的? - (void)drawRect:(CGRec
我不是很明白CALayer的display和drawInContext与 View 中的drawRect有什么关系。 如果我有一个每 1 秒设置一次 [self.view setNeedsDispla
我在 viewController 上放置了一个 View ,我想在此 View 中绘制一个矩形,但具有自定义高度。我根据 viewController 中的参数确定高度。例如。如果我的参数是 50,
这个非常简单的绘图命令创建了一个 11x11 像素的跟踪红色矩形: _sp.graphics.lineStyle( 1, 0xFF0000, 1, true, LineScaleMode.NORMAL
我每两秒从 NSTimer 函数调用 setNeedsDisplayInRect 一次。这工作得很好,并在随机位置绘制一个具有随机颜色的正方形。然而,在某些情况下,我想在 NSTimer 函数中绘制一
你好,我是新来的,也是 Java 编程的新手。最近我正在尝试在 JPanel 中编写绘图功能。问题是,当我添加新的绘制矩形(只需在 JRadiobutton 中选择绘制矩形,然后拖动空白区域)时,它工
我有一个放在WebView上方的UIView。在这个UIView中,我必须画图,但是应用程序因此错误而崩溃 在LibraryViewController.m中 self.drawView =[[Dr
我正在使用 Java 编写一个文件管理器。我需要将矩形选择添加到我的程序中,就像在 Windows 中一样(以便选择矩形内的多个文件)。我的问题是,每当我向 DrawRect 面板添加布局来放置图标时
我正在使用 UIBezierPath 创建自定义 View 绘画。每当状态根据服务器的响应发生变化时,我想更新自定义 View 填充颜色。我正在使用 fillColor属性作为参数来更新 View 的
我有一个名为 TestView 的 UIView 子类,它重写了 DrawRect ,如下所示: import Foundation import UIKit class TestView: UIVi
我的应用程序中有一个泄漏问题,我正在创建一个颜色的自动释放对象,但通过仪器说问题存在。 Malloc 1 04:12.221.102 32 UIKit +[UIColor allocW
我需要知道是否可以全局覆盖 UI 类的 drawRect。类似于“外观”类属性的东西。本质上,我需要为应用程序中的所有按钮使用我自己的绘图例程。最好我不想继承并且必须在 Storyboard 中的每个
我将绘制一条类似于下图中红色曲线的曲线(可以是贝塞尔曲线或我认为对我的目的最方便的任何曲线)。我想找到曲线上的点(illo 中的蓝点)。这些点很可能是曲线长度的相等部分的划分。 我能找到这些点吗?到目
我有两个 UIView 子类,比如“A 类”和“B 类”。类 A 在其初始化程序中具有代码 [self addSubview:instanceOfClassB];。而在 B 类的 drawRect:
我一直在使用 UITextField 的子类在我的文本字段末尾绘制一个“m3”字符串,但有些东西不起作用。我知道正在调用该方法,因为我已经使用 NSLog 对其进行了测试,我做错了什么? 我的类(cl
我有一个 UITableViewCell 的子类,我正在尝试在 drawRect 中画一条线。 有一个属性separatorColor在子类的标题中: @interface DXDecisionsTa
我将动画代码放在我的 UIView 子类的 drawRect 中。我真的在寻找类似 UIViewController 的 viewWillAppear 的东西。但我想使用 UIView 而不是 UIV
我是一名优秀的程序员,十分优秀!