Open:Test

From Anywiki
Revision as of 21:45, 10 July 2008 by Didi (talk | contribs)
Jump to navigationJump to search

Jeder sollte im Namespace Open lesen können.

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

  • 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/)

Java Beans

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:

MVC

[1]
[2]


Swing

JComboBox: Grösse der Buttons ändern

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:

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:

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

Binding

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

Testing mit JUnit und anderem

Kommentare (Javadoc)

Von Sun gibt es das Check Doclet Tool, das überprüft ob die Kommentare Javadoc-konform sind.

Quellen:

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);