在我们的应用程序中,我们在白色表单上有白色按钮.当鼠标悬停按钮时,我们希望在按钮上显示浅蓝色透明矩形.
我想创建这个用户控件,但我不知道如何做到这一点.我试过谷歌,但我没有找到任何可以帮助我的东西,所以我希望你们能指出我正确的方向.
我在这里尝试做的是repaint()
从我的loadbg()
方法中调用方法.但是,repaint()
不起作用,我的图像(存储在var中bg
)不会加载到屏幕上.有关为什么这不起作用的任何建议?
package core;
/*** @author Adil
* 2DPlatformer
* Written by Adil
* Built upon the player-core framework (written by Adil)
* GNU Licensed
*/
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.ImageIcon;
@SuppressWarnings("serial") //Suppress serial warning ID
public class Core extends JFrame {
public static void main(String[] args) {
DisplayMode dm = new DisplayMode(800, 600, 16,
DisplayMode.REFRESH_RATE_UNKNOWN);
//new display with parameters 800x600 + 16 bit color depth
Core i = new Core(); //new …
Run Code Online (Sandbox Code Playgroud) 我正在实施油漆应用程序.我的问题是,当我在物体上着色时.有些时候屏幕进入睡眠状态.当我清醒屏幕时,我的旧油漆丢失了.我发现它在Onpause之后自动调用OnDestroy,因此它会清除画布.如何自动停止调用Ondestroy.
我有以下绘制矩形的绘制事件(窗体):
void LogicSimulationViewerForm_Paint(object sender, PaintEventArgs e) {
Rectangle rect = new Rectangle(100, 100, 400, 100);
Graphics c = rtbLogicCode.CreateGraphics();
c.DrawRectangle(new Pen(Color.Black, 3), rect);
}
Run Code Online (Sandbox Code Playgroud)
矩形显示片刻,然后立即消失.只有当用户调整表单大小时,矩形才会再次显示.
我该如何解决这个问题?
我有一个自定义视图,我想要应用手指画.我该如何实现这一目标?
我自己的观点是210x170像素,我想用手指画画.
我真的很困惑如何做到这一点.
我一直在尝试圆形按钮,但这里有一个问题.目前我得到一个这样的按钮:
我想要做的是填充按钮方块中的其余部分.我该怎么做呢 ?这是绘制此按钮的代码.
import javax.swing.*;
import java.awt.*;
class Tester extends JButton {
public Tester(String label) {
super(label);
setContentAreaFilled(false);
Dimension size = this.getPreferredSize();
size.width = size.height = Math.max(size.width,size.height);
this.setPreferredSize(size);
}
@Override
public void paintComponent(Graphics g) {System.out.println("Inside the paintComponent method");
if (getModel().isArmed()) {
g.setColor(Color.lightGray);
} else {
g.setColor(getBackground());
}
g.fillOval(0,0,getSize().width-1,getSize().height-1);
System.out.println(getSize().width);
System.out.println(getSize().height);
super.paintComponent(g);
}
public static void main(String args[]) {
JFrame fr = new JFrame();
JPanel p = new JPanel();
JButton button = new Tester("Click Me !");
button.setBackground(Color.GREEN);
p.add(button);
fr.add(p);
fr.setVisible(true);
fr.setSize(400,400); …
Run Code Online (Sandbox Code Playgroud) 有一个非常简单的问题,我之前没有遇到过.我在做项目之前使用了类似的布局.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class q1
{
public static void main (String Args [])
{
q1Window showMe = new q1Window();
}
}
class q1Window
{
q1Window()
{
JFrame window = new JFrame("Tutorial 1");
window.setSize(600,600);
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint (Graphics back)
{
back.setColor(Color.black);
back.fillRect(30,30,100,200);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我似乎无法打印任何JFrame显示的东西.
我有一个简单的程序,它以一定的速度和角度绘制从原点发射的粒子的轨迹.我创建了一个JPanel的子类来处理这个的绘制.我每次重新绘制子类时都需要当前时间和初始时间之间的差值(以毫秒为单位),将其转换为秒,然后找到粒子应该在该时间点的x和y坐标,最后获取那些x和y坐标并在屏幕上绘制它们.我的问题是我的子类似乎在间隔时间重绘,看起来很长,因为只显示了几个点.
我的绘图方法:
private void doDrawing(Graphics g) {
Dimension size = getSize();
Insets insets = getInsets();
int w = size.width - insets.left - insets.right;
int h = size.height - insets.top - insets.bottom;
Graphics2D g2d = (Graphics2D) g;
g.drawString("Acceleration: -9.8m/s i", 0, 20);
StringBuilder b = new StringBuilder();
b.append("Current Velocity: ");
b.append(String.valueOf(sim.getVector(tickSpeed
* ((System.currentTimeMillis() - initTime) / 1000)).getMagnitude()));
b.append(" m/s at ");
b.append(String.valueOf(sim.getVector(tickSpeed
* ((System.currentTimeMillis() - initTime) / 1000)).getDirection().getDirectionDeg()));
b.append(" degrees");
g.drawString(b.toString(), 0, 30);
drawPreviousPoints(g2d);
drawCurrentPointAndAppend(g2d, w, h);
repaint();
}
private void …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用我制作的Painter对象在我的JTable上绘制线条,但由于某种原因table.getGraphics()
返回null.
画家类:
import java.awt.BasicStroke;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JTable;
public class Painter extends JTable {
public Painter(){
}
public void paintSudokuLines(Graphics g){
paintComponent(g);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(3));
g2.drawLine(0, 300, 400, 250);
}
}
Run Code Online (Sandbox Code Playgroud)
我用以下方法调用方法:
private Painter paint = new Painter();
paint.paintSudokuLines(table.getGraphics());
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会这样,所以我需要一些解释.
所以基本上我有一些我在几天前工作的代码,有点像Paint,它允许你使用鼠标在屏幕上绘制.我偶然发现了这个属性,我意识到这是非常低效的,我想知道是否有更实际的方法来做到这一点.没有任何理由可以提供我的所有代码,但这里是重要的部分
private static void createAndShowGui() {
SimpleDraw mainPanel = new SimpleDraw();
MenuBar.createMenuBar();
JLabel label = new JLabel();
label.setText("Drawing prototype 0.0.1");
// label.setHorizontalTextPosition(JLabel.NORTH);
label.setFont(new Font("Serif", Font.BOLD, 20));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(),BoxLayout.PAGE_AXIS));
frame.setVisible(true);
frame.setJMenuBar(MenuBar.getMenuBar());
frame.setBackground(Color.WHITE);
frame.add(label);
Run Code Online (Sandbox Code Playgroud)
上面的代码块设置了jframe(窗口)
@Override
public void mouseDragged(MouseEvent e)
{
// These console outputs are just so that I know what is happening
System.out.println("Event: MOUSE_DRAG");
System.out.println(e.getX());
System.out.println(e.getY());
System.out.println(e.getComponent());
System.out.println(e.getWhen());
System.out.println(e.getButton());
MOUSE_X = e.getX() - 5; //-5 so that the cursor represents the center of the square, not …
Run Code Online (Sandbox Code Playgroud)