Neuste Artikel aller Themen


      
Java, allgemein
27.06.2022

Verzeichnis incl. aller Unterverzeichnisse löschen


Das folgende kleine Programm löscht rekursiv alle Unterverzeichnise des Ordners c:\temp

import java.io.File;
 
public class DeleteDir {
 
   public static void deleteDir(File path) {
      for (File file : path.listFiles()) {
         if (file.isDirectory())
            deleteDir(file);
         file.delete();
      }
      path.delete();
   }
 
   public static void main(String[] args) {
      deleteDir(new File("c:/temp"));
   }
}




      
Java, allgemein
27.06.2022

ShutdownHook


Wenn man Code beim Beenden der VM ausführen möchte, so hat man die Möglichkeit einen oder mehrere Thread(s) zu definieren und anzumelden. Diese werden dann beim Beenden ausgeführt.

Runtime.getRuntime().addShutdownHook(new Thread() {
   public void run() {
      System.out.println("Die VM wird gerade beendet!");
   }
});




      
SWT/JFace
27.06.2022

Font ändern


Oft ist es besser einen Font nicht komplett neu zu erstellen...

Label label = new Label(shell, SWT.NONE);
Font boldFont = new Font( label.getDisplay(), new FontData("Arial", 12, SWT.BOLD));
label.setFont( boldFont );
label.setText("Bold Test");

...sondern ihn nur zu verändern...

Label label = new Label(parent, SWT.NONE);
FontDescriptor boldDescriptor = FontDescriptor.createFrom(label.getFont()).setStyle(SWT.BOLD);
Font boldFont = boldDescriptor.createFont(label.getDisplay());
label.setFont(boldFont);
label.setText("Bold Text");

Vorteil: Man muss nicht alle Informationen (wie z.B. die Größe des Fonts) haben.



      
Java, allgemein
15.06.2022

OutputStream zu InputStream


Manchmal braucht man einen InputStream den man selber "füttern" möchte.
Im Beispiel wird der InputStream durch einen PipedOutputStream "gefüttert":


final OutputStream outputStream;
try {
   outputStream = new PipedOutputStream(inputStream);
   outputStream.write(("Hallo World\n").getBytes());
   inputStream.read();  // Liefert das 'H' von Hallo World
} catch (IOException e) {
   e.printStackTrace();
}




      
Java, Swing
15.06.2022

JTable, mit Zeilenbeschriftung


Manchmal möchte man auch für die Zeilen einer Tabelle eine Beschriftung, so wie es bei Tabellenkalkulationen üblich ist. Dies kann man durch eine zusätzliche Liste links neben der Tabelle erreichen.

package com.sowas.javawiki.rowheadertable;
 
import java.awt.BorderLayout;
import java.awt.Component;
 
import javax.swing.AbstractListModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListCellRenderer;
import javax.swing.ListModel;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
 
public class RowHeaderTable extends JFrame {
   public RowHeaderTable(){
      super("Row Header Table");
 
      ListModel lm = new RowHeaderListModel();
 
      DefaultTableModel dtm = new DefaultTableModel(lm.getSize(), 4);
      JTable table = new JTable(dtm);
      table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
 
      JList rowHeader = new JList(lm);
      rowHeader.setFixedCellWidth(30);
      rowHeader.setFixedCellHeight(table.getRowHeight());
      rowHeader.setCellRenderer(new RowHeaderRenderer(table));
 
      JScrollPane scroll = new JScrollPane(table);
      scroll.setRowHeaderView(rowHeader);
      getContentPane().add(scroll, BorderLayout.CENTER);
   }
 
   public static void main(String[] args){
      RowHeaderTable frame = new RowHeaderTable();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }
}
 
class RowHeaderListModel extends AbstractListModel{
   String strRowHeaders[] = {"1", "2", "3", "4", "5", "6", "7"};
 
   public int getSize(){
      return strRowHeaders.length;
   }
 
   public Object getElementAt(int index){
      return strRowHeaders[index];
   }
}
 
class RowHeaderRenderer extends JLabel implements ListCellRenderer{
   RowHeaderRenderer(JTable table){
      JTableHeader tableHeader = table.getTableHeader();
      setBorder(UIManager.getBorder("TableHeader.cellBorder"));
      setHorizontalAlignment(CENTER);
      setForeground(tableHeader.getForeground());
      setOpaque(true);  // Damit der Hintergrund nicht verändert wird
      setFont(tableHeader.getFont());
   }
 
   public Component getListCellRendererComponent(JList list, Object value, int index, 
                                                 boolean fSelected, boolean fCellHasFocus){
      setText((value == null) ? "" : value.toString());
      return this;
   }
}

JTable, ein einfaches Beispiel



      
Java, Swing
15.06.2022

JTable, Spalten fixieren


Normalerweise können Spalten einfach mit der Maus verschoben werden. Möchte man dies unterbinden, so hilft Folgendes:

JTable table = new JTable(10, 20);
table.getTableHeader().setReorderingAllowed(false);

JTable, ein einfaches Beispiel



      
Java, Swing
14.06.2022

JTable, Zelle zentrieren



public class MyCellRenderer extends JLabel implements TableCellRenderer {
   public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, 
                                                  boolean hasFocus, int row, int column) {
      setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
      return this;
   }
}

… und dieser muss dann noch der Tabelle zugewiesen werden:

JTable table = new JTable(..
table.setDefaultRenderer(Object.class, new MyCellRenderer());

JTable, ein einfaches Beispiel



      
HTML 5, CSS
14.06.2022

CSS-Attribute


margin-left  margin-left: 10px; margin-left: 10%;
font-sizefont-size: 12px; font-size: 80%; font-size: large



      
Java, Swing
14.06.2022

JTable, Spaltenbreite setzen



JTable table = new JTable(10, 20);
// Erste Spalte auf 100 Pixel Breite setzen:
final int INDEX_COLUMN1 = 0;
TableColumn col = table.getColumnModel().getColumn(INDEX_COLUMN1);
col.setPreferredWidth(100);


JTable, ein einfaches Beispiel



      
Java, Swing
14.06.2022

JTable


Ein einfaches Beispiel:


setLayout(new BorderLayout());

DefaultTableModel model = new DefaultTableModel();
model.addColumn("Spalte 1", new String[] {"value row 1", "value row 2", "value row 2"});
model.addColumn("Spalte 2", new String[] {"value row 1", "value row 2", "value row 2"});
JTable table = new JTable(model);
JScrollPane pane = new JScrollPane(table);  // Für Scrollbars bei Bedarf

add(pane, BorderLayout.CENTER);

Weitere Links zu JTable:
Spaltenbreite setzen, Spalten fixieren, Zeilenbeschriftung, Zelle zentrieren