Сила Jawa
fixin — 21.11.2014Как-то я пытался уйти из 1С и попробовал в качестве среды разработки JAVA.
Для того, чтобы написать игру типа крестиков-ноликов (рэндзю), предоставленную на картинке, потребовался огромный нечитаемый программный код:
Такая "сила" JAVA меня впечатлила и я смыл её в мусорный бак. Программирование форм, основанное на ООП - это не RAD. Это мазохизм, друзьям мои.
Но мне сказали, что в C# такого нет. Там просто добавляется процедура control_event() под событие event элемента control и никаких ООП! ;-)
Надо поизучать, таки.
А вот вам исходный код: https://yadi.sk/d/8jI6U6vocr74x
Ну или приведу его тут, если любите листинги:
/*
* CrossZeroView.java
*/
package ru.com.fixin.crosszero;
import org.jdesktop.application.Action;
import org.jdesktop.application.ResourceMap;
import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.FrameView;
import org.jdesktop.application.TaskMonitor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import javax.swing.Icon;
import javax.swing.JDialog;
import javax.swing.JFrame;
/**
* The application's main frame.
*/
public class CrossZeroView extends FrameView {
public boolean bgamestarted = false;
public CrossZeroView(SingleFrameApplication app)
{
super(app);
initComponents();
//additional by
Fixin
jTable1.setDefaultRenderer(Object.class, new MyCellRenderer());
// status bar
initialization - message timeout, idle icon and busy animation,
etc
ResourceMap resourceMap
= getResourceMap();
int messageTimeout =
resourceMap.getInteger("StatusBar.messageTimeout");
messageTimer = new
Timer(messageTimeout, new ActionListener() {
public void actionPerformed(ActionEvent e) {
statusMessageLabel.setText("");
}
});
messageTimer.setRepeats(false);
int busyAnimationRate =
resourceMap.getInteger("StatusBar.busyAnimationRate");
for (int i = 0; i <
busyIcons.length; i++) {
busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i +
"]");
}
busyIconTimer = new
Timer(busyAnimationRate, new ActionListener() {
public void actionPerformed(ActionEvent e) {
busyIconIndex = (busyIconIndex + 1) % busyIcons.length;
statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);
}
});
idleIcon =
resourceMap.getIcon("StatusBar.idleIcon");
statusAnimationLabel.setIcon(idleIcon);
progressBar.setVisible(false);
// connecting action
tasks to status bar via TaskMonitor
TaskMonitor taskMonitor
= new TaskMonitor(getApplication().getContext());
taskMonitor.addPropertyChangeListener(new
java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt)
{
String propertyName = evt.getPropertyName();
if ("started".equals(propertyName)) {
if (!busyIconTimer.isRunning()) {
statusAnimationLabel.setIcon(busyIcons[0]);
busyIconIndex = 0;
busyIconTimer.start();
}
progressBar.setVisible(true);
progressBar.setIndeterminate(true);
} else if ("done".equals(propertyName)) {
busyIconTimer.stop();
statusAnimationLabel.setIcon(idleIcon);
progressBar.setVisible(false);
progressBar.setValue(0);
} else if ("message".equals(propertyName)) {
String text = (String)(evt.getNewValue());
statusMessageLabel.setText((text == null) ? "" : text);
messageTimer.restart();
} else if ("progress".equals(propertyName)) {
int value = (Integer)(evt.getNewValue());
progressBar.setVisible(true);
progressBar.setIndeterminate(false);
progressBar.setValue(value);
}
}
});
}
@Action
public void showAboutBox() {
if (aboutBox == null)
{
JFrame mainFrame =
CrossZeroApp.getApplication().getMainFrame();
aboutBox = new CrossZeroAboutBox(mainFrame);
aboutBox.setLocationRelativeTo(mainFrame);
}
CrossZeroApp.getApplication().show(aboutBox);
}
/** This method is called from within the
constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The
content of this method is
* always regenerated by the Form
Editor.
*/
@SuppressWarnings("unchecked")
// //GEN-BEGIN:initComponents
private void initComponents() {
mainPanel = new
javax.swing.JPanel();
jScrollPane1 = new
javax.swing.JScrollPane();
jTable1 = new
javax.swing.JTable();
menuBar = new
javax.swing.JMenuBar();
javax.swing.JMenu
fileMenu = new javax.swing.JMenu();
javax.swing.JMenuItem
exitMenuItem = new javax.swing.JMenuItem();
javax.swing.JMenu
helpMenu = new javax.swing.JMenu();
javax.swing.JMenuItem
aboutMenuItem = new javax.swing.JMenuItem();
jMenu1 = new
javax.swing.JMenu();
statusPanel = new
javax.swing.JPanel();
javax.swing.JSeparator
statusPanelSeparator = new javax.swing.JSeparator();
statusMessageLabel = new
javax.swing.JLabel();
statusAnimationLabel =
new javax.swing.JLabel();
progressBar = new
javax.swing.JProgressBar();
mainPanel.setName("mainPanel"); // NOI18N
jScrollPane1.setColumnHeader(null);
jScrollPane1.setName("jScrollPane1"); // NOI18N
org.jdesktop.application.ResourceMap resourceMap =
org.jdesktop.application.Application.getInstance(ru.com.fixin.crosszero.CrossZeroApp.class).getContext().getResourceMap(CrossZeroView.class);
jTable1.setBorder(new
javax.swing.border.LineBorder(resourceMap.getColor("gameTable.border.lineColor"),
1, true)); // NOI18N
jTable1.setModel(new
javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4", "Title 5", "Title 6",
"Title 7", "Title 8", "Title 9", "Title 10", "Title 11", "Title
12", "Title 13", "Title 14", "Title 15", "Title 16", "Title 17",
"Title 18", "Title 19", "Title 20", "Title 21", "Title 22", "Title
23", "Title 24", "Title 25", "Title 26", "Title 27", "Title 28",
"Title 29", "Title 30"
}
) {
boolean[] canEdit = new boolean [] {
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, false, false, false,
false, false, false
};
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jTable1.setGridColor(resourceMap.getColor("gameTable.gridColor"));
// NOI18N
jTable1.setName("gameTable"); // NOI18N
jTable1.setRowSelectionAllowed(false);
jTable1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jScrollPane1.setViewportView(jTable1);
javax.swing.GroupLayout mainPanelLayout = new
javax.swing.GroupLayout(mainPanel);
mainPanel.setLayout(mainPanelLayout);
mainPanelLayout.setHorizontalGroup(
mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
mainPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE,
420, Short.MAX_VALUE)
.addContainerGap())
);
mainPanelLayout.setVerticalGroup(
mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
mainPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE,
319, Short.MAX_VALUE)
.addContainerGap())
);
menuBar.setName("menuBar"); // NOI18N
fileMenu.setText(resourceMap.getString("fileMenu.text")); //
NOI18N
fileMenu.setName("fileMenu"); // NOI18N
javax.swing.ActionMap
actionMap =
org.jdesktop.application.Application.getInstance(ru.com.fixin.crosszero.CrossZeroApp.class).getContext().getActionMap(CrossZeroView.class,
this);
exitMenuItem.setAction(actionMap.get("quit")); // NOI18N
exitMenuItem.setName("exitMenuItem"); // NOI18N
fileMenu.add(exitMenuItem);
menuBar.add(fileMenu);
helpMenu.setText(resourceMap.getString("helpMenu.text")); //
NOI18N
helpMenu.setName("helpMenu"); // NOI18N
aboutMenuItem.setAction(actionMap.get("showAboutBox")); //
NOI18N
aboutMenuItem.setName("aboutMenuItem"); // NOI18N
helpMenu.add(aboutMenuItem);
menuBar.add(helpMenu);
jMenu1.setText(resourceMap.getString("jMenu1.text")); // NOI18N
jMenu1.setName("jMenu1"); // NOI18N
jMenu1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenu1ActionPerformed(evt);
}
});
menuBar.add(jMenu1);
statusPanel.setName("statusPanel"); // NOI18N
statusPanelSeparator.setName("statusPanelSeparator"); // NOI18N
statusMessageLabel.setName("statusMessageLabel"); // NOI18N
statusAnimationLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
statusAnimationLabel.setName("statusAnimationLabel"); // NOI18N
progressBar.setName("progressBar"); // NOI18N
javax.swing.GroupLayout statusPanelLayout = new
javax.swing.GroupLayout(statusPanel);
statusPanel.setLayout(statusPanelLayout);
statusPanelLayout.setHorizontalGroup(
statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(statusPanelSeparator,
javax.swing.GroupLayout.DEFAULT_SIZE, 440, Short.MAX_VALUE)
.addGroup(statusPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(statusMessageLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
420, Short.MAX_VALUE)
.addComponent(statusAnimationLabel)
.addContainerGap())
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
statusPanelLayout.createSequentialGroup()
.addContainerGap(284, Short.MAX_VALUE)
.addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
statusPanelLayout.setVerticalGroup(
statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(statusPanelLayout.createSequentialGroup()
.addComponent(statusPanelSeparator,
javax.swing.GroupLayout.PREFERRED_SIZE, 2,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(statusMessageLabel)
.addComponent(statusAnimationLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
);
setComponent(mainPanel);
setMenuBar(menuBar);
setStatusBar(statusPanel);
}// //GEN-END:initComponents
private void
jMenu1ActionPerformed(java.awt.event.ActionEvent evt)
{//GEN-FIRST:event_jMenu1ActionPerformed
bgamestarted = true;
}//GEN-LAST:event_jMenu1ActionPerformed
// Variables declaration - do not
modify//GEN-BEGIN:variables
private javax.swing.JMenu jMenu1;
private javax.swing.JScrollPane
jScrollPane1;
private javax.swing.JTable jTable1;
private javax.swing.JPanel mainPanel;
private javax.swing.JMenuBar menuBar;
private javax.swing.JProgressBar
progressBar;
private javax.swing.JLabel
statusAnimationLabel;
private javax.swing.JLabel
statusMessageLabel;
private javax.swing.JPanel statusPanel;
// End of variables
declaration//GEN-END:variables
private final Timer messageTimer;
private final Timer busyIconTimer;
private final Icon idleIcon;
private final Icon[] busyIcons = new
Icon[15];
private int busyIconIndex = 0;
private JDialog aboutBox;
}