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 :)
Annonceindlæg tema
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.*;
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)
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; } } }
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.
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; } } }
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...
27. august 2004 - 21:55
#7
Det er fikset i min kommentar: 27/08-2004 21:50:19 :)
27. august 2004 - 22:01
#8
Sorry.. det så jeg ikke lige :) men MANGE TAK.. det er super det her
Kurser inden for grundlæggende programmering