Avatar billede tripwire Nybegynder
27. august 2004 - 20:14 Der er 7 kommentarer og
1 løsning

JTable kode

Hej eksperter

Jeg sidder og er gået igang med at lave et banko spil og har følgende kode indtil videre. (lavet i netbeans)

---------- BankoGUI.java -------
import javax.swing.*;

public class BankoGUI extends javax.swing.JFrame
{

    public static void main(String args[])
    {
        new BankoGUI().show();
    }


    public BankoGUI()
    {
        initComponents();
    }


    private void initComponents()
    {
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea_Log = new javax.swing.JTextArea();
        jPanel1 = new javax.swing.JPanel();
        jTable1 = new javax.swing.JTable();
        jPanel2 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jLabel_Number_Of_Rows = new javax.swing.JLabel();
        jLabel_Rows = new javax.swing.JLabel();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();

        getContentPane().setLayout(null);

        addWindowListener(new java.awt.event.WindowAdapter()
        {
            public void windowClosing(java.awt.event.WindowEvent evt)
            {
                exitForm(evt);
            }
        });

        jScrollPane1.setViewportView(jTextArea_Log);

        getContentPane().add(jScrollPane1);
        jScrollPane1.setBounds(10, 410, 770, 100);

        jPanel1.setLayout(null);

        jPanel1.setBorder(new javax.swing.border.TitledBorder("Udtrukne numre"));
        jTable1.setBorder(new javax.swing.border.EtchedBorder());
        jTable1.setFont(new java.awt.Font("Dialog", 1, 12));
        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"},
                {"11", "12", "13", "14", "15", "16", "17", "18", "19", "20"},
                {"21", "22", "23", "24", "25", "26", "27", "28", "29", "30"},
                {"31", "32", "33", "34", "35", "36", "37", "38", "39", "40"},
                {"41", "42", "43", "44", "45", "46", "47", "48", "49", "50"},
                {"51", "52", "53", "54", "55", "56", "57", "58", "59", "60"},
                {"61", "62", "63", "64", "65", "66", "67", "68", "69", "70"},
                {"71", "72", "73", "74", "75", "76", "77", "78", "79", "80"},
                {"81", "82", "83", "84", "85", "86", "87", "88", "89", "90"}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4", "Title 5", "Title 6", "Title 7", "Title 8", "Title 9", "Title 10"
            }
        ));
        jTable1.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
        jTable1.setRowHeight(35);
        jTable1.setEnabled(false);
        jPanel1.add(jTable1);
        jTable1.setBounds(10, 20, 350, 315);

        getContentPane().add(jPanel1);
        jPanel1.setBounds(10, 10, 370, 350);

        jPanel2.setLayout(null);

        jPanel2.setBorder(new javax.swing.border.TitledBorder("Nyeste nummer"));
        getContentPane().add(jPanel2);
        jPanel2.setBounds(390, 10, 390, 310);

        jButton1.setText("Tr\u00e6k nummer");
        getContentPane().add(jButton1);
        jButton1.setBounds(390, 330, 390, 26);

        jLabel_Number_Of_Rows.setText("Antal r\u00e6kker:");
        getContentPane().add(jLabel_Number_Of_Rows);
        jLabel_Number_Of_Rows.setBounds(10, 370, 90, 16);

        jLabel_Rows.setText("1");
        getContentPane().add(jLabel_Rows);
        jLabel_Rows.setBounds(110, 370, 41, 16);

        jMenu1.setText("Menu");
        jMenuBar1.add(jMenu1);

        setJMenuBar(jMenuBar1);

        pack();
        setTitle("BankoTEST");
        setSize(800,580);

        NumberDrawn(27);


    }


    private void exitForm(java.awt.event.WindowEvent evt)
    {
        System.exit(0);
    }

    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JButton jButton1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JLabel jLabel_Number_Of_Rows;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JLabel jLabel_Rows;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JTextArea jTextArea_Log;
    private javax.swing.JTable jTable1;
    private javax.swing.JMenuBar jMenuBar1;




    public void NumberDrawn(int number)
    {



    }

}

------------- end of code -------------

Jeg har på nuværende tidspunkt 2 ting som jeg gerne ville have løst.

1. Jeg vil gerne have at de tal (1-90) som er i min JTable, står i midten af hver enkelt celle, istedet for ude til venstre i cellen.

2. Jeg har en metode "void NumberDrawn(int number)" og jeg vil gerne have lavet den metode, så når man kalder, f.eks. "NumberDrawn(27);" så bliver den celle med nummer 27 farvet rød eller en anden farve.


Håber der er nogen der kan hjælpe :)
Avatar billede mikkelbm Nybegynder
27. august 2004 - 20:47 #1
re. 1:

DefaultTableCellRenderer  dtc  =  new DefaultTableCellRenderer();
dtc.setHorizontalAlignment(JTextField.CENTER);
       
jTable1.setDefaultRenderer(Object.class, dtc);

bare huske at importe:

import javax.swing.table.*;
Avatar billede tripwire Nybegynder
27. august 2004 - 21:10 #2
Meget smukt.
Det var præcis sådan jeg håbede det kunne komme til at se ud. TAK
Læg et svar, så er der 15 point. (jeg accepterer lidt senere, da jeg lige vil se om der bliver svaret på nummer 2)
Avatar billede mikkelbm Nybegynder
27. august 2004 - 21:31 #3
Ta' et kig på følgende:
Jeg har siddet og leget lidt med det.

Jeg har brugt din egen kode til at gå ud fra, så er det lettere for dig at overskue hvad der sker.
Er du i tvivl spørger du bare...


import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;

public class BankoGUI extends javax.swing.JFrame
{
   
    private boolean[][] udtrukket = new boolean[9][10];
   
    public static void main(String args[])
    {
        new BankoGUI().show();
    }


    public BankoGUI()
    {
        initComponents();
    }


    private void initComponents()
    {
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea_Log = new javax.swing.JTextArea();
        jPanel1 = new javax.swing.JPanel();
        jTable1 = new javax.swing.JTable();
       
        DefaultTableCellRenderer renderer = new MyDefaultTableCellRenderer();
       
        jTable1.setDefaultRenderer(Object.class, renderer);
       
        jPanel2 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jLabel_Number_Of_Rows = new javax.swing.JLabel();
        jLabel_Rows = new javax.swing.JLabel();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
       
        getContentPane().setLayout(null);

        addWindowListener(new java.awt.event.WindowAdapter()
        {
            public void windowClosing(java.awt.event.WindowEvent evt)
            {
                exitForm(evt);
            }
        });

        jScrollPane1.setViewportView(jTextArea_Log);

        getContentPane().add(jScrollPane1);
        jScrollPane1.setBounds(10, 410, 770, 100);

        jPanel1.setLayout(null);

        jPanel1.setBorder(new javax.swing.border.TitledBorder("Udtrukne numre"));
        jTable1.setBorder(new javax.swing.border.EtchedBorder());
        jTable1.setFont(new java.awt.Font("Dialog", 1, 12));
       
        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"},
                {"11", "12", "13", "14", "15", "16", "17", "18", "19", "20"},
                {"21", "22", "23", "24", "25", "26", "27", "28", "29", "30"},
                {"31", "32", "33", "34", "35", "36", "37", "38", "39", "40"},
                {"41", "42", "43", "44", "45", "46", "47", "48", "49", "50"},
                {"51", "52", "53", "54", "55", "56", "57", "58", "59", "60"},
                {"61", "62", "63", "64", "65", "66", "67", "68", "69", "70"},
                {"71", "72", "73", "74", "75", "76", "77", "78", "79", "80"},
                {"81", "82", "83", "84", "85", "86", "87", "88", "89", "90"}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4", "Title 5", "Title 6", "Title 7", "Title 8", "Title 9", "Title 10"
            }
        ));
       
        jTable1.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
        jTable1.setRowHeight(35);
        jTable1.setEnabled(false);
        jPanel1.add(jTable1);
        jTable1.setBounds(10, 20, 350, 315);

        getContentPane().add(jPanel1);
        jPanel1.setBounds(10, 10, 370, 350);

        jPanel2.setLayout(null);

        jPanel2.setBorder(new javax.swing.border.TitledBorder("Nyeste nummer"));
        getContentPane().add(jPanel2);
        jPanel2.setBounds(390, 10, 390, 310);

        jButton1.setText("Tr\u00e6k nummer");
        getContentPane().add(jButton1);
        jButton1.setBounds(390, 330, 390, 26);

        jLabel_Number_Of_Rows.setText("Antal r\u00e6kker:");
        getContentPane().add(jLabel_Number_Of_Rows);
        jLabel_Number_Of_Rows.setBounds(10, 370, 90, 16);

        jLabel_Rows.setText("1");
        getContentPane().add(jLabel_Rows);
        jLabel_Rows.setBounds(110, 370, 41, 16);

        jMenu1.setText("Menu");
        jMenuBar1.add(jMenu1);

        setJMenuBar(jMenuBar1);

        pack();
        setTitle("BankoTEST");
        setSize(800,580);

        NumberDrawn(27);
        NumberDrawn(29);
        NumberDrawn(37);
    }


    private void exitForm(java.awt.event.WindowEvent evt)
    {
        System.exit(0);
    }

    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JButton jButton1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JLabel jLabel_Number_Of_Rows;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JLabel jLabel_Rows;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JTextArea jTextArea_Log;
    private javax.swing.JTable jTable1;
    private javax.swing.JMenuBar jMenuBar1;


    public void NumberDrawn(int number)
    {
        int row = number / 10;
       
        // trækker 1 fra, da arrayet starter med 0
        int column = number % 10 - 1;
        System.out.println ("row: " + row + " column: " + column);
        udtrukket[row][column] = true;
    }
   
    private class MyDefaultTableCellRenderer extends DefaultTableCellRenderer
    {
        public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected,boolean hasFocus, int row, int column)
        {
            Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
       
            if (udtrukket[row][column])
                comp.setBackground(Color.red);
            else
                comp.setBackground(Color.white);
            return comp;
        }
   
        public int getHorizontalAlignment()
        {
            return JLabel.CENTER;
        }
    }

}
Avatar billede mikkelbm Nybegynder
27. august 2004 - 21:32 #4
Det du skal lægge mærke til er klassen MyDefaultTableCellRenderer - det er den der kontrollere alt hvad der har med cellerne at gøre.
Avatar billede mikkelbm Nybegynder
27. august 2004 - 21:50 #5
Hov!

Fandt lige en fejl i numberDraw() metoden - så nu har jeg lavet den idiot-sikret (kunne ikke lige kringle en fancy måde at gøre det på:)

public void NumberDrawn(int number)
{
    int columns = jTable1.getModel().getColumnCount();
    int rows = jTable1.getModel().getRowCount();
       
    for (int i = 0; i<rows; i++)
    {
        for (int j = 0; j<columns; j++)
        {
        String v = jTable1.getModel().getValueAt(i, j).toString();
               
        if (number == Integer.valueOf(v).intValue())
        udtrukket[i][j] = true;
        }
    }
}
Avatar billede tripwire Nybegynder
27. august 2004 - 21:50 #6
Den vil ikke "godtage" nummer 90

NumberDrawn(90);

row: 2 column: 6
row: 2 column: 8
row: 3 column: 6
row: 9 column: -1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
        at BankoGUI.NumberDrawn(BankoGUI.java:146)
        at BankoGUI.initComponents(BankoGUI.java:118)
        at BankoGUI.<init>(BankoGUI.java:18)
        at BankoGUI.main(BankoGUI.java:12)


Men ellers er det helt perfekt...
Avatar billede mikkelbm Nybegynder
27. august 2004 - 21:55 #7
Det er fikset i min kommentar: 27/08-2004 21:50:19

:)
Avatar billede tripwire Nybegynder
27. august 2004 - 22:01 #8
Sorry.. det så jeg ikke lige :)

men MANGE TAK.. det er super det her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester