框架中间的JPanel
Posted
技术标签:
【中文标题】框架中间的JPanel【英文标题】:JPanel in the middle of the frame 【发布时间】:2013-12-31 17:03:37 【问题描述】:我正在尝试将我的 jpanel 放在框架的中间...所以当用户尝试更改窗口框架的大小时,它仍然在中间... 像这样:
所以如果我改变大小,它必须保持在中间:
我尝试使用 BorderLayout 更改我的 contentPane 的布局并将我的 jpanel 放在中心位置...但是当我更改框架的大小时,面板进入左上角。 在我的 windows builder 中,情况是这样的: 我的 jpanel 必须完全按照 redbox 的工作方式工作。我尝试了所有方法,但结果每次都一样: 这是我的代码:
package StudApp;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JTextPane;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.SwingConstants;
import java.awt.Color;
import javax.swing.JTextArea;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class StudApp
private JFrame frame;
private JPanel homeFirstRun;
private ArrayList<Corso> corsi = new ArrayList<Corso>();
/**
* Launch the application.
*/
public static void main(String[] args)
EventQueue.invokeLater(new Runnable()
public void run()
new StudApp();
);
/**
* Create the frame.
*/
public StudApp()
frame = new JFrame("Student Note");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(100, 100, 450, 300);
JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);
JMenu menuHelp = new JMenu("Help");
menuBar.add(menuHelp);
JMenuItem menuIstrStud = new JMenuItem("Intructions Student Note");
menuIstrStud.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent arg0)
frame.remove(homeFirstRun);
frame.revalidate();
frame.repaint();
homeFirstRun = null;
);
menuHelp.add(menuIstrStud);
homeFirstRun = new JPanel();
homeFirstRun.setBorder(new EmptyBorder(5, 5, 5, 5));
homeFirstRun.setLayout(null);
frame.getContentPane().add(homeFirstRun);
JLabel welcomeMessage = new JLabel("Welcome to Student Note");
welcomeMessage.setBounds(5, 5, 424, 18);
welcomeMessage.setForeground(Color.DARK_GRAY);
welcomeMessage.setHorizontalAlignment(SwingConstants.CENTER);
welcomeMessage.setFont(new Font("Verdana", Font.BOLD, 14));
homeFirstRun.add(welcomeMessage);
JTextArea welcomeTextArea = new JTextArea();
welcomeTextArea.setFont(new Font("Verdana", Font.PLAIN, 13));
welcomeTextArea.setText(" I think it's your first time here.\n\n"
+ " So the first step is to create a new course to\n insert your grades.\n\n"
+ " If you want my advice, read how this program\n works in the help section (it is very simple),\n "
+ "just 2 minutes ... believe me");
welcomeTextArea.setEditable(false);
welcomeTextArea.setBounds(27, 34, 381, 184);
homeFirstRun.add(welcomeTextArea);
frame.setVisible(true);
【问题讨论】:
+1 为您做出明智的编辑决定。 :) 【参考方案1】:有几种方法可以做到这一点,但最简单的方法之一是给 contentPane 一个 GridBagLayout,然后添加您感兴趣的 JPanel,而不使用 GridBagConstraints。如果感兴趣的 JPanel 是唯一添加到此容器的内容,则这会将 JPanel 置于中心位置。
例如,
import java.awt.*;
import javax.swing.*;
public class CentralPanel
private static void createAndShowGui()
JFrame frame = new JFrame("CentralPanel");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new MyContentPane());
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
public static void main(String[] args)
SwingUtilities.invokeLater(new Runnable()
public void run()
createAndShowGui();
);
class MyContentPane extends JPanel
private static final int PREF_W = 700;
private static final int PREF_H = 550;
public MyContentPane()
setLayout(new GridBagLayout());
add(new JPanelOfInterest());
@Override
public Dimension getPreferredSize()
return new Dimension(PREF_W, PREF_H);
class JPanelOfInterest extends JPanel
private static final int PREF_W = 400;
private static final int PREF_H = PREF_W;
public JPanelOfInterest()
setBorder(BorderFactory.createTitledBorder("JPanel of Interest"));
@Override
public Dimension getPreferredSize()
return new Dimension(PREF_W, PREF_H);
【讨论】:
既然你打败了我,我就点这里的链接,看看Laying out Components within a Container @Hovercraft thx 你能在一个简单的例子中写下这行代码吗?谢谢 @GiovanniFar:参见上面的帖子。 @GiovanniFar:"doesnt work"
没有给我太多继续。你当然已经摆脱了所有setBounds(...)
,对吧?展示您的最新代码,详细描述您的问题,提供我们可以使用的信息。
@HovercraftFullOfEels 我试图理解。如果我不能修复我写代码,也许我能理解一下以上是关于框架中间的JPanel的主要内容,如果未能解决你的问题,请参考以下文章
使用java swing做个界面,中间的容器部分是加载一个网页,该如何解决、可以提供代码参考最好