Open:Test
Jeder sollte im Namespace Open lesen können.
Contents
- 1 Offene Fragen
- 2 Tools for Java
- 3 Java Beans
- 4 Properties (Konfigurationsfile)
- 5 MVC
- 6 Swing
- 6.1 JComboBox: Grösse der Buttons ändern
- 6.2 JComboBox: mit Text füllen
- 6.3 JTextField: Farbe ändern
- 6.4 Table: mit Text füllen
- 6.5 Table: Zellen nicht-editierbar machen
- 6.6 Table: Spaltengrösse definieren
- 6.7 Table: Header (Kopfzeile)
- 6.8 GUI: Beenden
- 6.9 Verfügbare Schriftarten abfragen
- 6.10 Eigene Komponenten
- 7 Binding
- 8 Sources
- 9 Debugging
- 10 Testing mit JUnit und anderem
- 11 Kommentare (Javadoc)
- 12 Developer Links
- 13 Verschiedenes
Offene Fragen
- merken, welche Objekte (Layouts, GUI's) geöffnet sind, damit man sie beim Beenden von einer Applikation schließen kann.
- ResultSet in Tables und ComboBox (müsste es schon einen Code geben)
- Schrift in anderer Farbe
- was ist der beste Weg, ein Properties File zu speichern. Wenn man ein JAR File macht, kann es sein, dass es nicht wiedergefunden wird.
- (gelöst) Mehrsprachigkeit bei GUIs? Wird von NetBeans unterstützt.
- Drucken unter Linux (im besonderen low level direkt über seriellen/parallelen Port; wie schaut's aus mit Druckertreiber?)
Tools for Java
- IDE's
- Eclipse: http://www.eclipse.org/
- MyEclipse: http://www.myeclipseide.com/
- NetBeans: http://www.netbeans.org/
- IntelliJ: http://www.jetbrains.com/idea/
- JDeveloper: http://www.oracle.com/technology/products/jdev/index.html
- JBuilder: http://www.borland.com/de/products/jbuilder/
- Frameworks
- Maven: Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. (http://maven.apache.org/)
- JGoodies: Java User Interface Design (http://www.jgoodies.com/)
- Persistence
Java Beans
- http://www.netbeans.org/files/documents/4/951/NetBeansModuleEntwicklen.pdf (links auf letzter Folie!)
- Beans Binding: https://beansbinding.dev.java.net/
Properties (Konfigurationsfile)
Klasse Properties für Konfigurationsfile (flaches XML File). Aufpassen muss man allerdings, wenn man ein JAR File erstellt. Es kann sein, dass dann das Konfigurationsfile nicht mehr gefunden wird. Auf dieses Problem geht der Artikel "Smartly load your properties" ein.
Quellen:
- File Based Configuration: http://commons.apache.org/configuration/howto_filebased.html
- Smartly load your properties: http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html
MVC
Swing
- pack(): Causes this Window to be sized to fit the preferred size and layouts of its subcomponents.
- Toolbars: use BoxLayout to layout their components
- Systemunabhängiges Look&Feel: ???
- Komponenten anpassen (zB Button-Grösse von JScrollBar)
- Table in einer Combobox
- Eigene Swing Komponenten (Links!): http://today.java.net/pub/a/today/2007/02/22/how-to-write-custom-swing-component.html
- Swingset: http://swingset.sourceforge.net/
JComboBox: Grösse der Buttons ändern
- Bugs: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4233735
- Bugs (2): http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4233629
- Thread @ java-forum.org: http://www.java-forum.org/de/topic65518_pull-down-button-einer-jcombobox-modifizieren.html
JComboBox: mit Text füllen
DAL dal = new DAL();
@SuppressWarnings("unchecked")
Vector<String> vs = new Vector();
vs = dal.getLagerzonen();
//lagerzoneCombo.addItem(vs);
//System.out.println("size of vector: " + vs.size());
for(int i=0; i<vs.size(); i++){
lagerzoneCombo.addItem(vs.elementAt(i));
}
Quellen:
JTextField: Farbe ändern
Der Vordergrund entspricht der Farbe des Textes:
name_field.setForeground(Color.RED);
Table: mit Text füllen
Quellen:
Table: Zellen nicht-editierbar machen
Check: http://forum.java.sun.com/thread.jspa?threadID=595453&messageID=3142544
Dazu muss man eine eigene Klasse erstellen, die das TableModel implementiert. In der neuen Klasse muss die Funktion isCellEditable(...) "false" zurückgeben. Man könnte auch eine Subclass schreiben (siehe Quellen).
Beispiel: Zuerst die neue Klasse:
package kabelTerminal.util;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
public class KabelTableModel extends DefaultTableModel implements TableModel {
public KabelTableModel() {
super();
}
public KabelTableModel(Object[][] o, String[] s){
super(o,s);
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
}
und eine Anwendung der neuen Klasse:
import kabelTerminal.util.KabelTableModel;
jTable1 = new javax.swing.JTable();
jTable1.setModel(new KabelTableModel(
new Object [][] {
{"cell1"}
},
new String [] {
"Title 1"
}
));
Anwendung bei NetBeans:
Das Table-property "model" klicken und dort die eigene Model-Klasse angeben.
Quelle:
- http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#width
- Subclass-Beispiel: http://www.chka.de/swing/table/faq.html
Table: Spaltengrösse definieren
TableColumn column = null;
for (int i = 0; i < 5; i++) {
column = table.getColumnModel().getColumn(i);
if (i == 2) {
column.setPreferredWidth(100); //third column is bigger
} else {
column.setPreferredWidth(50);
}
}
Quelle:
Table: Header (Kopfzeile)
Table Header nicht anzeigen: wenn sich der Table in einem ScrollPane befindet, wird der Header automatisch angezeigt. Mit folgenden Code kann dies verhindert werden:
table.setTableHeader(null);
- oder
import java.awt.Dimension;
import javax.swing.table.JTableHeader;
myTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JTableHeader th=myTable.getTableHeader();
th.setReorderingAllowed(false);
th.setResizingAllowed(false);
th.setPreferredSize(new Dimension(0, 0)); //remove headers
Quellen:
- http://forum.java.sun.com/thread.jspa?threadID=622533&messageID=3524841
- http://java.sun.com/docs/books/tutorial/uiswing/components/table.html
GUI: Beenden
Am besten ist, das Programm mit System.exit(int) zu terminieren. Bei dispose() kann es sein, dass das Programm noch weiterläuft und erst irgendwann endet.
Quelle:
Verfügbare Schriftarten abfragen
//get available fonts
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
String[] fontNames = ge.getAvailableFontFamilyNames();
for(int i=0; i < fontNames.length; i++){
System.out.println("font " + i + " : " + fontNames[i]);
}
Eigene Komponenten
- Swing L&F Developer Zone: http://skinlf.l2fprod.com/download/index.php
- http://forum.java.sun.com/thread.jspa?threadID=365027&messageID=1538352
- https://jdnc-incubator.dev.java.net/documentation/l2fprod/LookAndFeelAddons.html
- Scrollbar mit XML und Synth L&F: http://www.javalobby.org/java/forums/t49282.html
- Synth: http://www.jroller.com/gfx/entry/synth_subtleties
- ComboBox Button: http://forum.java.sun.com/thread.jspa?threadID=671680&messageID=3926084
- Book (out-dated?): http://www.amazon.co.uk/Professional-Java-Custom-UI-Components/dp/product-description/1861003641
- Pull Down Button ComboBox Thread: http://www.java-forum.org/de/viewtopic.php?p=395679#395679
Binding
- http://forums.java.net/jive/thread.jspa?messageID=200580&tstart=0
- https://bean-properties.dev.java.net/tutorial3.html
- https://binding.dev.java.net/faq.html#What_are_the_main_benefits
- http://www.netbeans.org/kb/60/java/gui-db.html
Sources
Bildschirmauflösung herausfinden
import java.awt.*;
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
int width = dim.width;
int height = dim.height;
Title Bar nicht anzeigen
JFrame frame = new JFrame("Removing the Title Bar of a Frame");
frame.setUndecorated(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400,400);
frame.setVisible(true);
(Vergleiche auch: JWindow (hat von Haus aus keinen Title Bar))
Framegröße maximieren
frame.setExtendedState(frame.MAXIMIZED_BOTH);
mögliche andere Parameter: Frame.MAXIMIZED_HORIZ: maximized horizontally, Frame.MAXIMIZED_VERT: maximized vertically
Debugging
- log4j (Apache) Info: http://www.zanthan.com/itymbi/archives/000789.html
Testing mit JUnit und anderem
- JUnit Home: http://www.junit.org/
- http://rollerjm.free.fr/pro/Junit.html
- Marathon GUI Testing Tool: http://www.marathontesting.com/marathon/
Kommentare (Javadoc)
Von Sun gibt es das Check Doclet Tool, das überprüft ob die Kommentare Javadoc-konform sind.
Quellen:
- Kommentierrichtlinien von Sun: http://java.sun.com/j2se/javadoc/writingdoccomments/
- Javadoc Tool: http://java.sun.com/j2se/javadoc/index.jsp#javadocdocuments
- Check Doclet Tool: http://java.sun.com/j2se/javadoc/doccheck/index.html
Developer Links
Java-Net: https://java-net.dev.java.net/
Verschiedenes
Datum formatiert ausgeben
Mit der Klasse DateFormat
DateFormat dateformat = new SimpleDateFormat("dd.MM.yy HH:mm");
rowData.addElement(dateformat.format(transportauftrag.getTatermin()));
//DateFormat df = DateFormat.getDateInstance(Locale.GERMANY);