Java:如何使用变量编辑JFrame?
我对Java编程相当陌生,我不明白为什么这段代码总是生成一个空白的JFrame: mainClass.java:Java:如何使用变量编辑JFrame?,java,list,arraylist,jframe,Java,List,Arraylist,Jframe,我对Java编程相当陌生,我不明白为什么这段代码总是生成一个空白的JFrame: mainClass.java: import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JFrame; public class mainClass { public static void main(String[] args) { drawing d = new d
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
public class mainClass {
public static void main(String[] args) {
drawing d = new drawing();
d.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
d.setSize(1000, 1000);
d.setTitle("Test Game");
d.setVisible(true);
d.repaint();
d.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
d.repaint();
}
});
}
}
import java.awt.event.*;
import javax.swing.*;
public class mainClass {
private static int x, y;
private static drawing d = new drawing();
public static void main(String[] args) {
JFrame frame = new JFrame("Mouse");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1000, 1000);
frame.setResizable(false);
frame.add(d);
d.addMouseListener(new AL());
}
static class AL extends MouseAdapter{
public void mousePressed(MouseEvent e) {
x = e.getX();
y = e.getY();
d.draw(x,y);
}
}
}
drawing.java:
import java.awt.*;
import javax.swing.*;
import java.util.ArrayList;
import java.util.List;
import java.awt.event.*;
public class drawing extends JFrame implements MouseListener{
public List<units> p1 = new ArrayList<units>();
public List<units> p2 = new ArrayList<units>();
JFrame frame = new JFrame();
public void paint(Graphics g) {
for(units u : p1) {
g.setColor(new Color(0,0,255));
g.drawRect(u.unitX-1, u.unitY-1, u.unitX+1, u.unitY+1);
}
}
public void mousePressed(MouseEvent e) {
int x = e.getX();
int y = e.getY();
p1.add(new units(x,y));
boolean tryPrint = true;
if(p1.size()==10 && tryPrint) {
for(units u : p1) {
System.out.println(u.unitX + "," + u.unitY);
}
tryPrint = false;
}
frame.repaint();
}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
}
import java.awt.*;
import javax.swing.*;
import java.util.ArrayList;
import java.util.List;
public class drawing extends JPanel {
public void draw(int x, int y) {
p1.add(new ArrayList<Integer>());
p1.get(p1.size()-1).add(x);
p1.get(p1.size()-1).add(y);
repaint();
}
public List<List<Integer>> p1 = new ArrayList<List<Integer>>();
public List<List<Integer>> p2 = new ArrayList<List<Integer>>();
public void paintComponent(Graphics g) {
super.paintComponent(g);
for(List<Integer> u : p1) {
g.setColor(new Color(0,0,255));
g.fillRect(u.get(0)-1, u.get(1)-1, 3, 3);
}
}
}
对不起,代码太冗长了。我相信问题在于我对变量或类的处理。感谢您的帮助
此外,此代码经过编辑,因此可能是某些注释没有意义的原因。首先,我建议您使用更内聚的类。除此之外,我想说的是,您需要重写JFrame的paint方法,而不是为它创建一个新类,请参见以下示例: 我希望你能完成你的申请 问候,
-Rod问题似乎在于我将绘图类包含到JFrame中,以及该JFrame的位置。我最终解决的代码如下: mainClass.java:
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
public class mainClass {
public static void main(String[] args) {
drawing d = new drawing();
d.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
d.setSize(1000, 1000);
d.setTitle("Test Game");
d.setVisible(true);
d.repaint();
d.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
d.repaint();
}
});
}
}
import java.awt.event.*;
import javax.swing.*;
public class mainClass {
private static int x, y;
private static drawing d = new drawing();
public static void main(String[] args) {
JFrame frame = new JFrame("Mouse");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1000, 1000);
frame.setResizable(false);
frame.add(d);
d.addMouseListener(new AL());
}
static class AL extends MouseAdapter{
public void mousePressed(MouseEvent e) {
x = e.getX();
y = e.getY();
d.draw(x,y);
}
}
}
drawing.java:
import java.awt.*;
import javax.swing.*;
import java.util.ArrayList;
import java.util.List;
import java.awt.event.*;
public class drawing extends JFrame implements MouseListener{
public List<units> p1 = new ArrayList<units>();
public List<units> p2 = new ArrayList<units>();
JFrame frame = new JFrame();
public void paint(Graphics g) {
for(units u : p1) {
g.setColor(new Color(0,0,255));
g.drawRect(u.unitX-1, u.unitY-1, u.unitX+1, u.unitY+1);
}
}
public void mousePressed(MouseEvent e) {
int x = e.getX();
int y = e.getY();
p1.add(new units(x,y));
boolean tryPrint = true;
if(p1.size()==10 && tryPrint) {
for(units u : p1) {
System.out.println(u.unitX + "," + u.unitY);
}
tryPrint = false;
}
frame.repaint();
}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
}
import java.awt.*;
import javax.swing.*;
import java.util.ArrayList;
import java.util.List;
public class drawing extends JPanel {
public void draw(int x, int y) {
p1.add(new ArrayList<Integer>());
p1.get(p1.size()-1).add(x);
p1.get(p1.size()-1).add(y);
repaint();
}
public List<List<Integer>> p1 = new ArrayList<List<Integer>>();
public List<List<Integer>> p2 = new ArrayList<List<Integer>>();
public void paintComponent(Graphics g) {
super.paintComponent(g);
for(List<Integer> u : p1) {
g.setColor(new Color(0,0,255));
g.fillRect(u.get(0)-1, u.get(1)-1, 3, 3);
}
}
}
import java.awt.*;
导入javax.swing.*;
导入java.util.ArrayList;
导入java.util.List;
公共类绘图扩展了JPanel{
公共无效提款(整数x,整数y){
p1.添加(新的ArrayList());
p1.get(p1.size()-1)、add(x);
p1.get(p1.size()-1)、add(y);
重新油漆();
}
公共列表p1=新的ArrayList();
public List p2=新的ArrayList();
公共组件(图形g){
超级组件(g);
对于(列表u:p1){
g、 setColor(新颜色(0,0255));
g、 fillRect(u.get(0)-1,u.get(1)-1,3,3);
}
}
}
在mainClass
和drawing
之间有一个断开的连接,因为每个都在创建一个新的实例,所以它们没有共享相同的信息。我认为您的设计是错误的。与管理MouseListener
和点不同,drawing
应该是,你不能仅仅创建一个新的mainClass实例(mainClass m=new mainClass();
),并期望它在启动过程中与先前创建的实例交互。此外,p1
和p2
列表应该只属于新的JComponent类。我现在遇到了一个框架为空的问题,这可能是因为我将MouseEvent和点切换到了绘图类。你知道为什么会发生这种情况吗?请@Bug将你的新代码放在这里,然后我们可以评估正在发生的事情。另外,如果你能用代码展示解决方案,那就太好了,谢谢