Java 要创建一个使用鼠标输入并实现drawLines()的框架
我试图创建一个从鼠标输入的框架,并使用Java 要创建一个使用鼠标输入并实现drawLines()的框架,java,swing,Java,Swing,我试图创建一个从鼠标输入的框架,并使用drawLines()在框架上制作x/o网格。但我只能做其中一个 这是我的密码: public class Test extends JPanel { public static void main(String[] args) { Test t = new Test(); t.dispFrame(); } public static void dispFrame() {
drawLines()
在框架上制作x/o网格。但我只能做其中一个
这是我的密码:
public class Test extends JPanel {
public static void main(String[] args) {
Test t = new Test();
t.dispFrame();
}
public static void dispFrame()
{
JFrame frame = new JFrame("My New Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(300, 300));
frame.setResizable(false);
JPanel panel=new JPanel();
panel.addMouseListener(new MouseListener()
{
@Override
public void mouseClicked(MouseEvent e) {
System.out.println(":MOUSE_CLICK_EVENT:");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("\n:MOUSE_PRESSED_EVENT:");
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println(":MOUSE_RELEASED_EVENT:");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println(":MOUSE_ENTER_EVENT:");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println(":MOUSE_EXITED_EVENT:");
}
});
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawLine(30,100,270,100);
g.drawLine(30,200,270,200);
g.drawLine(100,35,100,250);
g.drawLine(200,35,200,250);
}
}
如果要覆盖面板上的
paintComponent()
方法,应执行以下操作:
JPanel panel = new JPanel() {
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawLine(30,100,270,100);
g.drawLine(30,200,270,200);
g.drawLine(100,35,100,250);
g.drawLine(200,35,200,250);
}
};
在您的代码中,您正在覆盖
Test
类中的paintComponent(),如果您的Test
类本身不是子类ComponentJFrame没有paintComponent方法,并且您无论如何都不应该覆盖顶级容器的绘制Jpanel没有采用StringStart的构造函数,请看一看可能会对整个设计是错误的。例如,最好扩展JFrame而不是JPanel。无论如何,它不会与一个油漆组件。不幸的是,我现在无法编写示例,但您应该看看您可以在Oracle的website@prmottajr实际上,设计正朝着正确的方向发展,从JFrame扩展到单个用例,而且,您并没有真正扩展框架本身的功能。您还应该避免覆盖顶层容器的绘制,因为它们不是双缓冲的,并且它们的子组件可以使用调用的frames-paint方法独立绘制,这会导致无休止的奇怪。将定制绘画放入类似JPanel的东西中是更好的选择solution@MadProgrammer嗯,好吧,你说得有道理。我想的更多的是一个简单的例子。但是,如果这个想法是创建一个新的(游戏板)组件,它能够自己绘制,那么添加MouseListener作为一个匿名的内部类,可读性就会很差。我认为这将取决于目标,我更喜欢一个可以扩展JPanel的板和一个在游戏创建过程中添加的单独鼠标听写器,但我认为这与问题无关