- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
中间的“JPanel”,我想将对齐操作移动到单独的函数中,但不知何故不起作用。各项工作均在本地顺利开展。
desCont = new DesignController();
JPanel centerBox = desCont.createCenterPanel();
this.add(centerBox);
DesignController类来源:
public class DesignController {
(...)
public JPanel createCenterPanel(){
JPanel centerPanel = new JPanel();
JPanel hbox = new JPanel();
JPanel vbox = new JPanel();
centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.X_AXIS ));
centerPanel.add(Box.createHorizontalGlue());
centerPanel.add(hbox);
centerPanel.add(Box.createHorizontalGlue());
hbox.setLayout(new BoxLayout(hbox, BoxLayout.Y_AXIS ));
hbox.add(Box.createVerticalGlue());
hbox.add(vbox);
hbox.add(Box.createVerticalGlue());
return centerPanel;
}
}
示例文件中重建问题所需的元素:
public class CenterTest {
private JFrame frame;
private static CardLayout cardLayout = new CardLayout();
private JPanel headPanel;
private static JPanel contentPanel;
private JPanel footerPanel;
private static JPanel mainPanel;
private AppConstants appVars;
-->default main method (generated by IDE)
-->default constructor (generated by IDE)
/**
* Initialize the contents of the frame.
*/
private void initialize() {
appVars = new AppConstants();
frame = new JFrame();
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setBounds(100, 100, appVars.initWidth, appVars.initHeight);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainPanel = new JPanel();
frame.getContentPane().add(mainPanel, BorderLayout.CENTER);
mainPanel.setLayout(new BorderLayout(0, 0));
headPanel = new JPanel();
headPanel.setBackground(Color.LIGHT_GRAY);
headPanel.setPreferredSize(new Dimension( appVars.initHeaderPanelWidth, appVars.headerPanelHeight ));
mainPanel.add(headPanel, BorderLayout.NORTH);
contentPanel = new JPanel();
contentPanel.setPreferredSize(new Dimension(appVars.initContentWidth, appVars.initContentHeight));
mainPanel.add(contentPanel, BorderLayout.CENTER);
contentPanel.setLayout(cardLayout);
footerPanel = new JPanel();
footerPanel.setBackground(Color.GREEN);
footerPanel.setPreferredSize(new Dimension(appVars.initFooterPanelWidth, appVars.footerPanelHeight));
mainPanel.add(footerPanel, BorderLayout.SOUTH);
addCard(new CenterPanel(), "center-panel");
}
public static void addCard(JPanel panel, String name){
contentPanel.add(panel, name);
cardLayout.show(contentPanel, name);
}
}
class CenterPanel extends JPanel {
private static final long serialVersionUID = 1L;
/**
* Include DesignController class.
*/
private DesignController desCont;
/**
* Include global variables class.
*/
private AppConstants appVars;
public CenterPanel(){
appVars = new AppConstants();
desCont = new DesignController();
/* ------------ THIS SECTION IS NOT CORRECTLY WORKING ----------------- */
JPanel hBox = desCont.createCenterPanel();
hBox.setBackground(Color.YELLOW);
this.add(hBox);
/* ------------ THIS SECTION IS NOT CORRECTLY WORKING ----------------- */
/* ------------ THIS SECTION IS CORRECTLY WORKING ----------------- */
/*JPanel hbox = new JPanel();
JPanel vbox = new JPanel();
vbox.setBackground(new Color(0, 204, 204));
vbox.setPreferredSize(new Dimension(appVars.initContentWidth, appVars.initContentHeight));
setLayout(new BoxLayout(this, BoxLayout.X_AXIS ));
add(Box.createHorizontalGlue());
add(hbox);
add(Box.createHorizontalGlue());
hbox.setLayout(new BoxLayout(hbox, BoxLayout.Y_AXIS ));
hbox.add(Box.createVerticalGlue());
hbox.add(vbox);
hbox.add(Box.createVerticalGlue());*/
/* ------------ THIS SECTION IS CORRECTLY WORKING ----------------- */
}
}
class DesignController {
private AppConstants appVars = new AppConstants();
public JPanel createCenterPanel(){
JPanel centerPanel = new JPanel();
JPanel hbox = new JPanel();
JPanel vbox = new JPanel();
vbox.setBackground(new Color(0, 204, 204));
vbox.setPreferredSize(new Dimension(appVars.initContentWidth, appVars.initContentHeight));
centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.X_AXIS ));
centerPanel.add(Box.createHorizontalGlue());
centerPanel.add(hbox);
centerPanel.add(Box.createHorizontalGlue());
hbox.setLayout(new BoxLayout(hbox, BoxLayout.Y_AXIS ));
hbox.add(Box.createVerticalGlue());
hbox.add(vbox);
hbox.add(Box.createVerticalGlue());
return centerPanel;
}
}
class AppConstants {
/**
* Define initial width of window <br/>
* <b>900</b>
*/
public int initWidth = 900;
/**
* Define initial height of window <br/>
* <b>600</b>
*/
public int initHeight = 600;
/**
* Define initial width of window header, same as window width <br/>
* <b>900</b>
*/
public int initHeaderPanelWidth = initWidth;
/**
* Define height of windows header panel <br/>
* <b>80</b>
*/
public int headerPanelHeight = 80;
/**
* Define initial width of window footer, same as window width <br/>
* <b>900</b>
*/
public int initFooterPanelWidth = initWidth;
/**
* Define height of windows footer panel <br/>
* <b>50</b>
*/
public int footerPanelHeight = 50;
/**
* Define initial width of content panel, same as window width <br/>
* <b>900</b>
*/
public int initContentWidth = 900;
/**
* Define height of content panel <br/>
* <b>window initial height - (header panel height + footer panel height)</b>
*/
public int initContentHeight = initHeight - (headerPanelHeight + footerPanelHeight);
}
最佳答案
你的做法是错误的。您无法归还“中心面板”。
为了使面板居中,您需要这样的结构:
HorizontalPanel
VerticalPanel
CenterPanel
垂直/水平面板是包装器,您需要将水平面板添加到框架中,因为它是组件的父面板。
如果将“CenterPanel”添加到框架中,那么您将丢失垂直/水平包装面板,因为 Swing 组件只能有一个父组件。因此该框架成为“CenterPanel”的新父级。
所以你的方法的设计需要类似于:
public static Component centerPanel(Component panelToBeCentered)
{
JPanel vertical = ...
vertical.add( panelToBeCentered );
JPanel horizontal = ...
horizontal.add( vertical );
return horizontal;
}
要使用代码,您需要执行以下操作:
JPanel center = new JPanel();
center.add(...);
frame.add( DesignController.centerPanel( center ) );
请注意,使用 BoxLayout 时,您可以使用方便的静态方法:
Box vertical = Box.createVerticalBox();
Box horizontal Box.createHorizontalBox();
创建一个容器来容纳您的组件。
更简单的是,您不需要使用嵌套框。您可以只使用 GridBagLayout。 GridBagLayout 的默认约束将导致组件居中:
JPanel center = new JPanel();
JPanel wrapper = new JPanel( new GridBagLayout() );
wrapper.add(center, new GridBagConstraints());
frame.add( wrapper );
关于java - 我的 Java Swing JPanel 居中功能不起作用。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40196004/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!