繁体   English   中英

无法更改JTable的位置和大小

[英]Unable to change location and size of JTable

我正在用Java创建JTable

这是我的代码。 我将表放在面板( jtjp1 )上, jtjp1放在adminjp1 adminjp1放在adminjf1

 package Hotel_room_reservation_system;

import java.io.*;
import java.lang.*;
import java.awt.*;
import java.awt.Event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.util.*;
import javax.swing.table.*;

public class Hotel_room_reservation_system extends JFrame implements ActionListener {

public JFrame adminjf1;
public JTable jt1;
public JPanel adminjp1;
public JPanel jtjp1; 

public Hotel_room_reservation_system() {
    guimake();
}

public void guimake() {
   adminjf1 = new JFrame("ADMIN");

   adminjp1 = new JPanel();
   jtjp1 =new JPanel(new BorderLayout());
   jt1=new JTable();
   String[] columns = {"Name", "Age", "Gender"};

   String[][] data = {{"John", "18", "Male"},
                     {"Daisy", "19", "Female"},
                     {"Dave", "23", "Male"},
                     {"Jake", "30", "Male"}};

   jt1 = new JTable(data, columns)                 
   {
        public boolean isCellEditable(int data, int columns)
        {
           return false;
        }


        public Component prepareRenderer(TableCellRenderer r, int data, int columns)
        {
               Component c = super.prepareRenderer(r, data, columns);

               if ((data % 2 == 0))
                   c.setBackground(Color.WHITE);

               else
                    c.setBackground(Color.LIGHT_GRAY);

               return c;
        }
    };



    JScrollPane jps = new JScrollPane(jt1);
    //   jt1.setFillsViewportHeight(true);
    jt1.setFillsViewportHeight(true);
    jtjp1.setLocation(10,10);

    adminjf1.setSize(900, 900);
    adminjf1.setLayout(null);
    adminjp1.setBackground(Color.WHITE);
    adminjp1.setSize(800, 800);
    jtjp1.setSize(550,180);
    jtjp1.setBackground(Color.red);


    adminjp1.setLocation(20, 25); 
    jtjp1.add(jps);
    adminjp1.add(jtjp1);
    adminjf1.add(adminjp1);
    adminjf1.setVisible(true);
}

public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new Hotel_room_reservation_system();
        }
    });
}

@Override
public void actionPerformed(ActionEvent e) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
  }
 }

问题

  1. 我无法移动名为jtjp1的面板的大小。
  2. 我无法将jtjp1位置向左或向下更改。 我已经把jtjp1adminjp1

表组件未调整大小的原因是您使用setLayout(null)设置了一个所谓的null布局管理器。 设置此项意味着您应该注意在GUI中定位和调整组件大小。 这就是布局管理器的工作。

一旦使用了布局管理器(例如GroupLayout ,该示例就会按预期工作。

package com.zetcode;

import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import javax.swing.GroupLayout;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.TableCellRenderer;

public class HotelReservationSystemEx extends JFrame {

    private JTable table;

    public HotelReservationSystemEx() {

        initUI();
    }

    private void initUI() {

        String[] columns = {"Name", "Age", "Gender"};

        String[][] data = {{"John", "18", "Male"},
        {"Daisy", "19", "Female"},
        {"Dave", "23", "Male"},
        {"Jake", "30", "Male"}};

        table = new JTable(data, columns) {
            @Override
            public boolean isCellEditable(int data, int columns) {
                return false;
            }

            @Override
            public Component prepareRenderer(TableCellRenderer r, int data, int columns) {
                Component c = super.prepareRenderer(r, data, columns);

                if ((data % 2 == 0)) {
                    c.setBackground(Color.WHITE);
                } else {
                    c.setBackground(Color.LIGHT_GRAY);
                }

                return c;
            }
        };

        //table.setFillsViewportHeight(true);

        JScrollPane spane = new JScrollPane(table);

        createLayout(spane);

        setTitle("Hotel reservation system");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);        
    }

    private void createLayout(JComponent... arg) {

        Container pane = getContentPane();
        GroupLayout gl = new GroupLayout(pane);
        pane.setLayout(gl);

        gl.setAutoCreateContainerGaps(true);

        gl.setHorizontalGroup(gl.createParallelGroup()
                .addComponent(arg[0])
        );

        gl.setVerticalGroup(gl.createSequentialGroup()
                .addComponent(arg[0])
        );

        pack();
    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(() -> {
            HotelReservationSystemEx ex = new HotelReservationSystemEx();
            ex.setVisible(true);
        });
    }
}

另外,您不必创建JPanel并实例化JTable两次。

这是屏幕截图:

该示例的屏幕截图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM