我正在研究用java编写的绘图应用程序并遇到一些(更多)问题.我有一个gui和一个工作程序(有点),我唯一的问题是用户绘制的线条和图形没有保存(在绘制下一个之后消失).
从过去的问题我了解到我将需要使用BufferedImage来存储绘图然后在我的绘画类中绘制它.
我的问题是,任何人都可以提供如何使用bufferedimage来存储和绘制绘图的基本解释/示例,如果需要,我将如何将绘制线的颜色和粗细传递到存储的数组中.
那就是全班同学.
package javapaint;
import java.awt.*;
import javax.swing.*;
public class JavaPaintUI extends javax.swing.JFrame {
/** Creates new form JavaPaintUI */
public JavaPaintUI() {
initComponents();
}
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
buttonGroup1 = new javax.swing.ButtonGroup();
buttonGroup2 = new javax.swing.ButtonGroup();
jPanel4 = new javax.swing.JPanel();
jRadioButton9 = new javax.swing.JRadioButton();
jRadioButton10 = new javax.swing.JRadioButton();
jSlider2 = new javax.swing.JSlider();
jLabel1 = new javax.swing.JLabel();
jPanel2 = new Panel2();
jPanel3 = new javax.swing.JPanel();
jRadioButton3 = new javax.swing.JRadioButton();
jRadioButton4 = new javax.swing.JRadioButton(); …Run Code Online (Sandbox Code Playgroud) 我目前正在使用JCreator,并且无法找到我的代码有什么问题,由于某种原因它不能读取我输入的内容JTextField.我不打算彻底改变我的代码,如果any1可以指出我做错了什么,或者给我一些它应该是什么样的代码示例,这将是很好的.再次,当他们做同样的事情时,不要寻找"这比这更好".
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Wall extends JApplet implements ActionListener {
double count;
Boolean Submit = false;
JButton btn1;
JTextField tf,field;
int x = 0;
int y = 575;
int x1 = 50;
int y1 = 25;
int textnumber;
Random randomNum = new Random();//initialize random variable
int count2;
public void init() {
setLayout( new FlowLayout( ) );
tf = new JTextField(5);
field = new JTextField( "<===== Enter Brick …Run Code Online (Sandbox Code Playgroud) 您好我很好奇如何解决这个问题:我在Java中使用fillArc,drawArc方法创建了一个pacman,我现在屏幕上有一个pacman人,无论方向如何,总是向右看..我的问题是..有没有办法逐个改变对象或在Java中水平翻转它?
我试图使用AffineTransform,但我没有得到我想要的文档...我应该如何使用switch语句实现这一点?我试着做以下事情但是我被困在这个部分,因为我不知道如何继续.
DrawPacMan pacman = new DrawPacMan();
DrawPacMan ghost1 = new DrawPacMan();
DrawPacMan ghost2 = new DrawPacMan();
AffineTransform pac = new AffineTransform();
public void setPacManView(int waarde) {
// set the view of pacman
switch (waarde) {
case 0 :
// here one view of pacman
break;
case 1 :
// here one view of pacman
break;
case 2 :
// here one view of pacman
break;
case 3 :
// here one view of pacman
break;
}
}
public void …Run Code Online (Sandbox Code Playgroud) 有人可以看看我下面的代码并告诉我为什么,当我更改以下两个语句时,我看不到绘制的矩形的更改.所以,如果我改变:
g.setColor(Color.black);
g.fillRect(l, w, 100, 100);
Run Code Online (Sandbox Code Playgroud)
该程序仍打印出一个黑色矩形,其尺寸相同,位于我最初开始时的位置,即使我将颜色更改为黄色或尝试更改尺寸或位置.我是BlueJ.以下是我的完整代码:
import java.awt.*;
import javax.swing.*;
public class SwingPaintDemo2 extends JComponent {
public static boolean isWall = true;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
//System.out.println("Created GUI on EDT? "+
//SwingUtilities.isEventDispatchThread());
JFrame f = new JFrame("Swing Paint Demo");
JPanel MyPanel = new JPanel();
MyPanel.setBorder(BorderFactory.createEmptyBorder(1000, 1000, 1000, 1000));
MyPanel.setPreferredSize(new Dimension(250, 200));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new MyPanel());
f.pack();
f.setVisible(true);
}
public void paintComponent(Graphics g) …Run Code Online (Sandbox Code Playgroud) 我试图在Java中使用swing绘制一个令人难以置信的基本形状,但由于某种原因它似乎没有工作.这是我从讲师那里下载的代码,他在演讲中向我们展示了这些代码,但是当我运行它时窗口打开但没有画出来,我不明白为什么.
package graphicsEx;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class Lecture1Example extends JPanel{
// This is where the JPanel gets (re-)painted when the screen is refreshed.
public void paintComponent(Graphics g) {
// Cast to Graphics2D for more features.
Graphics2D g2D = (Graphics2D) g;
Rectangle2D rect = new Rectangle2D.Double(20,30,40,50);
g2D.setColor(Color.red);
g2D.draw(rect);
g2D.fill(rect);
}
public static void main(String args[]) {
JFrame frame = new JFrame("Playing with Graphics");
frame.setSize(500, 400);
frame.setVisible(true);
frame.setContentPane(new Lecture1Example());
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Eclipse IDE.
我想制作一条直线并让它移动.我能够制作一条直线并移动直线,但是当我移动直线时箭头会移位
这是我的绘画方法
Line2D.Double line = new Line2D.Double(startX, startY, endX, endY);
g2d.draw(line);
tx.setToIdentity();
double angle = Math.atan2(line.y2 - line.y1, line.x2 - line.x1);
tx.translate(line.x2, line.y2);
tx.rotate((angle - Math.PI / 2d));
Graphics2D gClone = (Graphics2D) g2d.create();
gClone.setTransform(tx);
Polygon arrowHead = new Polygon();
arrowHead.addPoint(0, 15);
arrowHead.addPoint(-15, -15);
arrowHead.addPoint(15, -15);
Area area = new Arear(arrowHead );
Area lineArea = new Area(line);
lineArea.subtract(area);
gClone.fill(area);
gClone.dispose();
Run Code Online (Sandbox Code Playgroud)
我已经改变了startx的值并在鼠标按下和endx时开始y并在鼠标拖动时启动
我已经在JScrollPane中放置了一个JPanel对象,并且滚动按预期工作.通过覆盖paintComponent(),我试图在JPanel对象中进行自定义绘制.但是,当JPanel对象放在JScrollPane中时,JPanel不再正确绘制(而只显示其背景颜色).
因为我的应用程序要求不断更新JPanel,所以构造一个单独的线程以特定间隔重新绘制JPanel.
以下代码摘录显示了我当前的项目:
a)来自我的JPanel的paintComponent()(此方法已被裁减为仅绘画,实际绘制将是从另一个线程而不是这个大粉红色静态框提供的不断更新的BufferedImage):
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
//Render Frame
// 'RXDisplayCanvas' is the JPanel.
Graphics2D G2D = (Graphics2D)RXDisplayCanvas.getGraphics();
G2D.setColor(Color.PINK);
//800 and 600 are arbitrary values for this example, real values are calculated at runtime. The value calculation code is verified to work (as its used elsewhere in a similar scenario)
G2D.fillRect(0, 0, 800, 600);
G2D.dispose();
}
Run Code Online (Sandbox Code Playgroud)
b)定期重新绘制帧的'updater'线程:
@Override
public void run() {
long MaxFrameTime;
long Time;
while(isVisible()){
// 'FPSLimit' is a integer value (default to 30)
MaxFrameTime …Run Code Online (Sandbox Code Playgroud) 我创建了一个测试版本来简化我为你们提出的问题:
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Test extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
JLabel l = new JLabel("hello");
JPanel cp;
public Test(){
setContentPane(cp = new JPanel());
cp.add(l);
setSize(200, 200);
setVisible(true);
}
public void paint(Graphics g){
//do absolutely nothing
}
}
Run Code Online (Sandbox Code Playgroud)
当你启动程序时,你会看到一个完美的空白窗口.但是,如果删除paint方法,JLabel会显示出来!(我不得不长时间搜索这个bug,真的).现在,我如何启用一个窗口来使用图形和定期绘制组件?提前致谢
我有一个扩展JPanel的类"Map".我将它添加到扩展JFrame的类中.
public void paintComponent(Graphics g) {
super.paintComponent(g);
int width = Math.abs(startX - endX);
int height= Math.abs(startY - endY);
g.setColor(Color.RED);
g.fillRect(startX, startY, width, height);
}
Run Code Online (Sandbox Code Playgroud)
我的"Map"类还包含一个带有图像的标签.如果图像小于窗口,当我绘制一个矩形时,可以看到它.简而言之,它属于标签.
对于问题,我必须在屏幕上绘制一个圆,其中心为(280,300),半径为50。提示说:圆是具有相同宽度和高度的椭圆形。该圆的中心在此椭圆的NW角以下50像素,在其NW角右侧50像素。
有TryoutPanel类:
import java.awt.*;
import javax.swing.*;
public class TryoutPanel extends JPanel{
private Color myColor;
public TryoutPanel(Color c){
myColor = c;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
setForeground(myColor);
g.drawString("top",10,50);
g.drawLine(10,60, 200,60);
g.drawString("middle",10,80);
g.drawLine(10,90, 200,90);
g.drawString("bottom",10,110);
g.drawLine(10,120, 200,120);
g.drawRect(200,300,100,50);
g.drawOval(200,300,100,50);
for(int j = 0; j < 9; j++)
g.drawOval(50,200, 10 + 20*j, 210 - 20*j);
}
}
Run Code Online (Sandbox Code Playgroud)
我必须在下面填写代码:
public void paintComponent(Graphics g){
super.paintComponent(g);
setForeground(myColor);
//INSERT CODE HERE
Run Code Online (Sandbox Code Playgroud)
我试过了:
g.drawOval(280,300,50,50);
但是它说我使用了不正确的参数。我究竟做错了什么。
java ×10
paintcomponent ×10
swing ×10
graphics ×2
eclipse ×1
graphics2d ×1
japplet ×1
jframe ×1
jpanel ×1
jscrollpane ×1
macos ×1
paint ×1
shapes ×1