Как автоматически изменить размер JTable при максимизации окна в Eclipse - PullRequest
0 голосов
/ 07 октября 2019

работает над приложением с графическим интерфейсом в Eclipse с помощью плагина windowsbuilder. Приложение работает просто отлично. но jTable не будет изменять размер, когда я перетаскиваю края окна. или когда я максимизирую приложение. В окне есть другие компоненты, размер которых я бы хотел автоматически изменить;однако, jtable является тем, что является обязательным для меня. когда я разверну окно, размер таблицы останется прежним. Я использую Absolute Layout для менеджера по расположению. поэтому размещение элементов в окне было просто вопросом перетаскивания. Я искал свойства, которые позволяют мне установить resize = true или что-то подобное, и я нашел autoRisizeMode. поэтому я установил это на истину. это не сработало. какие-либо предложения? Вот код для моего метода инициализации Gui ()

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);        

    }

1 Ответ

0 голосов
/ 07 октября 2019

Причина, по которой ваш JTable не изменяется после изменения размера фрейма, заключается в том, что вы getContentPane.setLayout(null). Вы должны использовать правильный LayoutManager и позволить ему сделать всю работу за вас. Установка абсолютного макета (null) даст вам трудное время, так как вам придется вручную устанавливать координаты и размеры каждого компонента. Кроме того, как вы уже видите, JFrame не может быть изменяемого размера или работать на экране с другим разрешением, что является абсолютно недружественным.

Еще один пост, где объясняется больше и почему абсолютное позиционирование в Swing плохое, этот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...