java - 我的 JList 占满了整个屏幕

标签 java swing jframe jscrollpane jlist

我的 Java 程序中的 JList 正在占用整个 JPanel! 我该怎么办?

package infoKupProcess;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

class TCPServer extends JFrame {
    public static String processes = "none";
    static String processesList[] = processes.split(":");
    private static int screenWidth = 800, screenHeight = 600;
    static JButton quitButton;
    static JScrollPane procScroll;
    static ServerSocket inSocket;
    private static boolean running = false;

    private static JList procList;

    public TCPServer() {
        initUI();
    }

    public void initUI() {
        JPanel panel = new JPanel();
        getContentPane().add(panel);
        panel.setLayout(new BorderLayout());
        setSize(800, 600);
        // {
        // String listData[] = { "Item 1", "Item 2", "Item 3", "Item 4" };
        //
        // // Create a new listbox control
        // procList = new JList(listData);
        // panel.add(procList, BorderLayout.CENTER);
        // }
        {
            quitButton = new JButton("Ugasi");
            quitButton.setBounds(705, 533, 80, 30);

            quitButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent event) {
                    running = false;
                    try {
                        inSocket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    System.exit(0);
                }
            });
            panel.add(quitButton);
        }
        // setTitle("TCPServer");
        // setSize(screenWidth, screenHeight);
        // setLocationRelativeTo(null);
        // setDefaultCloseOperation(EXIT_ON_CLOSE);
        // Set the frame characteristics

        procList = new JList();
        procList.setListData(processesList);
        procScroll = new JScrollPane(procList);
        panel.add(procScroll);
    }

    public static void main(String argv[]) throws Exception {
        running = true;
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                TCPServer ex = new TCPServer();
                ex.setVisible(true);
            }
        });
        processProcesses();
    }

    public static void processProcesses() throws Exception {
        String clientSentence, capitalizedSentence;
        inSocket = new ServerSocket(25565);
        while (running) {
            Socket connectionSocket = inSocket.accept();
            BufferedReader inFromClient = new BufferedReader(
                    new InputStreamReader(connectionSocket.getInputStream()));

            clientSentence = inFromClient.readLine();
            processes = clientSentence;
            processesList=processes.split(":");
            procList.setListData(processesList);
            DataOutputStream outToClient = new DataOutputStream(
                    connectionSocket.getOutputStream());
            capitalizedSentence = clientSentence.toUpperCase() + '\n';
            outToClient.writeBytes(capitalizedSentence);
        }
    }
}

最佳答案

您正在使用 JPanel 的默认 BorderLayout.CENTER 位置将列表的 JScrollPane 添加到 BorderLayout。所以它将填充 JPanel。解决方案:使用其他布局,或者更好的是,将使用 JPanel 的 BorderLayout 放在另一个使用合适布局的 JPanel 中。


顺便说一句,其他问题:

  • 您的代码显示了对 static 修饰符的严重过度使用和误用,事实上,您的大部分字段和方法不应该是静态的。
  • 您不应设置大小、首选大小、位置或任何内容的边界。让组件、容器和布局管理器发挥它们的魔力并设置 GUI 的大小。
  • 这可以通过在将 JFrame 设置为可见之前调用 pack() 来完成。

关于java - 我的 JList 占满了整个屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21223055/

相关文章:

java - Jetty - 不同端口上的独立 webapp

java - 如何触发 JSlider 更改监听器?

java - 你如何从一个按钮关闭的java swing窗口返回一个值?

java - 在我的文本应用程序中打开文本文件

java - 如何在 jFrame 中隐藏 jTable

java - 当我的体重秤关闭时,我的 JFrame 卡住

java - java "... "运算符做什么(在类构造函数中找到)

java - SWT StyledText - 带有 MeasureItem 监听器的表跳转到顶部

java - 将 JScroll Pane 缩小到与 JTable 相同的高度

Java:无法从静态上下文中引用