【问题标题】:java JPanel setSize and setLocationjava JPanel setSize 和 setLocation
【发布时间】:2013-08-07 14:20:48
【问题描述】:

嘿,这是我的第二篇文章,所以不要生我的气,但我在 java 中遇到了 JPanel 的问题。我正在尝试设置大小和位置,但它不起作用,我尝试了 repaint(); 但这不起作用。有什么帮助吗?

这是我的代码:

package test.test.test;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.TextField;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test extends JFrame  {

  JPanel colorPanel = new JPanel();

  public Display(){
    super("JPanel test");
    setLayout(new FlowLayout());
    add(colorPanel);
    colorPanel.setBackground(Color.CYAN);
    colorPanel.setSize(300, 300);
    repaint();
  } 
}

【问题讨论】:

  • 这看起来不像实际编译。你试过编译它吗?当你说它不起作用时,你到底是什么意思?正在发生什么,您希望发生什么?
  • 甚至不要考虑手动设置组件的大小/位置——这是合适的 LayoutManager 的专属任务

标签: java swing layout jframe jpanel


【解决方案1】:

为了方便以后阅读此问题的任何人,这里有一个简短、自包含、正确的示例,用于定义具有背景颜色的 JPanel。

几乎所有时候,您都应该让 Swing 组件布局管理器确定 Swing 组件的大小。在这种情况下,我们定义了 JPanel 的首选大小,因为 JPanel 不包含任何其他 Swing 组件。

JFrame 的默认布局管理器是 BorderLayout。 JPanel 位于 BorderLayout 的中心。

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class SimplePanel implements Runnable {

    @Override
    public void run() {
        JFrame frame = new JFrame("JPanel Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel colorPanel = new JPanel();
        colorPanel.setBackground(Color.CYAN);
        colorPanel.setPreferredSize(new Dimension(300, 300));

        frame.add(colorPanel);

        frame.pack();
        frame.setVisible(true);
    }

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

}

【讨论】:

    【解决方案2】:

    使用 Flowlayout 时,您应该设置首选大小(添加到面板的组件)而不是大小,因为布局管理器会为您处理位置大小。

    public class Test extends JFrame  {
    
      JPanel colorPanel = new JPanel();
    
      public Display(){
        super("JPanel test");
        getContentPane().setLayout(new FlowLayout());
        colorPanel = new JPanel
        colorPanel.setPreferedSize(new Dimension(300,300));
        colorPanel.setBackground(Color.CYAN);
        getContentPane().add(colorPanel);
        pack();
        repaint();
      } 
    }
    

    别忘了设置你的 JFrame 可见和大小(使用 pack()) ;)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    相关资源
    最近更新 更多