/*
* Copyright ( c ) 2010 , 2015 , Oracle and / or its affiliates . All rights reserved .
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER .
*
* This code is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 only , as
* published by the Free Software Foundation .
*
* This code is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License
* version 2 for more details ( a copy is included in the LICENSE file that
* accompanied this code ) .
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work ; if not , write to the Free Software Foundation ,
* Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA .
*
* Please contact Oracle , 500 Oracle Parkway , Redwood Shores , CA 94065 USA
* or visit www . oracle . com if you need additional information or have any
* questions .
*/
/* @test
@ bug 6937798
@ summary Nimbus : Issues with JTable grid
@ author Alexander Potochkin
@ run main bug6937798
*/
import javax.swing.*;
import javax.swing.plaf.nimbus.NimbusLookAndFeel;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
import java.awt.*;
import java.awt.image.BufferedImage;
public class bug6937798 {
public static void main(String... args) throws Exception {
UIManager.setLookAndFeel(new NimbusLookAndFeel());
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
new bug6937798();
}
});
}
public bug6937798() {
final JTable table = createCountryTable();
table.setShowGrid(true );
table.setSize(100 , 100 );
BufferedImage im = new BufferedImage(table.getWidth(), table.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics g = im.getGraphics();
table.print(g);
g.dispose();
for (int i = 0 ; i < im.getHeight(); i++) {
for (int j = 0 ; j < im.getWidth(); j++) {
if (im.getRGB(i, j) == table.getGridColor().getRGB()) {
System.out.println("got it!" );
return ;
}
}
}
throw new RuntimeException("no table's grid detected...." );
}
protected JTable createCountryTable() {
// Column headers
final String
[] headers = {
"Name" , "Capital City" , "Language(s)" , "Monetary Unit(s)" , "EC Member"
};
// Table data
final Object[][] data = {
{"Albania" , "Tirane" , "Albanian, Greek" , "Lek" , new Boolean (false )},
{"Andorra" , "Andorra la Vella" , "Catalan, French, Spanish" , "French Franc, Spanish Peseta" , new Boolean (false )},
{"Austria" , "Vienna" , "German, Slovenian, Croatian" , "Schilling" , new Boolean (false )},
{"Belarus" , "Minsk" , "Byelorussian, Russian" , "Belarusian Rubel" , new Boolean (false )},
{"Belgium" , "Brussels" , "French, Flemish, German" , "Belgian Franc" , new Boolean (true )},
{"Bosnia & Herzegovina" , "Sarajevo" , "Serbo-Croatian" , "Dinar" , new Boolean (false )},
{"Bulgaria" , "Sofia" , "Bulgarian, Turkish" , "Lev" , new Boolean (false )},
{"Croatia" , "Zagreb" , "Serbo-Croatian" , "Croatian Kuna" , new Boolean (false )},
{"Czech Republic" , "Prague" , "Czech, Slovak" , "Koruna" , new Boolean (false )},
{"Denmark" , "Copenhagen" , "Danish" , "Krone" , new Boolean (true )},
{"Estonia" , "Tallinn" , "Estonian, Latvian, Lithuanian, Russian" , "Estonian Kroon" , new Boolean (false )},
{"Finland" , "Helsinki" , "Finnish, Swedish, Lappish" , "Markka" , new Boolean (false )},
{"France" , "Paris" , "French" , "Franc" , new Boolean (true )},
{"Germany" , "Berlin" , "German" , "Deutsche Mark" , new Boolean (true )},
{"Greece" , "Athens" , "Greek, English, French" , "Drachma" , new Boolean (true )},
{"Hungary" , "Budapest" , "Hungarian" , "Forint" , new Boolean (false )},
{"Iceland" , "Reykjavik" , "Icelandic" , "Icelandic Krona" , new Boolean (false )},
{"Ireland" , "Dublin" , "Irish, English" , "Pound" , new Boolean (true )},
{"Italy" , "Rome" , "Italian" , "Lira" , new Boolean (true )},
{"Latvia" , "Riga" , "Lettish, Lithuanian, Russian" , "Lat" , new Boolean (false )},
{"Liechtenstein" , "Vaduz" , "German" , "Swiss Franc" , new Boolean (false )},
{"Lithuania" , "Vilnius" , "Lithuanian, Polish, Russian" , "Lita" , new Boolean (false )},
{"Luxembourg" , "Luxembourg" , "French, German, Letzeburgesch" , "Luxembourg Franc" , new Boolean (true )},
{"Macedonia" , "Skopje" , "Macedonian, Albanian, Turkish, Serbo-Croatian" , "Denar" , new Boolean (false )},
{"Malta" , "Valletta" , "Maltese, English" , "Maltese Lira" , new Boolean (false )},
{"Moldova" , "Chisinau" , "Moldovan, Russian" , "Leu" , new Boolean (false )},
{"Monaco" , "Monaco" , "French, English, Italian" , "French Franc" , new Boolean (false )},
{"the Netherlands" , "Amsterdam" , "Dutch" , "Guilder" , new Boolean (true )},
{"Norway" , "Oslo" , "Norwegian" , "Krone" , new Boolean (false )},
{"Poland" , "Warsaw" , "Polish" , "Zloty" , new Boolean (false )},
{"Portugal" , "Lisbon" , "Portuguese" , "Escudo" , new Boolean (true )},
{"Romania" , "Bucharest" , "Romanian" , "Leu" , new Boolean (false )},
{"Russia" , "Moscow" , "Russian" , "Ruble" , new Boolean (false )},
{"San Marino" , "San Marino" , "Italian" , "Italian Lira" , new Boolean (false )},
{"Slovakia" , "Bratislava" , "Slovak, Hungarian" , "Koruna" , new Boolean (false )},
{"Slovenia" , "Ljubljana" , "Slovenian, Serbo-Croatian" , "Tolar" , new Boolean (false )},
{"Spain" , "Madrid" , "Spanish" , "Peseta" , new Boolean (true )},
{"Sweden" , "Stockholm" , "Swedish" , "Krona" , new Boolean (false )},
{"Switzerland" , "Bern" , "German, French, Italian" , "Swiss Franc" , new Boolean (false )},
{"Turkey" , "Ankara" , "Turkish" , "Turkish Lira" , new Boolean (false )},
{"Ukraine" , "Kiev" , "Ukranian, Russian, Romanian, Polish, Hungarian" , "Hryvnia" , new Boolean (false )},
{"United Kingdom" , "London" , "English, Welsh" , "British Pound" , new Boolean (true )},
{"Yugoslavia" , "Belgrade" , "Serbo-Croatian, Slovenian, Macedonian" , "Dinar" , new Boolean (false )},
};
// Table model
TableModel dataModel = new AbstractTableModel() {
public int getColumnCount() {
return headers.length;
}
public int getRowCount() {
return data.length;
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
public String getColumnName(int column) {
return headers[column];
}
public Class getColumnClass(int col) {
return getValueAt(0 , col).getClass();
}
public void setValueAt(Object aValue, int row, int column) {
data[row][column] = aValue;
}
public boolean isCellEditable(int row, int col) {
return (col == 4 );
}
};
// Create table with table model
JTable countryTable = new JTable(dataModel);
countryTable.setGridColor(Color.pink);
countryTable.setBackground(Color.white);
countryTable.setForeground(Color.black);
return countryTable;
}
}
Messung V0.5 in Prozent C=95 H=91 G=92
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland