这是绘制矩形的类。它应该使用静态整数x,y作为要绘制的矩形位置的组件,这是鼠标单击的x和y组件。 x,y来自event.getX()和event.getY()的Gui3类。程序及其所有方法都可以正常工作,唯一的问题是在绘制形状时出现。
绘制形状的类
Ext.define('MyApp.MyPanel', {
extend: 'Ext.Panel',
xtype: 'myForm',
defaults: {
padding: 10
},
viewModel: {
stores: {
employeeStore: {
fields: ['name'],
data: [{
name: 'John'
}, {
name: 'Tempel'
}, {
name: 'George'
}, {
name: 'Milinda'
}]
},
}
},
items: [
{
xtype: 'combobox',
fieldLabel: 'Name',
name: 'nameField',
queryMode: 'local',
displayField: 'name',
valueField: 'name',
reference: 'emp',
bind: {
store: '{employeeStore}',
value: '{name}'
}
},{
xtype: 'dataview',
itemId: 'empList',
tpl: new Ext.XTemplate(
'<tpl for=".">',
'<div class="dataview-multisort-item">',
'<h3>{name}</h3>',
'<tpl if="passed">Selected</tpl>',
'</div>',
'</tpl>'
),
itemSelector: 'div.dataview-multisort-item',
bind: {
store: '{employeeStore}'
},
prepareData: function(data, index, record) {
var name = this.up().getViewModel().get('name');
var passed = record.get('name') == name;
return Ext.apply({passed: passed}, data);
}
}
],
initComponent: function() {
this.callParent(arguments);
var me = this;
// refresh the dataview when name is changed.
this.getViewModel().bind('{name}', function() {
var dataview = me.down('#empList');
dataview.refresh();
});
}
});
完成其他所有工作的主要课程
import java.awt.*;
import javax.swing.*;
public class DrawShapes extends JPanel {
public static int x,y;
public void paintComponent(Graphics g){
g.setColor(Color.BLUE);
g.fillRect(x,y,80,80);
}
public class GuiDemo extends Gui3{
public GuiDemo(){
x=x1;
y=y1;
}
}
}
这是从
接收x和y分量的地方 import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Gui3 extends JFrame {
private JPanel mousepanel;
private JLabel statusbar;
public static int x1=0, y1=0;
public Gui3(){
super("The title");
mousepanel = new JPanel();
mousepanel.setBackground(Color.WHITE);
add(mousepanel, BorderLayout.CENTER);
statusbar = new JLabel("Default");
add(statusbar, BorderLayout.SOUTH);
HandlerClass handler = new HandlerClass();
mousepanel.addMouseListener(handler);
mousepanel.addMouseMotionListener(handler);
}
private class HandlerClass implements MouseListener, MouseMotionListener
{
@Override
public void mouseClicked(MouseEvent event) {
statusbar.setText(String.format("Clicked at %d, %d", event.getX(),event.getY()));
组件传递给DrawShapes类。 矩形只能在角落里绘制。只要我点击
,就应该画画x1=event.getX();
y1=event.getY();
答案 0 :(得分:4)
您在左上方看到矩形的原因是x
y
和DrawShapes
中的GuiDemo
仅被分配一次,构建x1
时;在那个时间点,y1
和0
都被初始化为x1
。在点击后重新分配y1
和DrawShapes
时,此更改永远不会传播回DrawShapes
类。
我有几条建议:
x
应该有y
和DrawShapes
,我会将它们设为私有(还有谁需要它们?)和非静态(如果您需要多个setPosition
}})向DrawShapes
添加public void setPosition(int newX, int newY) {
this.x = newX;
this.y = newY;
repaint();
}
方法,以便您可以将此位置传达给将绘制矩形的对象:
setPosition
重绘非常重要(Java Swing为您管理了大量的绘图工作,但如果您正在进行自定义绘制,则需要在需要重绘时告知它。)
发生点击时使用shapes.setPosition(event.getX(), event.getY());
php.ini
警告:上面的代码未经测试,但我相信这会让你走上正确的道路。