[在Eclipse中最大化窗口时如何自动调整JTable的大小

问题描述 投票:0回答:1

使用Windowsbuilder插件在Eclipse中的gui应用程序上工作。该应用程序运行正常。但是当我拖动窗口的边缘时,jTable不会调整大小。或当我最大化应用程序时。窗口上还有其他我想自动调整大小的组件。但是,jtable对我来说是必须的。当我最大化窗口时,表格保持相同大小。我正在使用绝对布局作为布局管理器。因此将元素放置在窗口上只是拖放的问题。我一直在寻找允许我设置resize = true或类似属性的属性,并且发现了autoRisizeMode。所以我将其设置为true。那没有用。有什么建议么?这是我的Gui initialize()方法的代码

private void initialize()  {        
        frame = new JFrame();
        frame.setAlwaysOnTop(true);
        frame.getContentPane().setBackground(new Color(240, 240, 240));
        frame.setBounds(100, 100, 882, 577);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JLabel lblIpRange = new JLabel("Ip Range");
        lblIpRange.setFont(new Font("Tahoma", Font.PLAIN, 14));
        lblIpRange.setBounds(10, 59, 55, 14);
        frame.getContentPane().add(lblIpRange);

        startIpLabel = new JTextField();
        startIpLabel.setBounds(75, 58, 100, 20);
        frame.getContentPane().add(startIpLabel);
        startIpLabel.setColumns(10);

        endIpLabel = new JTextField();
        endIpLabel.setBounds(198, 58, 100, 20);
        frame.getContentPane().add(endIpLabel);
        endIpLabel.setColumns(10);      
        String[] columns = {"Number", "Ip Address", "Hostname", "Mac"};             

        JButton scanButton = new JButton("Scan");
        scanButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {    
                try {
                    ipScan = new IpScanMain(startIpLabel.getText());
                    ipScan.startIpScanning();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                allNodes = ipScan.getAllNodes();
                int rows = allNodes.size();
                data = new Object[rows][COLUMNS];
                int index = 0;
                for(Node node : allNodes) {
                    data[index][0] = index;
                    data[index][1] = node.getIp();
                    data[index][2] = node.getHostName();
                    data[index][3] = node.getMac();
                    index++;
                }
                table.setModel(new DefaultTableModel(data, columns));
            }


        });

        scanButton.setBounds(323, 57, 89, 23);
        frame.getContentPane().add(scanButton);

        JSeparator separator = new JSeparator();
        separator.setBounds(11, 106, 845, 2);
        frame.getContentPane().add(separator);

        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setViewportBorder(new LineBorder(new Color(0, 0, 0)));
        scrollPane.setBounds(10, 119, 846, 410);
        frame.getContentPane().add(scrollPane);

        table = new JTable();
        table.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
        table.setFont(new Font("Tahoma", Font.PLAIN, 14));
        table.setBackground(Color.WHITE);
        table.setBorder(new LineBorder(new Color(0, 0, 0), 0));
        table.setCellSelectionEnabled(true);
        table.setFillsViewportHeight(true);
        table.setColumnSelectionAllowed(true);
        table.setModel(new DefaultTableModel(
            new Object[][] { },
            new String[] {
                "Number", "Ip Address", "Hostname", "Mac", "Ports"
            }
        ));
        table.getColumnModel().getColumn(0).setPreferredWidth(30);
        table.getColumnModel().getColumn(0).setMaxWidth(2147483619);
        table.getColumnModel().getColumn(3).setPreferredWidth(80);
        scrollPane.setColumnHeaderView(table);
        scrollPane.setViewportView(table);

        JMenuBar menuBar = new JMenuBar();
        menuBar.setBackground(new Color(240, 240, 240));
        menuBar.setBounds(10, 0, 849, 26);
        frame.getContentPane().add(menuBar);

        JMenu mnFile = new JMenu("File");
        menuBar.add(mnFile);

        JMenuItem mntmClose = new JMenuItem("Open File");
        mnFile.add(mntmClose);

        JSeparator separator_1 = new JSeparator();
        mnFile.add(separator_1);

        JMenuItem mntmSave = new JMenuItem("Save");
        mnFile.add(mntmSave);

        JMenuItem mntmSaveAs = new JMenuItem("Save As");
        mnFile.add(mntmSaveAs);

        JSeparator separator_2 = new JSeparator();
        mnFile.add(separator_2);

        JMenuItem mntmPrint = new JMenuItem("Print...");
        mnFile.add(mntmPrint);

        JSeparator separator_3 = new JSeparator();
        mnFile.add(separator_3);

        JMenuItem mntmProperties = new JMenuItem("Settings");
        mnFile.add(mntmProperties);

        JSeparator separator_4 = new JSeparator();
        mnFile.add(separator_4);

        JMenuItem mntmClose_1 = new JMenuItem("Exit");
        mnFile.add(mntmClose_1);

        JMenu mnEdit = new JMenu("Edit");
        menuBar.add(mnEdit);

        JMenuItem mntmCopy = new JMenuItem("Copy");
        mnEdit.add(mntmCopy);

        JMenuItem mntmPaste = new JMenuItem("Paste");
        mnEdit.add(mntmPaste);

        JMenu mnHelp = new JMenu("Help");
        menuBar.add(mnHelp);

        JMenuItem mntmGuide = new JMenuItem("Guide");
        mnHelp.add(mntmGuide);

        JMenuItem mntmAbout = new JMenuItem("About");
        mnHelp.add(mntmAbout);

        JPanel panel = new JPanel();
        panel.setBorder(new LineBorder(new Color(0, 0, 0)));
        panel.setBounds(574, 37, 281, 58);
        frame.getContentPane().add(panel);
        panel.setLayout(null);

        JLabel lblNewLabel = new JLabel("IPv4");
        lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 14));
        lblNewLabel.setBounds(10, 11, 46, 14);
        panel.add(lblNewLabel);

        JLabel lblNewLabel_1 = new JLabel("IPv6");
        lblNewLabel_1.setFont(new Font("Tahoma", Font.BOLD, 14));
        lblNewLabel_1.setBounds(10, 36, 46, 14);
        panel.add(lblNewLabel_1);

        JLabel ipv4Label = new JLabel("192.168.1.10/24");
        ipv4Label.setFont(new Font("Tahoma", Font.PLAIN, 14));
        ipv4Label.setBounds(53, 11, 123, 14);
        panel.add(ipv4Label);

        JLabel ipv6Label = new JLabel("ff80:ee3d:ff35:abdd:3dce:335d");
        ipv6Label.setFont(new Font("Tahoma", Font.PLAIN, 14));
        ipv6Label.setBounds(53, 36, 196, 14);
        panel.add(ipv6Label);

        JComboBox comboBox = new JComboBox();       
        comboBox.setBounds(446, 57, 100, 22);
        frame.getContentPane().add(comboBox);

        System.out.println(Thread.currentThread().getName());

        //combobox network interface stuff
        NetInterface netint = null;
        try {
            netint = new NetInterface(frame, comboBox);
        } catch (SocketException | UnknownHostException e1) {
            e1.printStackTrace();
        }
        EventQueue.invokeLater(netint);        

    }
java eclipse swing jtable autosize
1个回答
0
投票

调整帧大小后未调整JTable大小的原因是因为getContentPane.setLayout(null)。您应该use the proper LayoutManager,让它为您完成工作。设置绝对布局(null)将给您带来麻烦,因为您必须手动设置每个组件的坐标和尺寸。另外,正如您已经面对的那样,JFrame无法调整大小或在具有其他分辨率的屏幕上工作,这完全不友好。

另一篇文章解释了更多原因,以及为什么在Swing中绝对定位不好this one.

© www.soinside.com 2019 - 2024. All rights reserved.