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-size | font-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