【问题标题】:GUI JTable change borders to textGUI JTable 将边框更改为文本
【发布时间】:2022-10-15 01:06:12
【问题描述】:

我正在创建一个显示来自服务器的临时文件的 GUI(通过 JTable)。但是,我不喜欢模拟,也不喜欢第一次测试。对我来说,文字和数字离左边太远了。有谁知道如何设置文本和数字 (不合理)?

table = new JTable(data, header);
table.setFont(newFont("Times New Roman", Font.PLAIN, 16));
JScrollPane scrollpane = new JScrollPane(table);

GridbagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 2;
c.gridheight= 1;
c.weightx = 0;
c.gweighty = 0;
c.fill = GridBagConstraints. HORIZONTAL;
c.insets = new Insets(5, 5, 5, 5);
pnlFull.add(scrollPane, c);

【问题讨论】:

  • 您是否考虑过使用custom renderer?也许您可以发布您希望 GUI 看起来如何的图像?

标签: java swing jtable


【解决方案1】:

通常,数字将存储在 Integer 对象的模型中,渲染器将显示数字右对齐。

考虑到这一点,这里有一种方法,通过调整渲染器使用的Border,将左/右对齐的数据缩进 5 个像素:

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.border.*;

public class TableIndent extends JPanel
{
    public TableIndent()
    {
        String[] columnNames = {"Date", "String", "Integer", "Boolean"};
        Object[][] data =
        {
            {new Date(), "A", Integer.valueOf(1), Boolean.TRUE },
            {new Date(), "B", Integer.valueOf(2), Boolean.FALSE},
            {new Date(), "C", Integer.valueOf(19), Boolean.TRUE },
            {new Date(), "D", Integer.valueOf(4), Boolean.FALSE}
        };

        DefaultTableModel model = new DefaultTableModel(data, columnNames)
        {
            //  Returning the Class of each column will allow different
            //  renderers and editors to be used based on Class

            public Class getColumnClass(int column)
            {
                switch (column)
                {
                    case 0: return Date.class;
                    case 2: return Integer.class;
                    case 3: return Boolean.class;
                }

                return super.getColumnClass(column);
            }
        };


        JTable table = new JTable(model)
        {
            private Border insideLeft = new EmptyBorder(0, 5, 0, 0);
            private Border insideRight = new EmptyBorder(0, 0, 0, 5);

            public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
            {
                Component c = super.prepareRenderer(renderer, row, column);

                if (renderer instanceof DefaultTableCellRenderer)
                {
                    DefaultTableCellRenderer cellRenderer = (DefaultTableCellRenderer)renderer;

//                  if ( cellRenderer.getHorizontalAlignment() ==  SwingConstants.LEFT )
                    if ( cellRenderer.getHorizontalAlignment() ==  SwingConstants.LEADING )
                    {
                        JComponent jc = (JComponent)c;
                        Border border = new CompoundBorder(jc.getBorder(), insideLeft);
                        jc.setBorder( border );
                    }

                    if ( cellRenderer.getHorizontalAlignment() ==  SwingConstants.RIGHT )
                    {
                        JComponent jc = (JComponent)c;
                        Border border = new CompoundBorder(jc.getBorder(), insideRight);
                        jc.setBorder( border );
                    }
                }

                return c;
            }
        };
        table.setPreferredScrollableViewportSize(table.getPreferredSize());

        JScrollPane scrollPane = new JScrollPane( table );
        add( scrollPane );
    }

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("Table Indent");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new TableIndent());
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args) throws Exception
    {
        SwingUtilities.invokeLater( () -> createAndShowGUI() );
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 2016-10-15
    相关资源
    最近更新 更多