package threeDAssignment;
import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import javax.swing.Box; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel;
@SuppressWarnings("serial") public class LayerOptionDialog extends JDialog implements ActionListener {
public LayerOptionDialog(JFrame owner, String title) {
super(owner,title);
setSize(350, 150);
setLocation(new Point(0, owner.getHeight()-155));
setResizable(false);
grid=((DisplayUI)owner).getGrid();
canvas=((DisplayUI)owner).getCanvas();
createDialog();
addListeners();
}
private void addListeners() {
cmbDirection.addActionListener(this);
cmbLayer.addActionListener(this);
btnBack.addActionListener(this);
btnForward.addActionListener(this);
btnFastBack.addActionListener(this);
btnFastForward.addActionListener(this);
btnStop.addActionListener(this);
btnReset.addActionListener(this);
btnClose.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
Object source=e.getSource();
if(source.equals(cmbDirection))
{
if(cmbDirection.getSelectedIndex()>0){
DefaultComboBoxModel cmbLayerModel=(DefaultComboBoxModel)cmbLayer.getModel();
cmbLayerModel.removeAllElements();
if(cmbDirection.getSelectedIndex()==1){
int NX=grid.getNX();
for(int i=1; i<=NX; i++){
cmbLayerModel.addElement(i);
}
}else if(cmbDirection.getSelectedIndex()==2){
int NY=grid.getNY();
for(int i=1; i<=NY; i++){
cmbLayerModel.addElement(i);
}
}
else if(cmbDirection.getSelectedIndex()==3){
int NZ=grid.getNZ();
for(int i=1; i<=NZ; i++){
cmbLayerModel.addElement(i);
}
}
cmbLayer.repaint();
}else{
DefaultComboBoxModel cmbLayerModel=(DefaultComboBoxModel)cmbLayer.getModel();
cmbLayerModel.removeAllElements();
cmbLayer.repaint();
}
}
else if(source.equals(cmbLayer)){
showGridLayer(0);
}
else if(source.equals(btnForward)){
showGridLayer(1);
}
else if(source.equals(btnBack)){
showGridLayer(-1);
}
else if (source.equals(btnFastForward)) {
isStop=false;
if (cmbDirection.getSelectedIndex() > 0) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
while (Integer.parseInt(cmbLayer.getSelectedItem().toString()) < ((cmbDirection.getSelectedIndex()==1)?grid.getNX():((cmbDirection.getSelectedIndex()==2)?grid.getNY():grid.getNZ()))) {
if(isStop)
return;
showGridLayer(1);
if(Integer.parseInt(cmbLayer.getSelectedItem().toString()) == ((cmbDirection.getSelectedIndex()==1)?grid.getNX():((cmbDirection.getSelectedIndex()==2)?grid.getNY():grid.getNZ()))){
return;
}
try {
Thread.sleep(300);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}
});
t.start();
}
}
else if (source.equals(btnFastBack)) {
isStop=false;
if (cmbDirection.getSelectedIndex() > 0) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
while (Integer.parseInt(cmbLayer.getSelectedItem().toString()) > 0) {
if(isStop)
return;
showGridLayer(-1);
if(Integer.parseInt(cmbLayer.getSelectedItem().toString())==1)
return;
try {
Thread.sleep(300);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}
});
t.start();
}
}
else if(source.equals(btnReset)){
cmbDirection.setSelectedIndex(0);
DefaultComboBoxModel cmbLayerModel=(DefaultComboBoxModel)cmbLayer.getModel();
cmbLayerModel.removeAllElements();
cmbLayer.repaint();
canvas.showLayer(0);
}
else if(source.equals(btnClose)){
this.dispose();
}
else if(source.equals(btnStop)){
// t.interrupt(); isStop=true; } }
private void showGridLayer(int i) {
if(cmbDirection.getSelectedIndex()>0){
DefaultComboBoxModel cmbLayerModel=(DefaultComboBoxModel)cmbLayer.getModel();
if(cmbLayerModel.getSize()>0){
int layer=Integer.parseInt(cmbLayer.getSelectedItem().toString());
if(cmbDirection.getSelectedIndex()==1){
if((layer+i)<=grid.getNX() && (layer+i)>0){
canvas.showLayer(layer+i);
cmbLayer.setSelectedItem(layer+i);
}
}else if(cmbDirection.getSelectedIndex()==2){
if((layer+i)<=grid.getNY() && (layer+i)>0){
canvas.showLayer(grid.getNX()+layer+i);
cmbLayer.setSelectedItem(layer+i);
}
}else if(cmbDirection.getSelectedIndex()==3){
if((layer+i)<=grid.getNZ() && (layer+i)>0){
canvas.showLayer(grid.getNX()+grid.getNY()+layer+i);
cmbLayer.setSelectedItem(layer+i);
}
}
}
}else{
canvas.showLayer(0);
}
}
private void createDialog() {
setLayout(new GridBagLayout());
GridBagConstraints gbc=new GridBagConstraints();
Insets ins=new Insets(10, 2, 10, 2);
gbc.anchor=GridBagConstraints.FIRST_LINE_START;
gbc.fill=GridBagConstraints.BOTH;
gbc.insets=ins;
gbc.gridx=0;
gbc.gridy=0;
add(new JLabel("Direction :"),gbc);
cmbDirection=new JComboBox(new Object[]{"Select","X-Direction","Y-Directiion","Z-Direction"});
gbc.gridx=1;
gbc.gridwidth=2;
add(cmbDirection,gbc);
gbc.gridx=2;
gbc.gridwidth=1;
add(Box.createHorizontalStrut(10),gbc);
gbc.gridx=3;
add(new JLabel(" Layer :"),gbc);
cmbLayer=new JComboBox();
gbc.gridx=4;
add(cmbLayer,gbc);
btnFastBack=new JButton("<<<");
gbc.gridx=0;
gbc.gridy=1;
add(btnFastBack,gbc);
btnBack=new JButton("<<");
gbc.gridx=1;
add(btnBack,gbc);
btnStop=new JButton("...");
gbc.gridx=2;
add(btnStop,gbc);
btnForward=new JButton(">>");
gbc.gridx=3;
add(btnForward,gbc);
btnFastForward=new JButton(">>>");
gbc.gridx=4;
add(btnFastForward,gbc);
gbc.gridx=0;
gbc.gridy=2;
gbc.gridwidth=2;
add(Box.createHorizontalStrut(50),gbc);
btnReset=new JButton("Reset");
gbc.gridx=1;
gbc.gridwidth=1;
add(btnReset,gbc);
gbc.gridx=2;
add(Box.createHorizontalStrut(50),gbc);
btnClose=new JButton("Close");
gbc.gridx=3;
add(btnClose,gbc);
}
private Grid grid;
private ThreeDCanvas canvas;
private JComboBox cmbLayer;
private JComboBox cmbDirection;
private JButton btnBack;
private JButton btnForward;
private JButton btnFastBack;
private JButton btnFastForward;
private JButton btnStop;
private JButton btnReset;
private JButton btnClose;
private boolean isStop=false;
}