Java JTable在JScrollPane内部正确对齐

Java JTable在JScrollPane内部正确对齐,java,swing,jtable,jscrollpane,Java,Swing,Jtable,Jscrollpane,我在JScrollView中有一个JTable,但它似乎没有很好地对齐。滚动条很小,我猜这是因为对齐。此外,这是一个来自真实代码的片段: JFrame frame = new JFrame(); frame.setResizable(false); frame.setBounds(100, 100, 771, 453); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getConte

我在
JScrollView
中有一个
JTable
,但它似乎没有很好地对齐。滚动条很小,我猜这是因为
对齐。此外,
这是一个来自真实代码的片段:

    JFrame frame = new JFrame();
    frame.setResizable(false);
    frame.setBounds(100, 100, 771, 453);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    JPanel panel = new JPanel();
    panel.setBorder(new MatteBorder(1, 1, 1, 1, (Color) new Color(0, 0, 0)));
    panel.setBounds(10, 32, 747, 370);
    frame.getContentPane().add(panel);
    panel.setLayout(null);

    JPanel VPanel = new JPanel();
    VPanel.setBounds(297, 43, 440, 224);
    panel.add(VPanel);

    JTable TableV = new JTable();
    TableV.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    TableV.getTableHeader().setReorderingAllowed(false);
    DefaultTableModel Model = new DefaultTableModel(0, 0);
    String header[] = new String[] { "Country", "ID", "WAN IP", "User", "OS", "Java version" };

    VPanel.add(new JScrollPane(TableV, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED));

    // just adding some data to fill the table
    Model.setColumnIdentifiers(header);
    //set model into the table object
    TableV.setModel(Model);

     //just adding some diff data to check if it scrolls down
     for (int count = 1; count <= 50; count++)
     {
        Model.addRow(new Object[] { "data1", "data2", "data3", "data4", "data5", "data6" });
     }

     for (int count = 1; count <= 70; count++)
     {
        Model.addRow(new Object[] { "data100", "data200", "data300", "data400", "data500", "data600" });
     }

     frame.setVisible(true);
JFrame=newjframe();
frame.setresizeable(false);
框架.立根(100100771453);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JPanel面板=新的JPanel();
面板.设置顺序(新边框(1,1,1,1,(颜色)新颜色(0,0,0));
嵌板.立根(10,32,747,370);
frame.getContentPane().add(面板);
panel.setLayout(空);
JPanel VPanel=新的JPanel();
VPanel.setBounds(297,43,440,224);
面板。添加(VPanel);
JTable TableV=新的JTable();
表V.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
TableV.getTableHeader().SetReOrOrderingAllowed(false);
DefaultTableModel=新的DefaultTableModel(0,0);
字符串头[]=新字符串[]{“国家”、“ID”、“WAN IP”、“用户”、“操作系统”、“Java版本”};
添加(新的JScrollPane(表V,JScrollPane.VERTICAL\u SCROLLBAR\u AS\u NEEDED,JScrollPane.HORIZONTAL\u SCROLLBAR\u AS\u NEEDED));
//只是添加一些数据来填充表格
Model.setColumnIdentifiers(标头);
//将模型设置到表对象中
表五.集合模型(模型);
//只是添加一些差异数据来检查它是否向下滚动
对于(int count=1;count了解VPanel(应重命名为VPanel以符合Java命名规则)使用FlowLayout,因此滚动窗格可能不适合它。为它指定一个BorderLayout,并添加JScrollPane BorderLayout.CENTER(如果希望滚动窗格填充它)

e、 g

导入java.awt.BorderLayout;
导入java.awt.Dimension;
导入javax.swing.*;
导入javax.swing.table.DefaultTableModel;
@抑制警告(“串行”)
公共类TableFoo扩展了JPanel{
私有静态最终字符串[]头=新字符串[]{“国家”、“ID”、“WAN IP”、“用户”、“操作系统”、“Java版本”};
专用静态最终整数预值W=500;
私有静态最终整型参数H=400;
私有DefaultTableModel=new DefaultTableModel(表头,0);
专用JTable表=新JTable(模型);
公共表foo(){
用于(int count=0;count<50;count++){
addRow(新对象[]{“data1”、“data2”、“data3”、“data4”、“data5”、“data6”});
}
用于(int count=0;count<70;count++){
addRow(新对象[]{“data100”、“data200”、“data300”、“data400”、“data500”、“data600”});
}
JScrollPane scrollPane=新的JScrollPane(表);
setLayout(新的BorderLayout());
添加(滚动窗格,BorderLayout.CENTER);
}
@凌驾
公共维度getPreferredSize(){
如果(isPreferredSizeSet()){
返回super.getPreferredSize();
}
返回新维度(PREF_W,PREF_H);
}
私有静态void createAndShowGui(){
JFrame=新JFrame(“TableFoo”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(新TableFoo());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
createAndShowGui();
}
});
}
}
了解VPanel(应重命名为VPanel以符合Java命名规则)使用FlowLayout,因此滚动窗格可能不适合它。为它指定BorderLayout并添加JScrollPane BorderLayout.CENTER(如果希望滚动窗格填充它)

e、 g

导入java.awt.BorderLayout;
导入java.awt.Dimension;
导入javax.swing.*;
导入javax.swing.table.DefaultTableModel;
@抑制警告(“串行”)
公共类TableFoo扩展了JPanel{
私有静态最终字符串[]头=新字符串[]{“国家”、“ID”、“WAN IP”、“用户”、“操作系统”、“Java版本”};
专用静态最终整数预值W=500;
私有静态最终整型参数H=400;
私有DefaultTableModel=new DefaultTableModel(表头,0);
专用JTable表=新JTable(模型);
公共表foo(){
用于(int count=0;count<50;count++){
addRow(新对象[]{“data1”、“data2”、“data3”、“data4”、“data5”、“data6”});
}
用于(int count=0;count<70;count++){
addRow(新对象[]{“data100”、“data200”、“data300”、“data400”、“data500”、“data600”});
}
JScrollPane scrollPane=新的JScrollPane(表);
setLayout(新的BorderLayout());
添加(滚动窗格,BorderLayout.CENTER);
}
@凌驾
公共维度getPreferredSize(){
如果(isPreferredSizeSet()){
返回super.getPreferredSize();
}
返回新维度(PREF_W,PREF_H);
}
私有静态void createAndShowGui(){
JFrame=新JFrame(“TableFoo”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(新TableFoo());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
createAndShowGui();
}
});
}
}

无论是现在还是将来,使用空布局和设置边界都会让你陷入困境,你需要摆脱新手这样做的习惯。学习布局管理器,然后使用布局管理器。了解VPanel(应重命名为
VPanel
,以符合Java命名规则)使用FlowLayout,因此滚动窗格可能不适合它。如果需要,请给它一个BorderLayout并添加JScrollPane BorderLayout.CENTER
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

@SuppressWarnings("serial")
public class TableFoo extends JPanel {
    private static final String[] HEADER = new String[] { "Country", "ID", "WAN IP", "User", "OS", "Java version" };
    private static final int PREF_W = 500;
    private static final int PREF_H = 400;
    private DefaultTableModel model = new DefaultTableModel(HEADER, 0);
    private JTable table = new JTable(model);

    public TableFoo() {
        for (int count = 0; count < 50; count++) {
            model.addRow(new Object[] { "data1", "data2", "data3", "data4", "data5", "data6" });
        }

        for (int count = 0; count < 70; count++) {
            model.addRow(new Object[] { "data100", "data200", "data300", "data400", "data500", "data600" });
        }

        JScrollPane scrollPane = new JScrollPane(table);

        setLayout(new BorderLayout());
        add(scrollPane, BorderLayout.CENTER);
    }

    @Override
    public Dimension getPreferredSize() {
        if (isPreferredSizeSet()) {
            return super.getPreferredSize();
        }
        return new Dimension(PREF_W, PREF_H);
    }

    private static void createAndShowGui() {
        JFrame frame = new JFrame("TableFoo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new TableFoo());
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGui();
            }
        });
    }
}