Witam jestem nowicjuszem jesli chodzi o programowanie. Mam kilka problemow których nie jestem w stanie rozwiązać. Po pierwsze po odpaleniu programu widoczna jest tylko tabela, dopiero po najechaniu, kliknieciu lub zminimalizowaniu okna pojawiaja sie elemety. Po drugie tabela nie odswieza sie. Po trzecie, w sumie to nie problem ale prosba zeby ktos ogarniajacy mvc spojrzał na kod i powiedzial czy jest on dobrze napisany jesli nie to co jest zle i co mam poprawic.
Model
import java.util.Random;
import javax.swing.table.AbstractTableModel;
public class AplikacjaModel extends AbstractTableModel
{
private final int countRowTable = 5;
private final int countColumnTable = 5;
private Integer[][] data = new Integer[countRowTable][countColumnTable];
private String[] colName = {"1","2","3","4","5"};
public AplikacjaModel() {
super();
setZeroTable();
}
public int getColumnCount() {
return countColumnTable;
}
public int getRowCount() {
return countColumnTable;
}
public Object getValueAt(int row, int col) {
Object object = (Object) data[row][col];
return object;
}
public Integer[][] getIntegerValuesTable() {
return data;
}
public String getStringValuesTable() {
String str = "";
for(int i=0; i<countRowTable; i++)
for(int j=0; j<countColumnTable; j++) {
str = str + data[i][j] +" ";
}
return str;
}
public String getColumnName(int col) {
return colName[col];
}
public String[] getColumnNames() {
return colName;
}
public void setValue(Integer value, int row, int col) {
data[row][col] = value;
fireTableDataChanged();
}
public void setRandomTable() {
Random random = new Random();
for(int i=0; i<countRowTable; i++)
for(int j=0; j<countColumnTable; j++) {
// ograniczenie znaku liczby i zakresu do 10000
data[i][j] = Math.abs(random.nextInt()) % 10000;
}
fireTableDataChanged();
}
public void setZeroTable() {
for(int i=0; i<countRowTable; i++)
for(int j=0; j<countColumnTable; j++) {
data[i][j] = new Integer(0);
}
fireTableDataChanged();
}
public Integer calculateSum() {
Integer sum = new Integer(0);
for(int i=0; i<countRowTable; i++)
for(int j=0; j<countColumnTable; j++) {
sum = sum + data[i][j];
}
return sum;
}
public Float calculateAverage() {
Float avg = new Float(0.0);
Integer sum = calculateSum();
if(sum > 0) avg = (sum.floatValue())/(countRowTable*countColumnTable);
return avg;
}
public int calculateMax() // oblicza liczbe max
{
int maximum = data[0][0];
int minimum = data[0][0];
for(int i=0; i<data.length; i++)
{
for(int j=0; j<data.length; j++)
if(data[i][j]>maximum)
{
maximum=data[i][j];
}
else if(data[i][j]<minimum)
{
minimum=data[i][j];
}
}
return maximum;
}
public int calculateMin() //oblicza liczbe min
{
int maximum = data[0][0];
int minimum = data[0][0];
for(int i=0; i<data.length; i++)
{
for(int j=0; j<data.length; j++)
if(data[i][j]>maximum)
{
maximum=data[i][j];
}
else if(data[i][j]<minimum)
{
minimum=data[i][j];
}
}
return minimum;
}
}
View
import java.awt.Color;
import java.awt.TextField;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.table.TableModel;
public class AplikacjaView extends JFrame
{
private JLabel lblNumerKolumny, lblNumerWiersza, lblWprowadzLiczbe, lblWybierzObiczenia;
private JComboBox comboBox, comboBox_1;
private JTextField textField,textField_1;
private JTable table;
private JToolBar toolBar;
private JButton btnZapisz, btnDodaj, btnWyzeruj, btnWypelnij, btnOblicz;
private JButton btZapisz, btDodaj, btWyzeruj, btWypelnij, btSuma, btSrednia, btMin, btMax, btInformacje, btPomoc;
private JMenuBar menuBar;
private JMenu mnPlik, mnTabela, mnObliczenia, mnPomoc;
private JScrollPane tableScrollPane;
public AplikacjaView()
{
setFont(null);
setForeground(new Color(240, 240, 240));
setBounds(100, 100, 700, 470);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
setVisible(true);
toolBar = new JToolBar();
toolBar.setBounds(0, 0, 682, 25);
getContentPane().add(toolBar);
btZapisz = new JButton("Zapisz");
toolBar.add(btZapisz);
btDodaj = new JButton("Dodaj");
toolBar.add(btDodaj);
btWyzeruj = new JButton("Wyzeruj");
toolBar.add(btWyzeruj);
btWypelnij = new JButton("Wypelnij");
toolBar.add(btWypelnij);
btSuma = new JButton("Suma");
toolBar.add(btSuma);
btSrednia = new JButton("Srednia");
toolBar.add(btSrednia);
btMin = new JButton("Min");
toolBar.add(btMin);
btMax = new JButton("Max");
toolBar.add(btMax);
btPomoc = new JButton("Pomoc");
toolBar.add(btPomoc);
btInformacje = new JButton("Informacje");
toolBar.add(btInformacje);
JPanel panel = new JPanel();
panel.setBounds(0, 25, 682, 372);
getContentPane().add(panel);
panel.setLayout(null);
lblWprowadzLiczbe = new JLabel("Wprowadz liczbe");
lblWprowadzLiczbe.setBounds(12, 13, 104, 16);
panel.add(lblWprowadzLiczbe);
textField = new JTextField();
textField.setBounds(119, 10, 116, 22);
panel.add(textField);
textField.setColumns(10);
lblNumerWiersza = new JLabel("Numer wiersza");
lblNumerWiersza.setBounds(260, 13, 93, 16);
panel.add(lblNumerWiersza);
lblNumerKolumny = new JLabel("Numer kolumny");
lblNumerKolumny.setBounds(441, 16, 93, 16);
panel.add(lblNumerKolumny);
table = new JTable(new AplikacjaModel());
table.setBounds(10, 63, 520, 103);
panel.add(table);
tableScrollPane = new JScrollPane(table);
tableScrollPane.setBounds(10, 63, 520, 103);
panel.add(tableScrollPane);
btnDodaj = new JButton("Dodaj");
btnDodaj.setBounds(557, 58, 97, 25);
panel.add(btnDodaj);
btnWypelnij = new JButton("Wypelnij");
btnWypelnij.setBounds(557, 96, 97, 25);
panel.add(btnWypelnij);
btnWyzeruj = new JButton("Wyzeruj");
btnWyzeruj.setBounds(557, 134, 97, 25);
panel.add(btnWyzeruj);
btnZapisz = new JButton("Zapisz");
btnZapisz.setBounds(557, 172, 97, 25);
panel.add(btnZapisz);
lblWybierzObiczenia = new JLabel("Wybierz obiczenia: ");
lblWybierzObiczenia.setBounds(12, 176, 116, 16);
panel.add(lblWybierzObiczenia);
textField_1 = new JTextField();
textField_1.setEditable(false);
textField_1.setBounds(76, 242, 522, 102);
panel.add(textField_1);
btnOblicz = new JButton("Oblicz");
btnOblicz.setBounds(241, 172, 97, 25);
panel.add(btnOblicz);
String[] selections = { "Suma", "srednia", "Minimum", "Maximum" };
JList list = new JList(selections);
list.setBounds(136, 170, 64, 79);
panel.add(list);
comboBox = new JComboBox();
comboBox.setBounds(365, 10, 42, 22);
comboBox.addItem("1");
comboBox.addItem("2");
comboBox.addItem("3");
comboBox.addItem("4");
comboBox.addItem("5");
panel.add(comboBox);
comboBox_1 = new JComboBox();
comboBox_1.setBounds(546, 13, 42, 22);
comboBox_1.addItem("1");
comboBox_1.addItem("2");
comboBox_1.addItem("3");
comboBox_1.addItem("4");
comboBox_1.addItem("5");
panel.add(comboBox_1);
menuBar = new JMenuBar();
setJMenuBar(menuBar);
mnPlik = new JMenu("Plik");
menuBar.add(mnPlik);
mnTabela = new JMenu("Tabela");
menuBar.add(mnTabela);
mnObliczenia = new JMenu("Obliczenia");
menuBar.add(mnObliczenia);
mnPomoc = new JMenu("Pomoc");
menuBar.add(mnPomoc);
}
public void setSuma(int suma)
{
textField_1.setText(Integer.toString(suma));
}
public void setSrednia(float srednia)
{
textField_1.setText(Float.toString(srednia));
}
public void setMin(int min)
{
textField_1.setText(Integer.toString(min));
}
public void setMax(int max)
{
textField_1.setText(Integer.toString(max));
}
public JButton getBtPomoc()
{
return btPomoc;
}
public JButton getBtInformacje()
{
return btInformacje;
}
public JButton getBtMax()
{
return btMax;
}
public JButton getBtMin()
{
return btMin;
}
public JButton getBtSrednia()
{
return btSrednia;
}
public JButton getBtZapsisz()
{
return btZapisz;
}
public JButton getBtSuma()
{
return btSuma;
}
public JButton getBtWypelnij()
{
return btWypelnij;
}
public JButton getBtWyzeruj()
{
return btWyzeruj;
}
public JButton getBtDodaj()
{
return btnDodaj;
}
public JButton getBtZapisz()
{
return btZapisz;
}
public JButton getBtnOblicz()
{
return btnOblicz;
}
public JButton getBtnWypelnij()
{
return btnWypelnij;
}
public JButton getBtnWyzeruj()
{
return btnWyzeruj;
}
public JButton getBtnDodaj()
{
return btnDodaj;
}
public JButton getBtnZapisz()
{
return btnZapisz;
}
void addCalculateListener(ActionListener listenForCalcButton)
{
btnZapisz.addActionListener(listenForCalcButton);
btnDodaj.addActionListener(listenForCalcButton);
btnWyzeruj.addActionListener(listenForCalcButton);
btnWypelnij.addActionListener(listenForCalcButton);
btnOblicz.addActionListener(listenForCalcButton);
btSuma.addActionListener(listenForCalcButton);
btZapisz.addActionListener(listenForCalcButton);
btDodaj.addActionListener(listenForCalcButton);
btWyzeruj.addActionListener(listenForCalcButton);
btWypelnij.addActionListener(listenForCalcButton);
btSrednia.addActionListener(listenForCalcButton);
btMin.addActionListener(listenForCalcButton);
btMax.addActionListener(listenForCalcButton);
btInformacje.addActionListener(listenForCalcButton);
btPomoc.addActionListener(listenForCalcButton);
}
void displayErrorMessage(String errorMessage)
{
JOptionPane.showMessageDialog( null, this, errorMessage, 0);
}
}
Controller
{
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class AplikacjaController
{
private AplikacjaModel theModel;
private AplikacjaView theView;
public AplikacjaController(AplikacjaModel theModel, AplikacjaView theView)
{
this.theModel = theModel;
this.theView = theView;
this.theView.addCalculateListener(new CalculateListener());
}
class CalculateListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
Object zrodlo = e.getSource();
// bt
if(zrodlo==theView.getBtSuma())
{
theView.setSuma(theModel.calculateSum());
}
else if(zrodlo==theView.getBtMin())
{
theView.setMin(theModel.calculateMin());
}
else if(zrodlo==theView.getBtMax())
{
theView.setMax(theModel.calculateMax());
}
else if(zrodlo==theView.getBtSrednia())
{
theView.setSrednia(theModel.calculateAverage());
}
else if(zrodlo==theView.getBtWypelnij())
{
theModel.setRandomTable();
}
else if(zrodlo==theView.getBtWyzeruj())
{
theModel.setZeroTable();
}
else if(zrodlo==theView.getBtZapisz())
{
theModel.setZeroTable();
}
// btn
else if(zrodlo==theView.getBtnWypelnij())
{
theModel.setRandomTable();
}
else if(zrodlo==theView.getBtnWyzeruj())
{
theModel.setZeroTable();
}
}
}
}
Test
public class AplikacjaTest {
public static void main(String[] args)
{
AplikacjaView theView = new AplikacjaView();
AplikacjaModel theModel = new AplikacjaModel();
AplikacjaController theController = new AplikacjaController(theModel, theView);
}
}