अलग-अलग तरीके के बहुत आप इस परिणाम प्राप्त कर सकता है ...
यहाँ, मैं अपने खुद के कार्यान्वयन के साथ शीर्ष लेख से बदल दिया है, के लिए प्रकार Double
के लिए डिफ़ॉल्ट सेल रेंडरर सेट मेरा खुद का TableCellRenderer
और तालिका के कुछ अंतर्निहित गुणों को समायोजित करें।
public class FancyTable {
public static void main(String[] args) {
new FancyTable();
}
public FancyTable() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JTable table = new JTable(new LoanModel());
table.setTableHeader(new SingleColumnTableHeader());
table.setFillsViewportHeight(true);
table.setShowHorizontalLines(true);
table.setShowVerticalLines(false);
table.setGridColor(Color.LIGHT_GRAY);
table.setDefaultRenderer(Double.class, new CurrencyRenderer());
JScrollPane scrollPane = new JScrollPane(table);
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(scrollPane);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class LoanModel extends AbstractTableModel {
private List<Loan> loans;
public LoanModel() {
loans = new ArrayList<Loan>(25);
loans.add(new Loan("Davies S.J", 2500000));
loans.add(new Loan("Lucas M.M", 1700000));
loans.add(new Loan("Smith R.B", 600000));
loans.add(new Loan("Jones T.T", 435000));
loans.add(new Loan("Brown R.B", 600000));
loans.add(new Loan("Walls T.T", 435000));
loans.add(new Loan("Healy R.B", 600000));
loans.add(new Loan("Taylor T.T", 435000));
loans.add(new Loan("Ginns R.B", 600000));
loans.add(new Loan("Murphy H", 435000));
}
@Override
public int getRowCount() {
return loans.size();
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
Class clazz = String.class;
switch (columnIndex) {
case 1:
clazz = Double.class;
break;
}
return clazz;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Object value = null;
Loan loan = loans.get(rowIndex);
switch (columnIndex) {
case 0:
value = loan.getName();
break;
case 1:
value= loan.getAmount();
break;
}
return value;
}
}
public class Loan {
private String name;
private double amount;
public Loan(String name, double amount) {
this.name = name;
this.amount = amount;
}
public String getName() {
return name;
}
public double getAmount() {
return amount;
}
}
public class CurrencyRenderer extends DefaultTableCellRenderer {
private Font boldFont;
public CurrencyRenderer() {
setHorizontalAlignment(JLabel.RIGHT);
boldFont = getFont().deriveFont(Font.BOLD);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof Double) {
value = NumberFormat.getCurrencyInstance().format(value);
}
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setFont(boldFont);
return this;
}
}
public class SingleColumnTableHeader extends JTableHeader {
private JLabel renderer;
public SingleColumnTableHeader() {
setBackground(Color.WHITE);
renderer = new JLabel("Top Ten Loan Balances");
renderer.setBorder(new EmptyBorder(4, 0, 4, 0));
}
@Override
public Dimension getPreferredSize() {
return renderer.getPreferredSize();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
FontMetrics fm = g2d.getFontMetrics();
Insets insets = getInsets();
int width = getWidth() - (insets.left + insets.right);
int height = getHeight() - (insets.top + insets.bottom);
renderer.setBounds(insets.left, insets.top, width, height);
renderer.paint(g2d);
g2d.setColor(Color.LIGHT_GRAY);
g2d.setStroke(new BasicStroke(2f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
g2d.drawLine(insets.left, insets.top + height - 1, insets.left + width, insets.top + height - 1);
g2d.dispose();
}
}
}
तुम बस के रूप में आसानी से अपने स्वयं के कस्टम JTable
बना सकते हैं और configureEnclosingScrollPane
ओवरराइड तालिका हेडर के लिए अपने स्वयं के घटक स्थापित करने के लिए है, लेकिन व्यक्तिगत रूप से मुझे लगता है कि मारने से अधिक है।
मेरे अपने दाता आपूर्ति करने में सक्षम होने के नाते एक बहुत अधिक विकल्प दृष्टिकोण है और बाहर कसकर जोड़ी कोड के उत्पादन के साथ, घटक तत्वों का पुन: उपयोग को बढ़ावा देता है ...
आप इसे आसान How to use Tables
के माध्यम से पढ़ने के लिए मिल सकती है
यह मेरे लिए हुआ अपडेट किया गया, के बाद कुछ Guillaume कहा, तो आप बस null
को JTable
रों हैडर सेट कर सकते हैं।फिर, स्क्रॉल फलक में तालिका जोड़ने के बाद, आप जैसे कुछ को हेडर सेट करने के लिए बस उपयोगकर्ता JScrollPane#setColumnHeaderView
उपयोगकर्ता को देख सकते हैं।
यह आसान लागू करने के लिए हो रही हैं आप JTableHeader
निश्चित रूप से यह है। लेकिन आपने क्या कोशिश की है? – Logan
मैं हमेशा जेटीबल के आम/पारंपरिक मॉडल के साथ समाप्त हुआ। टेबल हेडर, सेल्स और आम सीमा .. –
ओह आप इसके बारे में बात कर रहे हैं। मॉडल द्वारा मैंने सोचा था कि आप कस्टम कॉलम नामों और सेल प्रकारों और ऐसे के लिए 'JTableModel' के बारे में बात कर रहे थे। – Logan